# Stage 1: Build the Go binaries
FROM golang:1.26-alpine AS builder

WORKDIR /app

COPY go.mod go.sum .env ./
RUN go mod download

COPY . .

RUN CGO_ENABLED=0 GOOS=linux go build -o /main ./cmd/app
RUN CGO_ENABLED=0 GOOS=linux go build -o /migrate ./migrations
RUN CGO_ENABLED=0 GOOS=linux go build -o /seed ./cmd/seed

# alpine, а не scratch: запуск трёх шагов подряд требует шелла
FROM alpine:3.22

WORKDIR /app

# Copy the compiled binaries from the builder stage
COPY --from=builder /main /main
COPY --from=builder /migrate /migrate
COPY --from=builder /seed /seed
COPY --from=builder /app/.env ./

# Скрипт собирается здесь, а не копируется файлом: так он не зависит от
# переносов строк и прав доступа в рабочей копии.
RUN printf '%s\n' \
	'#!/bin/sh' \
	'set -e' \
	'/migrate' \
	'if [ "$SEED" != "false" ]; then /seed; fi' \
	'exec /main' \
	> /entrypoint.sh && chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
