From 1628f8a2ed73f90c01a391ec7aa45f6664df7ada Mon Sep 17 00:00:00 2001 From: MrAlders0n <55921894+MrAlders0n@users.noreply.github.com> Date: Thu, 28 May 2026 22:46:24 +0000 Subject: [PATCH] bake db migrations into app on start (#12) --- .build/Dockerfile | 7 +++++-- .build/docker-entrypoint.sh | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 .build/docker-entrypoint.sh diff --git a/.build/Dockerfile b/.build/Dockerfile index 80cd504..257f8db 100644 --- a/.build/Dockerfile +++ b/.build/Dockerfile @@ -6,7 +6,10 @@ COPY . . RUN go build -o tower ./cmd/tower FROM alpine:3.19 -RUN apk add --no-cache ca-certificates tzdata +RUN apk add --no-cache ca-certificates tzdata postgresql-client WORKDIR /app COPY --from=builder /app/tower . -ENTRYPOINT ["./tower"] +COPY db/migrations/ ./migrations/ +COPY .build/docker-entrypoint.sh . +RUN chmod +x docker-entrypoint.sh +ENTRYPOINT ["./docker-entrypoint.sh"] diff --git a/.build/docker-entrypoint.sh b/.build/docker-entrypoint.sh new file mode 100644 index 0000000..0f7573f --- /dev/null +++ b/.build/docker-entrypoint.sh @@ -0,0 +1,27 @@ +#!/bin/sh +set -e + +if [ -n "$POSTGRES_DSN" ]; then + echo "Running database migrations..." + + psql "$POSTGRES_DSN" -c "CREATE TABLE IF NOT EXISTS schema_migrations ( + filename TEXT PRIMARY KEY, + applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + );" + + for f in /app/migrations/*.sql; do + name=$(basename "$f") + already=$(psql "$POSTGRES_DSN" -tAc "SELECT 1 FROM schema_migrations WHERE filename = '$name'") + if [ "$already" != "1" ]; then + echo " Applying $name..." + psql "$POSTGRES_DSN" -f "$f" + psql "$POSTGRES_DSN" -c "INSERT INTO schema_migrations (filename) VALUES ('$name');" + else + echo " Skipping $name (already applied)" + fi + done + + echo "Migrations complete." +fi + +exec ./tower "$@"