# Migration Engine - Database Migration Tool # Multi-stage build to compile with CGO support # Build stage # Let buildx handle platform automatically FROM golang:1.25-alpine AS builder # Get build platform from buildx ARG TARGETPLATFORM ARG TARGETOS ARG TARGETARCH # Install build dependencies for CGO RUN apk add --no-cache \ gcc \ g++ \ musl-dev \ sqlite-dev \ git WORKDIR /build # Copy go mod files COPY go.mod go.sum ./ RUN go mod download # Copy source code COPY . . # Build with CGO enabled ARG TARGETOS ARG TARGETARCH ARG VERSION=dev ARG GIT_COMMIT=unknown ARG BUILD_TIME=unknown RUN CGO_ENABLED=1 GOOS=$TARGETOS GOARCH=$TARGETARCH \ go build -ldflags="-s -w \ -X main.Version=${VERSION} \ -X main.GitCommit=${GIT_COMMIT} \ -X main.BuildTime=${BUILD_TIME}" \ -o migrate ./cmd/migrate # Runtime stage FROM alpine:latest # Install runtime dependencies (including CGO/SQLite dependencies) RUN apk add --no-cache \ ca-certificates \ postgresql-client \ mysql-client \ busybox-extras \ sqlite-libs \ musl \ && update-ca-certificates # Create non-root user RUN addgroup -g 1000 gohoarder && \ adduser -D -u 1000 -G gohoarder gohoarder # Copy binary from builder COPY --from=builder /build/migrate /usr/local/bin/migrate RUN chmod +x /usr/local/bin/migrate WORKDIR /app USER gohoarder # Run migrations ENTRYPOINT ["/usr/local/bin/migrate"] CMD ["--action=migrate"]