FROM golang:1.21-alpine AS builder WORKDIR /app COPY go.mod go.sum ./ # Download all dependencies RUN go mod download COPY . . # Generate go.sum RUN go mod tidy # Run tests RUN go test ./tests/unit -v && \ go test ./tests/integration -v # Build the application RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main ./cmd # Runtime stage FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=builder /app/main . EXPOSE 3000 CMD ["./main"]