# ---- Build stage ----
FROM golang:1.25-alpine AS builder
WORKDIR /app

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

COPY . .

ARG GIT_SHA=unknown
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w -X github.com/pingcap/agent-git-service/server.gitSHA=${GIT_SHA}" -o gh-server ./cmd/gh-server
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w -X github.com/pingcap/agent-git-service/server.gitSHA=${GIT_SHA}" -o ags-sync-worker ./cmd/ags-sync-worker

# ---- Runtime stage ----
FROM alpine:3.21
RUN apk add --no-cache git git-daemon git-lfs \
    && test -x "$(git --exec-path)/git-http-backend"

RUN adduser -D -h /data appuser
USER appuser

COPY --from=builder /app/gh-server /usr/local/bin/gh-server
COPY --from=builder /app/ags-sync-worker /usr/local/bin/ags-sync-worker
COPY --chmod=0755 docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh

RUN mkdir -p /data/repos

EXPOSE 8080

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["gh-server"]
