-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
149 lines (94 loc) · 4.96 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
#!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-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.backend $(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-backend:develop -f ./docker/Dockerfile.backend $(ARGS) .
prod-build-worker: ##@Application Build docker image for worker
docker build --progress=plain -t mtsrus/syncmaster-worker:develop -f ./docker/Dockerfile.worker $(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