From ee64839bc87f6a3092a7ef3e1ce34425c096358c Mon Sep 17 00:00:00 2001 From: Benjamin Date: Mon, 15 Sep 2025 16:52:48 +0200 Subject: [PATCH] fix: correct Docker migration service configuration - Fix ackify-migrate service to run migrate binary instead of main server - Add entrypoint override to bypass default ENTRYPOINT in Docker image - Copy migrations directory to Docker image for migrate binary access - Update migrate binary with better error handling and code quality --- Dockerfile | 1 + cmd/migrate/main.go | 18 +++++++++++------- docker-compose.yml | 8 +++++++- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4b3f467..670451a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -58,6 +58,7 @@ COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ WORKDIR /app COPY --from=builder /app/ackify /app/ackify COPY --from=builder /app/migrate /app/migrate +COPY --from=builder /app/migrations /app/migrations # Use non-root user (already set in distroless image) # USER 65532:65532 diff --git a/cmd/migrate/main.go b/cmd/migrate/main.go index 3b9445c..5344486 100644 --- a/cmd/migrate/main.go +++ b/cmd/migrate/main.go @@ -1,12 +1,14 @@ package main import ( + "errors" "flag" "fmt" "log" "os" "database/sql" + "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database/postgres" _ "github.com/golang-migrate/migrate/v4/source/file" @@ -35,7 +37,9 @@ func main() { if err != nil { log.Fatal("Cannot connect to database:", err) } - defer db.Close() + defer func(db *sql.DB) { + _ = db.Close() + }(db) // Create postgres driver driver, err := postgres.WithInstance(db, &postgres.Config{}) @@ -52,17 +56,17 @@ func main() { switch command { case "up": err = m.Up() - if err != nil && err != migrate.ErrNoChange { + if err != nil && !errors.Is(err, migrate.ErrNoChange) { log.Fatal("Migration up failed:", err) } fmt.Println("CE migrations applied successfully") case "down": steps := 1 if len(args) > 1 { - fmt.Sscanf(args[1], "%d", &steps) + _, _ = fmt.Sscanf(args[1], "%d", &steps) } err = m.Steps(-steps) - if err != nil && err != migrate.ErrNoChange { + if err != nil && !errors.Is(err, migrate.ErrNoChange) { log.Fatal("Migration down failed:", err) } fmt.Printf("CE migrations rolled back %d steps\n", steps) @@ -98,7 +102,7 @@ func printUsage() { fmt.Println(" -migrations-path string Path to migrations (default: file://migrations)") fmt.Println() fmt.Println("Examples:") - fmt.Println(" go run cmd/migrate/main.go up") - fmt.Println(" go run cmd/migrate/main.go down 2") - fmt.Println(" go run cmd/migrate/main.go version") + fmt.Println(" migrate up") + fmt.Println(" migrate down 2") + fmt.Println(" migrate version") } diff --git a/docker-compose.yml b/docker-compose.yml index 829588b..93ad8a0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,13 +5,19 @@ services: image: btouchard/ackify-ce container_name: ackify-ce-migrate environment: + APP_BASE_URL: "${APP_BASE_URL}" + APP_ORGANISATION: "${APP_ORGANISATION}" + OAUTH_PROVIDER: "${OAUTH_PROVIDER}" + OAUTH_CLIENT_ID: "${OAUTH_CLIENT_ID}" + OAUTH_CLIENT_SECRET: "${OAUTH_CLIENT_SECRET}" DB_DSN: "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@ackify-db:5432/${POSTGRES_DB}?sslmode=disable" depends_on: ackify-db: condition: service_healthy networks: - internal - command: ["./migrate"] + command: ["/app/migrate", "up"] + entrypoint: [] restart: "no" ackify-ce: