-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
139 lines (108 loc) · 4.66 KB
/
Makefile
File metadata and controls
139 lines (108 loc) · 4.66 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
133
134
135
136
137
138
139
# Define variables
DEV_COMPOSE_FILE_OPTIONS=-f docker-compose.base.yml -f docker-compose.dev.yml
PROD_COMPOSE_FILE_OPTIONS=-f docker-compose.base.yml -f docker-compose.prod.yml
# Define targets
.PHONY: all build up down restart logs clean clean-volumes clean-restart foreground
help:
@egrep -h '\s##\s' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m %-30s\033[0m %s\n", $$1, $$2}'
# Development targets
dev-build: ## Build all services
@docker compose $(DEV_COMPOSE_FILE_OPTIONS) build
dev-up: ## Start all services in detached mode
@docker compose $(DEV_COMPOSE_FILE_OPTIONS) up --build
dev-ssh: ## SSH into backend app
@docker compose $(DEV_COMPOSE_FILE_OPTIONS) exec app /bin/bash
dev-migrate: ## Apply database migrations
@docker compose $(DEV_COMPOSE_FILE_OPTIONS) exec app /bin/bash -c "flask db migrate && flask db upgrade"
dev-test: ## Run pytest unit tests
@docker compose $(DEV_COMPOSE_FILE_OPTIONS) exec app /bin/bash -c "bash scripts/run_tests.sh"
dev-integration-test: ## Run pytest integration tests
@docker compose $(DEV_COMPOSE_FILE_OPTIONS) exec app /bin/bash -c "bash scripts/run_int_tests.sh"
dev-stop: ## Stop all services
@docker compose $(DEV_COMPOSE_FILE_OPTIONS) stop
dev-down: ## Stop and remove all services
@docker compose $(DEV_COMPOSE_FILE_OPTIONS) down
# Add start/stop
dev-restart: dev-stop dev-up ## Restart all services
dev-logs: ## View logs
@docker compose $(DEV_COMPOSE_FILE_OPTIONS) logs -f
dev-clean: ## Clean up all containers, networks, images, and orphans
@docker compose $(DEV_COMPOSE_FILE_OPTIONS) down -v --rmi all --remove-orphans
dev-clean-volumes: ## Clean up volumes
@docker volume prune -f
# Clean, build, and restart everything
dev-clean-restart: dev-clean dev-build up
@echo "Application has been cleaned, built, and restarted."
dev-foreground: dev-build ## Start all services in foreground mode
@docker compose $(DEV_COMPOSE_FILE_OPTIONS) up
dev-daemon:
@docker compose $(DEV_COMPOSE_FILE_OPTIONS) up -d
# Production targets
prod-build: ## Build all services
@docker compose $(PROD_COMPOSE_FILE_OPTIONS) build
prod-up: ## Start all services in detached mode
@docker compose $(PROD_COMPOSE_FILE_OPTIONS) up --build
prod-ssh: ## SSH into backend app
@docker compose $(PROD_COMPOSE_FILE_OPTIONS) exec app /bin/bash
prod-migrate: ## Apply database migrations
@docker compose $(PROD_COMPOSE_FILE_OPTIONS) exec app /bin/bash -c "flask db upgrade"
prod-logs: ## View logs
@docker compose $(PROD_COMPOSE_FILE_OPTIONS) logs -f
prod-stop: ## Stop all services
@docker compose $(PROD_COMPOSE_FILE_OPTIONS) stop
prod-down: ## Stop and remove all services
@docker compose $(PROD_COMPOSE_FILE_OPTIONS) down
prod-daemon:
@docker compose $(PROD_COMPOSE_FILE_OPTIONS) up -d
prod-clean:
@docker compose $(PROD_COMPOSE_FILE_OPTIONS) down -v --rmi all --remove-orphans
deploy-app: # deploy flask app
$(eval ENV_FILE := .env)
@echo " - setup env $(ENV_FILE)"
$(eval include .env)
$(eval export sed 's/=.*//' .env)
cd deployment \
&& docker build -t deploy-flask . > /dev/null \
&& docker run -it --rm \
--env ADMIN_API_KEY=$(ADMIN_API_KEY) \
deploy-flask
restore-dev-database: # restore db backup (FILE=dump-file)
$(eval ENV_FILE := .env)
@echo " - setup env $(ENV_FILE)"
$(eval include .env)
$(eval export sed 's/=.*//' .env)
docker compose $(DEV_COMPOSE_FILE_OPTIONS) down app; \
cd deployment; \
docker build -t restore-db . > /dev/null; \
docker run -it --rm \
--network inference_network \
--env MYSQL_DB_HOST=$(MYSQL_DB_HOST) \
--env MYSQL_ROOT_PASSWORD=$(MYSQL_ROOT_PASSWORD) \
--env MYSQL_DATABASE=$(MYSQL_DATABASE) \
--env S3_ENDPOINT_URL=$(S3_ENDPOINT_URL) \
--env S3_ACCESS_KEY=$(S3_ACCESS_KEY) \
--env S3_SECRET_KEY=$(S3_SECRET_KEY) \
--env S3_BUCKET_NAME=$(S3_BUCKET_NAME) \
restore-db python /app/scripts/restore_database.py \
--file ${FILE}; \
cd .. && docker compose $(DEV_COMPOSE_FILE_OPTIONS) up -d app;
restore-prod-database: # restore db backup (FILE=dump-file)
$(eval ENV_FILE := .env)
@echo " - setup env $(ENV_FILE)"
$(eval include .env)
$(eval export sed 's/=.*//' .env)
docker compose $(PROD_COMPOSE_FILE_OPTIONS) down app; \
cd deployment; \
docker build -t restore-db . > /dev/null; \
docker run -it --rm \
--network inference_network \
--env MYSQL_DB_HOST=$(MYSQL_DB_HOST) \
--env MYSQL_ROOT_PASSWORD=$(MYSQL_ROOT_PASSWORD) \
--env MYSQL_DATABASE=$(MYSQL_DATABASE) \
--env S3_ENDPOINT_URL=$(S3_ENDPOINT_URL) \
--env S3_ACCESS_KEY=$(S3_ACCESS_KEY) \
--env S3_SECRET_KEY=$(S3_SECRET_KEY) \
--env S3_BUCKET_NAME=$(S3_BUCKET_NAME) \
restore-db python /app/scripts/restore_database.py \
--file ${FILE}; \
cd .. && docker compose $(PROD_COMPOSE_FILE_OPTIONS) up -d app;