-
Notifications
You must be signed in to change notification settings - Fork 12
/
Makefile
144 lines (110 loc) · 5.58 KB
/
Makefile
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
.PHONY: build_docs build_dummy_translations clean compile_translations \
coverage detect_changed_source_translations diff_cover docs \
dummy_translations extract_translations help isort isort_check \
pip-tools pull_translations push_translations pylint quality \
requirements selfcheck style test test-all upgrade upgrade \
upgrade-pip-tools validate validate_translations
.DEFAULT_GOAL := help
# For opening files in a browser. Use like: $(BROWSER)relative/path/to/file.html
BROWSER := python -m webbrowser file://$(CURDIR)/
help: ## display this help message
@echo "Please use \`make <target>' where <target> is one of"
@awk -F ':.*?## ' '/^[a-zA-Z]/ && NF==2 {printf "\033[36m %-25s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) | sort
clean: ## remove generated byte code, coverage reports, and build artifacts
find . -name '__pycache__' -exec rm -rf {} +
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '*~' -exec rm -f {} +
coverage erase
rm -fr build/
rm -fr dist/
rm -fr *.egg-info
coverage: clean ## generate and view HTML coverage report
pytest --cov-report html
$(BROWSER)htmlcov/index.html
build_docs:
doc8 --ignore-path docs/_build README.rst docs
make -C docs clean
make -C docs html
python setup.py sdist
twine check dist/*.tar.gz
docs: ## generate and show Sphinx HTML documentation, including API docs
tox -e docs
$(BROWSER)docs/_build/html/index.html
pip-tools:
pip install -qr requirements/pip-tools.txt
pip:
pip install -qr requirements/pip.txt
upgrade-pip-tools: pip-tools
pip-compile --upgrade requirements/pip-tools.in
define COMMON_CONSTRAINTS_TEMP_COMMENT
# This is a temporary solution to override the real common_constraints.txt\n# In edx-lint, until the pyjwt constraint in edx-lint has been removed.\n# See BOM-2721 for more details.\n# Below is the copied and edited version of common_constraints\n
endef
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 $(@)
upgrade: export CUSTOM_COMPILE_COMMAND=make upgrade
upgrade: $(COMMON_CONSTRAINTS_TXT) ## update the requirements/*.txt files with the latest packages satisfying requirements/*.in
# Make sure to compile files after any other files they include!
pip install -qr requirements/pip-tools.txt
sed 's/Django<4.0//g' requirements/common_constraints.txt > requirements/common_constraints.tmp
mv requirements/common_constraints.tmp requirements/common_constraints.txt
pip-compile --upgrade -o requirements/pip-tools.txt requirements/pip-tools.in
pip-compile --upgrade --allow-unsafe --rebuild -o requirements/pip.txt requirements/pip.in
pip install -qr requirements/pip-tools.txt
pip install -qr requirements/pip.txt
pip-compile --upgrade --allow-unsafe requirements/base.in
pip-compile --upgrade --allow-unsafe requirements/test.in
pip-compile --upgrade --allow-unsafe requirements/doc.in
pip-compile --upgrade --allow-unsafe requirements/quality.in
pip-compile --upgrade --allow-unsafe requirements/ci.in
pip-compile --upgrade --allow-unsafe requirements/dev.in
# Delete django, drf pins from test.txt so that tox can control
# Django version.
sed -i.tmp '/^[dD]jango==/d' requirements/test.txt
sed -i.tmp '/^djangorestframework==/d' requirements/test.txt
rm requirements/test.txt.tmp
CHECKABLE_PYTHON=tests test_utils example edx_api_doc_tools manage.py setup.py test_settings.py
style:
pycodestyle $(CHECKABLE_PYTHON)
pydocstyle $(CHECKABLE_PYTHON)
isort: # sort all imports.
isort --recursive $(CHECKABLE_PYTHON)
isort_check:
isort --check-only --diff $(CHECKABLE_PYTHON)
pylint:
echo '"""This file exists only to satisify pylint; it is not committed."""' > tests/__init__.py
pylint --django-settings-module=test_settings $(CHECKABLE_PYTHON)
rm tests/__init__.py
quality: style isort_check pylint ## check code style, import ordering, linting, and this makefile
make selfcheck
requirements: pip-tools ## install development environment requirements
pip-sync requirements/dev.txt requirements/private.*
test: clean ## run tests in the current virtualenv
pytest
diff_cover: test ## find diff lines that need test coverage
diff-cover coverage.xml
test-all: quality ## run tests on every supported Python/Django combination
tox
validate: quality test ## run tests and quality checks
selfcheck: ## check that the Makefile is well-formed
@echo "The Makefile is well-formed."
## Localization targets
extract_translations: ## extract strings to be translated, outputting .mo files
rm -rf docs/_build
cd edx_api_doc_tools && ../manage.py makemessages -l en -v1 -d django
cd edx_api_doc_tools && ../manage.py makemessages -l en -v1 -d djangojs
compile_translations: ## compile translation files, outputting .po files for each supported language
cd edx_api_doc_tools && ../manage.py compilemessages
detect_changed_source_translations:
cd edx_api_doc_tools && i18n_tool changed
pull_translations: ## pull translations from Transifex
tx pull -t -a -f --mode reviewed
push_translations: ## push source translation files (.po) from Transifex
tx push -s
dummy_translations: ## generate dummy translation (.po) files
cd edx_api_doc_tools && i18n_tool dummy
build_dummy_translations: extract_translations dummy_translations compile_translations ## generate and compile dummy translation files
validate_translations: build_dummy_translations detect_changed_source_translations ## validate translations