-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
154 lines (124 loc) · 5.43 KB
/
Copy pathMakefile
File metadata and controls
154 lines (124 loc) · 5.43 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
POSTGRES_HOST ?= localhost
POSTGRES_PORT ?= 5432
POSTGRES_DB ?= kartslalom
POSTGRES_USER ?= postgres
POSTGRES_PASSWORD ?= password
ifneq (,$(wildcard .env))
include .env
else ifneq (,$(wildcard .env.sample))
include .env.sample
endif
ifneq (,$(wildcard .env.build))
include .env.build
endif
DATABASE_URL ?= postgresql://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@$(POSTGRES_HOST):$(POSTGRES_PORT)/$(POSTGRES_DB)
# Next.js only reads webapp/.env, not the repo-root .env — so pass the app
# secrets from .env through the environment (shell env wins over .env files).
export POSTGRES_HOST POSTGRES_PORT POSTGRES_DB POSTGRES_USER POSTGRES_PASSWORD DATABASE_URL
export ADMIN_TOKEN OPENAI_API_KEY OPENAI_TRANSCRIBE_MODEL OPENAI_EXTRACT_MODEL OPENAI_VISION_MODEL
.PHONY: create-server-dir check-deploy-vars provision deploy serverup server-db-push server-db-seed \
server-db-seed-endlauf26 server-db-fix-names start-db stop-db install dev dev-webapp dev-db \
seed-db seed-endlauf26 parse-endlauf26 push-db fix-names reset-db build up down logs
# For a new installation copy needed files to the server
# NOTE: The scp/rsync command requires that the destination directory already exists on the remote server.
create-server-dir: check-deploy-vars
ssh $(SERVER_USER)@$(SERVER_HOST) "\
mkdir -p $(SERVER_PROJECT_PATH) && \
chown $(SERVER_USER):docker $(SERVER_PROJECT_PATH) && \
chmod 755 $(SERVER_PROJECT_PATH)"
check-deploy-vars:
@test -n "$(SERVER_USER)" || (echo "Missing SERVER_USER in .env.build" && exit 1)
@test -n "$(SERVER_HOST)" || (echo "Missing SERVER_HOST in .env.build" && exit 1)
@test -n "$(SERVER_PROJECT_PATH)" || (echo "Missing SERVER_PROJECT_PATH in .env.build" && exit 1)
@test -n "$(SERVER_DOCKER_COMPOSE)" || (echo "Missing SERVER_DOCKER_COMPOSE in .env.build" && exit 1)
@test -n "$(SERVER_ENV_FILE)" || (echo "Missing SERVER_ENV_FILE in .env.build" && exit 1)
@test -f "$(SERVER_ENV_FILE)" || (echo "Missing $(SERVER_ENV_FILE) — copy .env.server.sample and fill in production secrets" && exit 1)
provision: check-deploy-vars
rsync -avz --delete \
--exclude '.git/' \
--exclude 'node_modules/' \
--exclude 'webapp/node_modules/' \
--exclude 'webapp/.next/' \
--exclude '.env' \
--exclude '.env.build' \
--exclude '.env.sample' \
--exclude '.env.server.sample' \
--exclude '*.png' \
--exclude 'plan.txt' \
--exclude 'sample-docker-compose.yaml' \
--exclude 'docker-compose.local.yaml' \
--exclude 'Makefile' \
--exclude 'README.md' \
./ \
$(SERVER_USER)@$(SERVER_HOST):$(SERVER_PROJECT_PATH)/
deploy: provision serverup
serverup: check-deploy-vars
ssh $(SERVER_USER)@$(SERVER_HOST) "\
cd $(SERVER_PROJECT_PATH) && \
docker compose -f $(SERVER_DOCKER_COMPOSE) --env-file $(SERVER_ENV_FILE) down && \
docker compose -f $(SERVER_DOCKER_COMPOSE) --env-file $(SERVER_ENV_FILE) up -d --build --remove-orphans"
server-db-push: check-deploy-vars
ssh $(SERVER_USER)@$(SERVER_HOST) "\
cd $(SERVER_PROJECT_PATH) && \
docker compose -f $(SERVER_DOCKER_COMPOSE) --env-file $(SERVER_ENV_FILE) exec -T webapp npm run db:push"
server-db-seed: check-deploy-vars
ssh $(SERVER_USER)@$(SERVER_HOST) "\
cd $(SERVER_PROJECT_PATH) && \
docker compose -f $(SERVER_DOCKER_COMPOSE) --env-file $(SERVER_ENV_FILE) exec -T webapp npm run db:seed"
# Endläufe 2026: seed the separate hmj / ADAC Hessen-Thüringen data set (idempotent).
server-db-seed-endlauf26: check-deploy-vars
ssh $(SERVER_USER)@$(SERVER_HOST) "\
cd $(SERVER_PROJECT_PATH) && \
docker compose -f $(SERVER_DOCKER_COMPOSE) --env-file $(SERVER_ENV_FILE) exec -T webapp npm run db:seed-endlauf26"
# One-off repair for drivers with hyphenated names (e.g. Peruga-Kaminska, Jack-Leon).
# Derives affected rows from race-drivers.txt; idempotent — safe to re-run.
server-db-fix-names: check-deploy-vars
ssh $(SERVER_USER)@$(SERVER_HOST) "\
cd $(SERVER_PROJECT_PATH) && \
docker compose -f $(SERVER_DOCKER_COMPOSE) --env-file $(SERVER_ENV_FILE) exec -T webapp npm run db:fix-names"
start-db:
docker compose -f docker-compose.local.yaml up -d --wait
stop-db:
docker compose -f docker-compose.local.yaml down
reset-db:
docker compose -f docker-compose.local.yaml down -v
$(MAKE) start-db
cd webapp && npm run db:push
$(MAKE) seed-db
install: start-db
cd webapp && npm install
cd webapp && npm run db:push
$(MAKE) seed-db
push-db:
cd webapp && npm run db:push
seed-db:
cd webapp && npm run db:seed
# Endläufe 2026 (hmj + ADAC Hessen-Thüringen) from data/endlauf26/*.json
seed-endlauf26:
cd webapp && npm run db:seed-endlauf26
# Regenerate data/endlauf26/*.json from the official PDFs in data/endlauf26/source/.
# Needs python3 with pdfplumber: python3 -m venv .venv && .venv/bin/pip install pdfplumber
PDFPY ?= python3
parse-endlauf26:
$(PDFPY) webapp/scripts/endlauf26/parse-pdfs.py \
--hmj data/endlauf26/source/2026_hmj_KS_Hessische_Meisterschaft_Zwischenstand.pdf \
--adac Süd=data/endlauf26/source/JKS-Sued-260816.pdf \
--adac Nord=data/endlauf26/source/JKS-Nord-260816.pdf \
--adac Ost=data/endlauf26/source/JKS-Ost_260831.pdf \
--out data/endlauf26
fix-names:
cd webapp && npm run db:fix-names
dev-webapp:
cd webapp && npm run dev
dev-db:
cd webapp && npm run db:studio
dev: start-db
$(MAKE) -j2 dev-webapp dev-db
build:
docker compose -f docker-compose.server.yaml build
up:
docker compose -f docker-compose.server.yaml up -d --remove-orphans
down:
docker compose -f docker-compose.server.yaml down
logs:
docker compose -f docker-compose.server.yaml logs -f --tail=100