-
Notifications
You must be signed in to change notification settings - Fork 66
Expand file tree
/
Copy pathMakefile
More file actions
229 lines (176 loc) · 9.79 KB
/
Makefile
File metadata and controls
229 lines (176 loc) · 9.79 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
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
.DEFAULT_GOAL := help
NODE_BIN := ./node_modules/.bin
define BROWSER_PYSCRIPT
import os, webbrowser, sys
try:
from urllib import pathname2url
except:
from urllib.request import pathname2url
webbrowser.open("file://" + pathname2url(os.path.abspath(sys.argv[1])))
endef
export BROWSER_PYSCRIPT
BROWSER := python -c "$$BROWSER_PYSCRIPT"
# pylint depends on this environment variable.
export DJANGO_SETTINGS_MODULE = enterprise.settings.test
help: ## display this help message
@echo "Please use \`make <target>' where <target> is one of"
@perl -nle'print $& if m{^[\.a-zA-Z_-]+:.*?## .*$$}' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m %-25s\033[0m %s\n", $$1, $$2}'
clean: ## remove generated byte code, coverage reports, and build artifacts
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '__pycache__' -exec rm -rf {} +
find . -name '*~' -exec rm -f {} +
coverage erase
rm -fr build/
rm -fr dist/
rm -fr *.egg-info
clean.static: ## remove all ignored generated static files
rm -rf enterprise/assets/
rm -rf enterprise/static/enterprise/bundles/*.js
static: ## render all static assets for production
$(NODE_BIN)/webpack --config webpack.config.js --display-error-details --progress --optimize-minimize
python manage.py collectstatic --noinput
# TODO: Add the compression app for manage.py settings.
#python manage.py compress -v3 --force
static.dev: ## gather all static assets for a development environment
$(NODE_BIN)/webpack --config webpack.config.js --display-error-details --progress
static.watch: ## watch for static asset changes for a development environment
$(NODE_BIN)/webpack --config webpack.config.js --display-error-details --progress --watch
compile_translations: ## compile translation files, outputting .po files for each supported language
./manage.py compilemessages
dummy_translations: ## generate dummy translation (.po) files
cd enterprise && i18n_tool dummy
extract_translations: ## extract strings to be translated, outputting .mo files
rm -rf docs/_build
i18n_tool extract --no-segment
fake_translations: extract_translations dummy_translations compile_translations ## generate and compile dummy translation files
pull_translations: ## Pull translations from openedx-translations via Atlas
rm -rf enterprise/conf/locale consent/conf/locale
mkdir -p enterprise/conf/locale consent/conf/locale
atlas pull $(ATLAS_OPTIONS) \
translations/edx-enterprise/enterprise/conf/locale:enterprise/conf/locale \
translations/edx-enterprise/consent/conf/locale:consent/conf/locale \
$(ATLAS_EXTRA_SOURCES)
python manage.py compilemessages
push_translations: ## push source translation files (.po) to Transifex (deprecated)
tx push -s
coverage: clean ## generate and view HTML coverage report
py.test --cov-report html
$(BROWSER) htmlcov/index.html
docs: ## generate Sphinx HTML documentation, including API docs
tox -e docs
$(BROWSER) docs/_build/html/index.html
# Define PIP_COMPILE_OPTS=-v to get more information during make upgrade.
PIP_COMPILE = pip-compile --upgrade --rebuild $(PIP_COMPILE_OPTS)
# Pull in the org-wide common_constraints.txt file.
COMMON_CONSTRAINTS_TXT=requirements/common_constraints.txt
.PHONY: $(COMMON_CONSTRAINTS_TXT)
$(COMMON_CONSTRAINTS_TXT):
wget -O "$(@)" https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt || touch "$(@)"
echo "$(COMMON_CONSTRAINTS_TEMP_COMMENT)" | cat - $(@) > temp && mv temp $(@)
# Special for edx-enterprise: Treat production package versions from openedx-platform as local constraints for testing.
# This ensures we'll only test with package versions actually used in production.
LOCAL_EDX_PINS = requirements/edx-platform-constraints.txt
PLATFORM_BASE_REQS = https://raw.githubusercontent.com/openedx/openedx-platform/master/requirements/edx/base.txt
.PHONY: $(LOCAL_EDX_PINS)
$(LOCAL_EDX_PINS): $(COMMON_CONSTRAINTS_TXT) ## check that our local copy of edx-platform pins is accurate
echo "### DON'T edit this file, it's copied from edx-platform. See make upgrade" > $(LOCAL_EDX_PINS)
curl -fsSL $(PLATFORM_BASE_REQS) | grep -v '^-e' | grep -v 'via edx-enterprise$$' >> $(LOCAL_EDX_PINS)
python requirements/check_pins.py requirements/test-master.txt $(LOCAL_EDX_PINS)
upgrade: export CUSTOM_COMPILE_COMMAND=make upgrade
upgrade: $(LOCAL_EDX_PINS) ## update the requirements/*.txt files with the latest packages satisfying requirements/*.in
pip install -qr requirements/pip-tools.txt -c requirements/constraints.txt
# Make sure to compile files after any other files they include!
$(PIP_COMPILE) --allow-unsafe -o requirements/pip.txt requirements/pip.in
$(PIP_COMPILE) -o requirements/pip-tools.txt requirements/pip-tools.in
pip install -qr requirements/pip.txt
pip install -qr requirements/pip-tools.txt
$(PIP_COMPILE) --no-emit-trusted-host --no-emit-index-url -o requirements/test-master.txt requirements/test-master.in
$(PIP_COMPILE) --no-emit-trusted-host --no-emit-index-url -o requirements/doc.txt requirements/doc.in
$(PIP_COMPILE) --no-emit-trusted-host --no-emit-index-url -o requirements/test.txt requirements/test.in
$(PIP_COMPILE) --no-emit-trusted-host --no-emit-index-url -o requirements/dev.txt requirements/dev.in
$(PIP_COMPILE) --no-emit-trusted-host --no-emit-index-url -o requirements/ci.txt requirements/ci.in
$(PIP_COMPILE) --no-emit-trusted-host --no-emit-index-url -o requirements/js_test.txt requirements/js_test.in
# Let tox control the Django version for tests
sed '/^[dD]jango==/d' requirements/test.txt > requirements/test.tmp
mv requirements/test.tmp requirements/test.txt
requirements.js: ## install JS requirements for local development
npm ci
piptools: ## install pinned version of pip-compile and pip-sync
pip install -r requirements/pip-tools.txt
dev_requirements: piptools requirements.js ## sync to requirements for local development
# test-master.txt brings constraints from openedx-platform so that we are testing with the same versions.
pip-sync -q requirements/test-master.txt requirements/dev.txt requirements/private.* requirements/test.txt
requirements: dev_requirements ## install development environment requirements
jshint: ## run Javascript linting
@[ -x ./node_modules/jshint/bin/jshint ] || npm install jshint --no-save
./node_modules/jshint/bin/jshint enterprise
./node_modules/jshint/bin/jshint spec
test: clean ## run python tests
py.test
jasmine: ## run javascript tests
jasmine
diff_cover: test
diff-cover coverage.xml
validate: clean static test jasmine quality ## run all tests and quality checks
quality: pylint pycodestyle isort-check jshint pii_check ## run all quality checks
pylint: ## Lint python code
touch tests/__init__.py
pylint -j 1 enterprise enterprise_learner_portal --clear-cache-post-run=y
pylint -j 1 consent integrated_channels --clear-cache-post-run=y
pylint -j 1 test_utils requirements/check_pins.py --clear-cache-post-run=y
pylint -j 1 tests -v --clear-cache-post-run=y
rm tests/__init__.py
pycodestyle: ## Check python code style
pycodestyle enterprise enterprise_learner_portal consent integrated_channels tests test_utils
pii_check: pii_clean
code_annotations django_find_annotations --config_file .pii_annotations.yml --lint --report --coverage
pii_clean:
rm -rf pii_report
mkdir -p pii_report
isort: ## call isort on packages/files that are checked in quality tests
isort --skip migrations tests test_utils enterprise enterprise_learner_portal consent integrated_channels manage.py setup.py
isort-check: ## call isort on packages/files that are checked in quality tests
isort --skip migrations --check-only --diff tests test_utils enterprise enterprise_learner_portal consent integrated_channels manage.py setup.py
########################################################################
# Docker shortcuts for managing a local test/quality container. #
# For full devstack (edxapp, workers, DB, etc.), see the edx/devstack #
# repository. #
########################################################################
dev.pull: ## Pulls the docker image used by the test container (unsupported)
@echo "ERROR: To re-build the enterprise test container, use `make dev.build` instead."
dev.build: ## Builds the docker image used by the test container
docker compose build test-shell
dev.up: ## Starts the test container
docker compose up --remove-orphans -d test-shell
dev.down: ## Kills the test container and all its data that isn't in volumes
docker compose down
dev.stop: ## Stops the test container so it can be restarted
docker compose stop test-shell
dev.makemigrations: ## Create migrations via the test container
docker compose exec test-shell python manage.py makemigrations
dev.shell: ## Launch a shell in the test container
docker compose exec test-shell bash
dev.logs: ## View the logs of the test container
docker compose logs -f --tail=500 test-shell
dev.restart-container: ## Restart the test container
docker compose restart test-shell
dev.attach: ## Attach to the test container
docker compose attach test-shell
test-shell-up: dev.up
test-shell-down: dev.down
test-shell-stop: dev.stop
test-shell-makemigrations: dev.makemigrations
test-shell-shell: dev.shell
test-shell-logs: dev.logs
test-shell-restart-container: dev.restart-container
test-shell-attach: dev.attach
dev.up.keycloak:
docker compose up --detach keycloak
dev.stop.keycloak:
docker compose stop keycloak
.PHONY: clean clean.static compile_translations coverage docs dummy_translations extract_translations \
fake_translations help pull_translations push_translations requirements dev_requirements test upgrade validate isort \
isort-check static static.dev static.watch quality pylint pycodestyle pii_check pii_clean jasmine \
dev.pull dev.up dev.down dev.stop dev.makemigrations dev.shell dev.logs dev.restart-container dev.attach \
dev.up.keycloak dev.stop.keycloak