-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
167 lines (107 loc) · 6.12 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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#!make
include .env.local
PIP = .venv/bin/pip
POETRY = .venv/bin/poetry
# Fix docker build and docker compose build using different backends
COMPOSE_DOCKER_CLI_BUILD = 1
DOCKER_BUILDKIT = 1
# Fix docker build on M1/M2
DOCKER_DEFAULT_PLATFORM = linux/amd64
HELP_FUN = \
%help; while(<>){push@{$$help{$$2//'options'}},[$$1,$$3] \
if/^([\w-_]+)\s*:.*\#\#(?:@(\w+))?\s(.*)$$/}; \
print"$$_:\n", map" $$_->[0]".(" "x(20-length($$_->[0])))."$$_->[1]\n",\
@{$$help{$$_}},"\n" for keys %help; \
all: help
help: ##@Help Show this help
@echo -e "Usage: make [target] ...\n"
@perl -e '$(HELP_FUN)' $(MAKEFILE_LIST)
venv: venv-cleanup venv-install##@Env Init venv and install poetry dependencies
venv-cleanup: ##@Env Cleanup venv
@rm -rf .venv || true
python -m venv .venv
${PIP} install -U setuptools wheel pip
${PIP} install poetry
${PIP} install -U flake8-commas
${PIP} install --no-deps sphinx-plantuml
venv-install: ##@Env Install requirements to venv
${POETRY} config virtualenvs.create false
${POETRY} self add poetry-bumpversion
${POETRY} install --no-root --all-extras --with dev,test,docs $(ARGS)
${PIP} install --no-deps sphinx-plantuml
db: db-start db-upgrade ##@DB Prepare database (in docker)
db-start: ##@DB Start database
docker compose up -d --wait db $(DOCKER_COMPOSE_ARGS)
db-revision: ##@DB Generate migration file
${POETRY} run python -m syncmaster.db.migrations revision --autogenerate $(ARGS)
db-upgrade: ##@DB Run migrations to head
${POETRY} run python -m syncmaster.db.migrations upgrade head $(ARGS)
db-downgrade: ##@DB Downgrade head migration
${POETRY} run python -m syncmaster.db.migrations downgrade head-1 $(ARGS)
broker: broker-start ##@Broker Prepare broker (in docker)
broker-start: ##Broker Start broker
docker compose up -d --wait rabbitmq $(DOCKER_COMPOSE_ARGS)
test: test-db test-broker ##@Test Run tests
${POETRY} run pytest $(PYTEST_ARGS)
test-db: test-db-start db-upgrade ##@TestDB Prepare database (in docker)
test-db-start: ##@TestDB Start database
docker compose -f docker-compose.test.yml up -d --wait db $(DOCKER_COMPOSE_ARGS)
test-broker: test-broker-start ##@TestBroker Prepare broker (in docker)
test-broker-start: ##@TestBroker Start broker
docker compose -f docker-compose.test.yml up -d --wait rabbitmq $(DOCKER_COMPOSE_ARGS)
test-unit: test-db ##@Test Run unit tests
${POETRY} run pytest ./tests/test_unit ./tests/test_database $(PYTEST_ARGS)
test-integration-hdfs: test-db ##@Test Run integration tests for HDFS
docker compose -f docker-compose.test.yml --profile hdfs up -d --wait $(DOCKER_COMPOSE_ARGS)
${POETRY} run pytest ./tests/test_integration -m hdfs $(PYTEST_ARGS)
test-integration-hive: test-db ##@Test Run integration tests for Hive
docker compose -f docker-compose.test.yml --profile hive up -d --wait $(DOCKER_COMPOSE_ARGS)
${POETRY} run pytest ./tests/test_integration -m hive $(PYTEST_ARGS)
test-integration-clickhouse: test-db ##@Test Run integration tests for Clickhouse
docker compose -f docker-compose.test.yml --profile clickhouse up -d --wait $(DOCKER_COMPOSE_ARGS)
${POETRY} run pytest ./tests/test_integration -m clickhouse $(PYTEST_ARGS)
test-integration-mysql: test-db ##@Test Run integration tests for MySQL
docker compose -f docker-compose.test.yml --profile mysql up -d --wait $(DOCKER_COMPOSE_ARGS)
${POETRY} run pytest ./tests/test_integration -m mysql $(PYTEST_ARGS)
test-integration-mssql: test-db ##@Test Run integration tests for MSSQL
docker compose -f docker-compose.test.yml --profile mssql up -d --wait $(DOCKER_COMPOSE_ARGS)
${POETRY} run pytest ./tests/test_integration -m mssql $(PYTEST_ARGS)
test-integration-oracle: test-db ##@Test Run integration tests for Oracle
docker compose -f docker-compose.test.yml --profile oracle up -d --wait $(DOCKER_COMPOSE_ARGS)
${POETRY} run pytest ./tests/test_integration -m oracle $(PYTEST_ARGS)
test-integration-s3: test-db ##@Test Run integration tests for S3
docker compose -f docker-compose.test.yml --profile s3 up -d --wait $(DOCKER_COMPOSE_ARGS)
${POETRY} run pytest ./tests/test_integration -m s3 $(PYTEST_ARGS)
test-integration: test-db ##@Test Run all integration tests
docker compose -f docker-compose.test.yml --profile all up -d --wait $(DOCKER_COMPOSE_ARGS)
${POETRY} run pytest ./tests/test_integration $(PYTEST_ARGS)
test-check-fixtures: ##@Test Check declared fixtures
${POETRY} run pytest --dead-fixtures $(PYTEST_ARGS)
test-cleanup: ##@Test Cleanup tests dependencies
docker compose -f docker-compose.test.yml --profile all down $(ARGS)
dev-server: db-start ##@Application Run development server (without docker)
${POETRY} run python -m syncmaster.server $(ARGS)
dev-worker: db-start broker-start ##@Application Run development broker (without docker)
${POETRY} run python -m celery -A syncmaster.worker.celery worker --max-tasks-per-child=1 $(ARGS)
prod-build-server: ##@Application Build docker image for server
docker build --progress=plain -t mtsrus/syncmaster-server:develop -f ./docker/Dockerfile.server --target=prod $(ARGS) .
prod-build-scheduler: ##@Application Build docker image for scheduler
docker build --progress=plain -t mtsrus/syncmaster-scheduler:develop -f ./docker/Dockerfile.scheduler --target=prod $(ARGS) .
prod-build-worker: ##@Application Build docker image for worker
docker build --progress=plain -t mtsrus/syncmaster-worker:develop -f ./docker/Dockerfile.worker --target=prod $(ARGS) .
prod-build: prod-build-server prod-build-worker ##@Application Build docker images
prod: ##@Application Run production server (with docker)
docker compose up -d
prod-stop: ##@Application Stop production server
docker compose down $(ARGS)
.PHONY: docs
docs: docs-build docs-open ##@Docs Generate & open docs
docs-build: ##@Docs Generate docs
${POETRY} run $(MAKE) -C docs html
docs-open: ##@Docs Open docs
xdg-open docs/_build/html/index.html
docs-cleanup: ##@Docs Cleanup docs
$(MAKE) -C docs clean
docs-fresh: docs-cleanup docs-build ##@Docs Cleanup & build docs
openapi: ##@Docs Generate OpenAPI schema
python -m syncmaster.server.scripts.export_openapi_schema docs/_static/openapi.json