-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
182 lines (150 loc) · 5.17 KB
/
Copy pathMakefile
File metadata and controls
182 lines (150 loc) · 5.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# Makefile for the Shiny imgVoteR Package
# Usage: make [target]
# Package information
PACKAGE_NAME = ShinyImgVoteR
VERSION = 0.1.3
TARBALL = $(PACKAGE_NAME)_$(VERSION).tar.gz
# R command
R = /usr/bin/R
RSCRIPT = Rscript
# DEBUG_TESTS = dev_scripts/debug-tests.sh
DEBUG_TESTS = dev_scripts/debug-tests.R
# CONFIG_FILE_RELATIVE_PATH = app_env/config/config.yaml
# CONFIG_FILE_PATH = $(realpath $(CONFIG_FILE_RELATIVE_PATH))
# SHELL := /usr/bin/env bash
# Default target
.PHONY: all
all: build
# Help target
.PHONY: help
help:
@echo "Available targets:"
@echo " build - Build the R package"
@echo " install - Install the package locally"
@echo " check - Run R CMD check"
@echo " test - Run package tests"
@echo " coverage - Generate test coverage report"
@echo " clean - Clean build artifacts"
@echo " rebuild - Clean, build, and install"
@echo " setup-userdata - Setup external environment (config/, user_data/, database, images/)"
@echo " run - Install package, setup user_data, and run the Shiny app"
@echo " document - Generate documentation with roxygen2"
@echo " deps - Install package dependencies"
@echo " setup-userdata - Setup user_data directory outside package"
@echo " setup-dev - Setup development environment"
@echo " all - Build the package (default)"
# Build the package
.PHONY: build
build:
@echo "Building R package..."
$(R) CMD build .
@echo "Package built: $(TARBALL)"
# Install the package
.PHONY: install
install: build
@echo "Installing R package..."
$(R) CMD INSTALL $(TARBALL)
@echo "Package installed successfully"
# Run R CMD check
.PHONY: check
check: build
@echo "Checking R package..."
$(R) CMD check $(TARBALL)
# Run package tests
.PHONY: test
test: install
@echo "Running package tests..."
$(RSCRIPT) -e "devtools::test()"
.PHONY: debug-test
debug-test: install
chmod +x $(DEBUG_TESTS)
@$(DEBUG_TESTS)
# Generate test coverage
.PHONY: coverage
cov: install
@echo "Generating test coverage report"
@$(RSCRIPT) dev_scripts/coverage.R
# Setup external environment (user_data, database, and config)
.PHONY: setup-userdata
setup-userdata: install
@echo "Setting up external environment (user_data, database, and config)..."
$(RSCRIPT) -e "library($(PACKAGE_NAME)); init_external_environment(); cat('External environment setup complete\n')"
# Run the Shiny application with external user_data
.PHONY: run
# run: install setup-userdata
run: install
@echo "Starting Shiny application with external user_data..."
$(RSCRIPT) -e "devtools::load_all(); run_voting_app(config_file_path='./app_env/config/config.yaml')"
# Generate documentation
.PHONY: document
document:
@echo "Generating documentation..."
$(RSCRIPT) -e "if(!require('roxygen2')) install.packages('roxygen2'); roxygen2::roxygenise()"
# Install dependencies
.PHONY: deps
deps:
@echo "Installing package dependencies..."
$(RSCRIPT) -e "if(!require('devtools')) install.packages('devtools'); devtools::install_deps(dependencies = TRUE)"
# Clean build artifacts
.PHONY: clean
clean:
@echo "Cleaning build artifacts..."
rm $(PACKAGE_NAME)_*.tar.gz
@echo "Cleaned build artifacts"
# Rebuild everything
.PHONY: rebuild
rebuild: clean build install
# Test the installed package functions
.PHONY: test-functions
test-functions: install
@echo "Testing package functions..."
$(RSCRIPT) -e "library($(PACKAGE_NAME)); cat('Testing run_voting_app function exists:', exists('run_voting_app'), '\n'); cat('Testing get_app_dir function:', get_app_dir(), '\n')"
# Quick coverage check
.PHONY: coverage-quick
coverage-quick: install
@echo "Running quick coverage analysis..."
$(RSCRIPT) -e "library(covr); library($(PACKAGE_NAME)); cov <- package_coverage(); cat('Overall coverage:', percent_coverage(cov), '%\n')"
# Development workflow
.PHONY: dev
dev: document build install test-functions
@echo "Development workflow completed"
# CI/CD simulation
.PHONY: ci
ci: deps document build check test coverage-quick
@echo "CI/CD simulation completed"
# Show package information
.PHONY: info
info:
@echo "Package: $(PACKAGE_NAME)"
@echo "Version: $(VERSION)"
@echo "Tarball: $(TARBALL)"
@echo "R Version: $$($(R) --version | head -1)"
# Show installed package info
.PHONY: package-info
package-info: install
@echo "Showing installed package information..."
$(RSCRIPT) -e "library($(PACKAGE_NAME)); cat('Package path:', find.package('$(PACKAGE_NAME)'), '\n'); cat('App directory:', get_app_dir(), '\n')"
# Setup development environment
.PHONY: setup-dev
setup-dev: setup-userdata
@echo "Setting up development environment..."
@if [ -d "inst/shiny-app/db.sqlite" ]; then \
echo "Moving database file..."; \
mv inst/shiny-app/db.sqlite . || true; \
fi
@echo "Development environment setup complete"
stop:
fuser -k 8000/tcp
vignettes-build:
@echo "Building vignettes..."
$(R) -e "devtools::build_vignettes()"
vignettes-run: vignettes-build
@echo "Running vignettes..."
$(R) -e "devtools::load_all(); rmarkdown::run('vignettes/00-vignettes.Rmd')"
# NOTE: below is only working directly in R
pkgdown-build:
$(R) -e "pkgdown::build_site()"
pkgdown-prev:
$(R) -e "pkgdown::preview_site()"
gh-pages:
$(R) -e "usethis::use_pkgdown_github_pages()"