-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathMakefile
More file actions
132 lines (97 loc) · 4.7 KB
/
Copy pathMakefile
File metadata and controls
132 lines (97 loc) · 4.7 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
.PHONY: help requirements upgrade quality mypy format test docs clean clean_tox \
extract_translations compile_translations dummy_translations \
pull_translations push_translations validate_translations \
build_dummy_translations detect_changed_source_translations \
test-lint test-codestyle test-isort test-mypy test-format test-pii test-e2e \
test-all test-quality e2e-start-services e2e-stop-services selfcheck coverage \
install_transifex_client
.DEFAULT_GOAL := help
# For opening files in a browser. Use like: $(BROWSER)relative/path/to/file.html
BROWSER := python -m webbrowser file://$(CURDIR)/
SRC_FILES = src/forum tests test_utils manage.py
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
rm -fr .pytest_cache/
clean_tox: ## clear tox requirements cache
rm -fr .tox
coverage: clean ## generate and view HTML coverage report
uv run pytest --cov-report html
$(BROWSER)htmlcov/index.html
docs: ## generate Sphinx HTML documentation, including API docs
uv run tox -e docs
$(BROWSER)docs/_build/html/index.html
format: ## Auto-fix formatting issues
black ${SRC_FILES}
upgrade: ## update uv.lock and regenerate uv constraints in pyproject.toml
uv run --with edx-lint edx_lint write_uv_constraints pyproject.toml
uv lock --upgrade
requirements: ## Sync dev dependencies
uv sync --group dev
uv tool install tox --with tox-uv
test-all: selfcheck clean test test-quality test-pii test-e2e ## run all tests
test: ## run unit tests
pytest
test-quality: test-lint test-codestyle test-mypy ## run static coverage tests
test-lint: ## run pylint
pylint ${SRC_FILES}
test-codestyle: ## run pycodestyle, pydocstyle
pycodestyle ${SRC_FILES}
pydocstyle ${SRC_FILES}
test-isort: ## run isort checks
isort --check-only --diff ${SRC_FILES}
test-mypy: ## run type tests
mypy ${SRC_FILES}
test-format: ## Run code formatting tests
black --check ${SRC_FILES}
test-pii: ## check for PII annotations on all Django models
DJANGO_SETTINGS_MODULE=forum.settings.test \
code_annotations django_find_annotations --config_file .pii_annotations.yml --lint --report --coverage
test-e2e: e2e-stop-services e2e-start-services ## run end-to-end tests
pytest tests/e2e
e2e-start-services: ## Start dependency containers necessary for e2e tests
docker compose -f tests/e2e/docker-compose.yml --project-name forum_e2e up -d
e2e-stop-services: ## Stop dependency containers necessary for e2e tests
docker compose -f tests/e2e/docker-compose.yml --project-name forum_e2e down
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 src/forum && i18n_tool extract --no-segment
compile_translations: ## compile translation files, outputting .po files for each supported language
cd src/forum && i18n_tool generate
detect_changed_source_translations:
cd src/forum && i18n_tool changed
ifeq ($(OPENEDX_ATLAS_PULL),)
pull_translations: ## Pull translations from Transifex
tx pull -t -a -f --mode reviewed --minimum-perc=1
else
# Experimental: OEP-58 Pulls translations using atlas
pull_translations:
find src/forum/conf/locale -mindepth 1 -maxdepth 1 -type d -exec rm -r {} \;
atlas pull $(OPENEDX_ATLAS_ARGS) translations/forum/forum/conf/locale:src/forum/conf/locale
python manage.py compilemessages
@echo "Translations have been pulled via Atlas and compiled."
endif
push_translations: ## push source translation files (.po) from Transifex
tx push -s
dummy_translations: ## generate dummy translation (.po) files
cd src/forum && 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
install_transifex_client: ## Install the Transifex client
# Installing client will skip CHANGELOG and LICENSE files from git changes
# so remind the user to commit the change first before installing client.
git diff -s --exit-code HEAD || { echo "Please commit changes first."; exit 1; }
curl -o- https://raw.githubusercontent.com/transifex/cli/master/install.sh | bash
git checkout -- LICENSE.txt README.rst