-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
238 lines (215 loc) · 9.6 KB
/
Makefile
File metadata and controls
238 lines (215 loc) · 9.6 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
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
.PHONY: help up down restart logs shell backup restore create-admin create-user migrate test format maintenance-on maintenance-off prod-up prod-down prod-restart clean-for-github
# Colors for terminal output
ifeq ($(shell tput colors 2>/dev/null || echo 0),0)
# Terminal doesn't support colors
GREEN=
YELLOW=
RED=
NC=
else
# Define colors with proper shell escaping
GREEN=$(shell printf "\033[0;32m")
YELLOW=$(shell printf "\033[0;33m")
RED=$(shell printf "\033[0;31m")
NC=$(shell printf "\033[0m") # No Color
endif
# Help command to list all available commands
help:
@echo "${GREEN}Aggregator Development Tool${NC}"
@echo ""
@echo "${YELLOW}Usage:${NC}"
@echo " make [command]"
@echo ""
@echo "${YELLOW}Available Commands:${NC}"
@echo " ${GREEN}help${NC} Show this help message"
@echo " ${GREEN}up${NC} Start the development environment"
@echo " ${GREEN}down${NC} Stop the development environment"
@echo " ${GREEN}restart${NC} Restart the development environment"
@echo " ${GREEN}logs${NC} View logs from all services"
@echo " ${GREEN}logs-backend${NC} View backend logs"
@echo " ${GREEN}logs-frontend${NC} View frontend logs"
@echo " ${GREEN}logs-db${NC} View database logs"
@echo " ${GREEN}shell-backend${NC} Open a shell in the backend container"
@echo " ${GREEN}shell-frontend${NC} Open a shell in the frontend container"
@echo " ${GREEN}backup-db${NC} Create a database backup"
@echo " ${GREEN}restore-db${NC} Restore database from backup"
@echo " ${GREEN}create-admin${NC} Create a new admin user"
@echo " ${GREEN}create-user${NC} Create a new regular user"
@echo " ${GREEN}migrate${NC} Run database migrations"
@echo " ${GREEN}test${NC} Run tests"
@echo " ${GREEN}format${NC} Format code according to project standards"
@echo " ${GREEN}maintenance-on${NC} Enable maintenance mode"
@echo " ${GREEN}maintenance-off${NC} Disable maintenance mode"
@echo " ${GREEN}prod-up${NC} Start production services"
@echo " ${GREEN}prod-down${NC} Stop production services"
@echo " ${GREEN}prod-restart${NC} Restart production services"
@echo " ${GREEN}clean-for-github${NC} Remove GitLab-specific files for GitHub publication"
@echo ""
@echo "${YELLOW}Examples:${NC}"
@echo " make up # Start all containers"
@echo " make backup-db # Create a timestamped database backup"
@echo " make create-admin # Interactive prompt to create an admin user"
@echo " make create-user # Interactive prompt to create a regular user"
@echo " make maintenance-on # Enable maintenance mode for production"
# Docker compose commands
up:
@echo "${GREEN}Starting development environment...${NC}"
docker-compose -f ../docker-compose.merged.yml up -d --pull never
@echo "${GREEN}Services are now running:${NC}"
@echo " Backend: http://localhost:8000/api/v1"
@echo " Frontend: http://localhost:3000"
@echo " API Docs: http://localhost:8000/docs"
down:
@echo "${RED}Stopping development environment...${NC}"
docker-compose -f ../docker-compose.merged.yml down
restart:
@echo "${YELLOW}Restarting development environment...${NC}"
docker-compose -f ../docker-compose.merged.yml down
docker-compose -f ../docker-compose.merged.yml up -d --pull never
# Logs
logs:
docker-compose logs -f
logs-backend:
docker logs -f searchgfbioorg-aggregator_backend-1
logs-frontend:
docker logs -f searchgfbioorg-aggregator_frontend-1
logs-db:
docker logs -f searchgfbioorg-postgres-1
# Shell access
shell-backend:
docker exec -it searchgfbioorg-aggregator_backend-1 /bin/bash
shell-frontend:
docker exec -it searchgfbioorg-aggregator_frontend-1 /bin/bash
# Database operations
backup-db:
@echo "${GREEN}Creating database backup...${NC}"
@mkdir -p backups
@TIMESTAMP=$$(date +%Y%m%d_%H%M%S); \
docker exec searchgfbioorg-postgres-1 pg_dump -U $${DB_USER:-user} $${DB_NAME:-dbname} > backups/db_backup_$${TIMESTAMP}.sql
@echo "${GREEN}Backup created in backups/db_backup_$${TIMESTAMP}.sql${NC}"
restore-db:
@echo "${YELLOW}Available backups:${NC}"
@ls -1 backups/ | grep .sql | cat -n
@echo ""
@read -p "Enter backup number to restore: " number; \
FILE=$$(ls -1 backups/ | grep .sql | sed -n $${number}p); \
if [ -n "$$FILE" ]; then \
echo "${YELLOW}Restoring from backups/$${FILE}...${NC}"; \
docker exec -i searchgfbioorg-postgres-1 psql -U $${DB_USER:-user} $${DB_NAME:-dbname} < backups/$${FILE}; \
echo "${GREEN}Database restored successfully!${NC}"; \
else \
echo "${RED}Invalid backup number${NC}"; \
fi
# User management
create-admin:
@echo "${GREEN}Creating new admin user...${NC}"
@docker exec searchgfbioorg-aggregator_backend-1 python -m utils.manage_user --global-admin
create-user:
@echo "${GREEN}Creating new regular user...${NC}"
@echo "Please enter a username when prompted (do NOT use 'admin')."
@read -p "Enter username for the new regular user: " username; \
if [ -z "$$username" ]; then \
echo "${RED}Username cannot be empty.${NC}"; \
exit 1; \
fi; \
docker exec searchgfbioorg-aggregator_backend-1 python -m utils.manage_user --username $$username && \
docker exec searchgfbioorg-aggregator_backend-1 python -m utils.update_regular_user $$username
@echo "${GREEN}Regular user creation complete${NC}"
# Development tasks
migrate:
@echo "${GREEN}Running database migrations...${NC}"
@docker exec searchgfbioorg-aggregator_backend-1 alembic upgrade head
test:
@echo "${GREEN}Running tests...${NC}"
@docker exec searchgfbioorg-aggregator_backend-1 pytest
# Maintenance mode
maintenance-on:
@echo "${YELLOW}Enabling maintenance mode...${NC}"
@if [ -f "docker-compose.prod.registry.yml" ]; then \
export BACKEND_TRAEFIK_ENABLED=false; \
export FRONTEND_TRAEFIK_ENABLED=false; \
export MAINTENANCE_TRAEFIK_ENABLED=true; \
export IMAGE_TAG=$$(docker images docker.gitlab-pe.gwdg.de/gfbio/aggregator/backend --format "{{.Tag}}" | head -1); \
echo "${YELLOW}Using image tag: $${IMAGE_TAG}${NC}"; \
docker-compose -f docker-compose.prod.registry.yml down; \
docker-compose -f docker-compose.prod.registry.yml up -d --no-build --pull never; \
echo "${GREEN}Maintenance mode enabled.${NC}"; \
else \
echo "${RED}Error: docker-compose.prod.registry.yml not found.${NC}"; \
exit 1; \
fi
maintenance-off:
@echo "${YELLOW}Disabling maintenance mode...${NC}"
@if [ -f "docker-compose.prod.registry.yml" ]; then \
export BACKEND_TRAEFIK_ENABLED=true; \
export FRONTEND_TRAEFIK_ENABLED=true; \
export MAINTENANCE_TRAEFIK_ENABLED=false; \
export IMAGE_TAG=$$(docker images docker.gitlab-pe.gwdg.de/gfbio/aggregator/backend --format "{{.Tag}}" | head -1); \
echo "${YELLOW}Using image tag: $${IMAGE_TAG}${NC}"; \
docker-compose -f docker-compose.prod.registry.yml down; \
docker-compose -f docker-compose.prod.registry.yml up -d --no-build --pull never; \
echo "${GREEN}Maintenance mode disabled.${NC}"; \
else \
echo "${RED}Error: docker-compose.prod.registry.yml not found.${NC}"; \
exit 1; \
fi
# Production deployment commands
prod-up:
@echo "${YELLOW}Starting production services...${NC}"
@if [ -f "docker-compose.prod.registry.yml" ]; then \
export IMAGE_TAG=$$(docker images docker.gitlab-pe.gwdg.de/gfbio/aggregator/backend --format "{{.Tag}}" | head -1); \
echo "${YELLOW}Using image tag: $${IMAGE_TAG}${NC}"; \
docker-compose -f docker-compose.prod.registry.yml up -d --no-build --pull never; \
echo "${GREEN}Production services started.${NC}"; \
else \
echo "${RED}Error: docker-compose.prod.registry.yml not found.${NC}"; \
exit 1; \
fi
prod-down:
@echo "${YELLOW}Stopping production services...${NC}"
@if [ -f "docker-compose.prod.registry.yml" ]; then \
docker-compose -f docker-compose.prod.registry.yml down; \
echo "${GREEN}Production services stopped.${NC}"; \
else \
echo "${RED}Error: docker-compose.prod.registry.yml not found.${NC}"; \
exit 1; \
fi
prod-restart:
@echo "${YELLOW}Restarting production services...${NC}"
@if [ -f "docker-compose.prod.registry.yml" ]; then \
export IMAGE_TAG=$$(docker images docker.gitlab-pe.gwdg.de/gfbio/aggregator/backend --format "{{.Tag}}" | head -1); \
echo "${YELLOW}Using image tag: $${IMAGE_TAG}${NC}"; \
docker-compose -f docker-compose.prod.registry.yml down; \
docker-compose -f docker-compose.prod.registry.yml up -d --no-build --pull never; \
echo "${GREEN}Production services restarted.${NC}"; \
else \
echo "${RED}Error: docker-compose.prod.registry.yml not found.${NC}"; \
exit 1; \
fi
# GitHub publication cleanup
clean-for-github:
@echo "${YELLOW}Cleaning files for GitHub publication...${NC}"
@if git rev-parse --verify github-main >/dev/null 2>&1; then \
echo "${YELLOW}Switching to github-main branch...${NC}"; \
git checkout github-main; \
else \
echo "${YELLOW}Creating github-main branch...${NC}"; \
git checkout -b github-main; \
fi
@echo "${YELLOW}Removing GitLab-specific files...${NC}"
@FILES_TO_REMOVE=""; \
for file in .gitlab-ci.yml docker-compose.prod.registry.yml backend/celerybeat-schedule backend/data/import.log; do \
if [ -f "$$file" ]; then \
FILES_TO_REMOVE="$$FILES_TO_REMOVE $$file"; \
fi; \
done; \
if [ -n "$$FILES_TO_REMOVE" ]; then \
git rm $$FILES_TO_REMOVE 2>/dev/null || echo "Some files already removed"; \
echo "${GREEN}Removed:$$FILES_TO_REMOVE${NC}"; \
else \
echo "${GREEN}All GitLab-specific files already cleaned${NC}"; \
fi
@echo "${GREEN}GitHub branch prepared. You can now:"
@echo " 1. Review changes with: git status"
@echo " 2. Commit changes if needed"
@echo " 3. Update GitLab mirror to use github-main branch${NC}"