# Build is intentionally separate from the portal image. No deployment here.
FROM golang:1.25.8-trixie@sha256:feb29f1d571353e52350efceeabc6a3f6769c249a97d53cbeececc2ec3f7c202 AS builder
ARG UPSTREAM_COMMIT=9888a3d169aed9011ae6e4f7a97ae735c1643068
ARG SOURCE_DATE_EPOCH
ENV GOFLAGS=-mod=readonly GOMAXPROCS=1 GOMEMLIMIT=768MiB
RUN apt-get update && apt-get install --no-install-recommends -y git python3 ca-certificates && rm -rf /var/lib/apt/lists/*
WORKDIR /source
RUN test "${#UPSTREAM_COMMIT}" = 40 && test -n "$SOURCE_DATE_EPOCH" && \
    git clone --depth 1 --branch v2.7.5 https://github.com/drakkan/sftpgo.git . && \
    test "$(git rev-parse HEAD)" = "$UPSTREAM_COMMIT"
RUN go mod download && go mod verify
COPY apply_patch.py dim_revoke_test.go /patch/
RUN python3 /patch/apply_patch.py /source && \
    gofmt -w internal/common/common.go internal/common/dim_revoke_test.go internal/sftpd/server.go internal/httpd/api_user.go internal/version/version.go
RUN go test -p 1 ./internal/common -run '^TestDIMRevoke' -count=1 -timeout=120s
RUN go build -p 1 -trimpath -ldflags "-s -w -X github.com/drakkan/sftpgo/v2/internal/version.commit=${UPSTREAM_COMMIT}-dim1 -X github.com/drakkan/sftpgo/v2/internal/version.date=$(date -u -d @${SOURCE_DATE_EPOCH} +%FT%TZ)" -o /out/sftpgo .
COPY Dockerfile README.md build_info.py /source/DIM-build/
RUN cp /patch/apply_patch.py /patch/dim_revoke_test.go /source/DIM-build/ && \
    git rev-parse HEAD > /source/DIM-build/UPSTREAM_COMMIT && \
    python3 /source/DIM-build/build_info.py /source/DIM-build && \
    tar --exclude=.git --exclude=sftpgo --sort=name --mtime=@${SOURCE_DATE_EPOCH} --owner=0 --group=0 --numeric-owner -czf /out/sftpgo-2.7.5-dim1-source.tar.gz -C /source . && \
    sha256sum /out/sftpgo /out/sftpgo-2.7.5-dim1-source.tar.gz > /out/SHA256SUMS
# Preserve the exact existing receiver runtime, assets, defaults and user.
FROM drakkan/sftpgo:v2.7.5@sha256:9011fe608d336d3daf6ed6224b16fd40443aab8f3335e0b20853d6a539c58738
LABEL org.opencontainers.image.title="SFTPGo 2.7.5 with DIM SSH transport revocation" \
      org.opencontainers.image.licenses="AGPL-3.0-or-later" \
      org.opencontainers.image.version="2.7.5-dim1" \
      org.opencontainers.image.source="https://github.com/drakkan/sftpgo"
COPY --from=builder /out/sftpgo /usr/local/bin/sftpgo
COPY --from=builder /out/sftpgo-2.7.5-dim1-source.tar.gz /out/SHA256SUMS /usr/share/sftpgo/dim-source/
