-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathMakefile.local
129 lines (96 loc) · 5.35 KB
/
Makefile.local
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
TEST_DIRS := ./swh/web/
TESTFLAGS += --hypothesis-profile=swh-web-fast
TESTFULL_FLAGS = --hypothesis-profile=swh-web
YARN ?= yarn
SETTINGS_CYPRESS ?= swh.web.settings.cypress
SETTINGS_DEV ?= swh.web.settings.development
SETTINGS_PROD = swh.web.settings.production
define run_django_migrations
django-admin migrate --settings=$(1) -v0
endef
define create_django_fixtures
cat swh/web/tests/create_test_admin.py | django-admin shell --settings=$(1)
cat swh/web/tests/create_test_users.py | django-admin shell --settings=$(1)
cat swh/web/tests/create_test_alter.py | django-admin shell --settings=$(1)
endef
define run_django_server
python3 swh/web/manage.py runserver --nostatic --settings=$(1)
endef
yarn-install: package.json
$(YARN) install --frozen-lockfile
build-webpack-dev: yarn-install ## Build frontend assets with webpack
$(YARN) build-dev
build-webpack-test: yarn-install ## | same with coverage activated
$(YARN) build-test
build-webpack-dev-no-verbose: yarn-install ## | same as above without any output
$(YARN) build-dev >/dev/null
build-webpack-prod: yarn-install ## | build assets minified and with mappings for sentry
$(YARN) build
run-migrations-dev: ## Run django db migration (dev: swh.web.settings.development)
$(call run_django_migrations,$(SETTINGS_DEV))
run-migrations-prod: ## | same with prod settings (swh.web.settings.production)
$(call run_django_migrations,$(SETTINGS_PROD))
run-migrations-cypress: ## | same with cypress settings (swh.web.cypress.tests)
rm -f swh-web-test*.sqlite3*
$(call run_django_migrations,$(SETTINGS_CYPRESS))
add-users-cypress: run-migrations-cypress ## Create default django users (cypress settings)
$(call create_django_fixtures,$(SETTINGS_CYPRESS))
add-users-dev: run-migrations-dev ## | same, using dev settings
$(call create_django_fixtures,$(SETTINGS_DEV))
add-users-prod: run-migrations-prod ## | same, using prod settings
$(call create_django_fixtures,$(SETTINGS_PROD))
.PHONY: clear-memcached
clear-memcached: ## Clear locally running memcache (on localhost:1211)
echo "flush_all" | nc -q 2 localhost 11211 2>/dev/null
run-django-webpack-devserver: add-users-dev yarn-install ## Start webpack and django servers using dev settings (frontend and backend parts of the webapp get automatically reloaded when source files are modified)
bash -c "trap 'trap - SIGINT SIGTERM ERR EXIT && \
# ensure all child processes will be killed by PGID when exiting \
ps -o pgid= $$$$ | grep -o [0-9]* | xargs pkill -g' SIGINT SIGTERM ERR EXIT; \
$(YARN) start-dev & sleep 10 && cd swh/web && \
python3 manage.py runserver --nostatic --settings=$(SETTINGS_DEV) || exit 1"
run-django-webpack-dev: build-webpack-dev add-users-dev ## Build assets & start django from src using dev settings
$(call run_django_server,$(SETTINGS_DEV))
run-django-webpack-prod: build-webpack-prod add-users-prod clear-memcached ## | same with prod settings
$(call run_django_server,$(SETTINGS_PROD))
run-django-server-dev: add-users-dev ## Start django from src using dev settings
$(call run_django_server,$(SETTINGS_DEV))
run-django-server-prod: add-users-prod clear-memcached ## | same with prod settings
$(call run_django_server,$(SETTINGS_PROD))
run-gunicorn-server: add-users-prod clear-memcached ## Clear memcache and start django from gunicorn (prod settings)
DJANGO_SETTINGS_MODULE=$(SETTINGS_PROD) \
gunicorn --bind 127.0.0.1:5004 \
--threads 2 \
--workers 2 'django.core.wsgi:get_wsgi_application()'
run-django-webpack-memory-storages: build-webpack-dev add-users-dev ## Start django from tests settings (using in-memory storages)
$(call run_django_server,$(SETTINGS_CYPRESS))
run-mirror-demo: build-webpack-dev add-users-dev ## Start django from tests config using a mirror setup
SWH_CONFIG_FILENAME=$$PWD/mirror_demo/config.yml $(call run_django_server,$(SETTINGS_DEV))
test-full: ## Run all python tests
$(TEST) $(TESTFULL_FLAGS) $(TEST_DIRS)
test-frontend-cmd: build-webpack-test add-users-cypress
bash -c "trap 'trap - SIGINT SIGTERM ERR EXIT && \
jobs -p | xargs -r kill' SIGINT SIGTERM ERR EXIT; \
$(call run_django_server,$(SETTINGS_CYPRESS)) & \
sleep 10 && $(YARN) run cypress run --config numTestsKeptInMemory=0 && \
$(YARN) mochawesome && $(YARN) nyc-report"
test-frontend: export CYPRESS_SKIP_SLOW_TESTS=1
test-frontend: test-frontend-cmd ## Run cypress non-slow tests (no GUI)
test-frontend-full: export CYPRESS_SKIP_SLOW_TESTS=0
test-frontend-full: test-frontend-cmd ## | same, including slow tests
test-frontend-ui-cmd: add-users-cypress yarn-install
# ensure all child processes will be killed when hitting Ctrl-C in terminal
# or manually closing the Cypress UI window, killing by PGID seems the only
# reliable way to do it in that case
bash -c "trap 'trap - SIGINT SIGTERM ERR EXIT && \
ps -o pgid= $$$$ | grep -o [0-9]* | xargs pkill -g' SIGINT SIGTERM ERR EXIT; \
$(YARN) start-dev & \
$(call run_django_server,$(SETTINGS_CYPRESS)) & \
sleep 10 && $(YARN) run cypress open"
test-frontend-ui: export CYPRESS_SKIP_SLOW_TESTS=1
test-frontend-ui: test-frontend-ui-cmd ## Run cypress non-slow tests in a browser (GUI)
test-frontend-full-ui: export CYPRESS_SKIP_SLOW_TESTS=0
test-frontend-full-ui: test-frontend-ui-cmd ## | same, including slow tests
.PHONY: help
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sed -e s/Makefile.local:// | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
.DEFAULT_GOAL := help