Git backed by object storage because you can't stop me
git
object-storage
kefka
1# syntax=docker/dockerfile:1
2
3# --- build stage -------------------------------------------------------------
4FROM golang:1.26 AS build
5
6WORKDIR /src
7
8# Cache module downloads separately from the source tree.
9COPY go.mod go.sum ./
10RUN --mount=type=cache,target=/go/pkg/mod \
11 go mod download
12
13COPY . .
14
15# Static, stripped binary. No cgo: objgitd is pure Go and answers the git
16# protocol natively (no `git` binary at runtime).
17RUN --mount=type=cache,target=/go/pkg/mod \
18 --mount=type=cache,target=/root/.cache/go-build \
19 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" \
20 -o /objgitd ./cmd/objgitd
21
22# --- runtime stage -----------------------------------------------------------
23# distroless static: just CA certs (for Tigris/S3 TLS) + tzdata, nonroot user.
24FROM gcr.io/distroless/static-debian12:nonroot
25
26COPY --from=build /objgitd /objgitd
27
28# Smart HTTP, git://, metrics. SSH (-ssh-bind) is opt-in; publish it yourself.
29EXPOSE 8080 9418 9090
30
31ENTRYPOINT ["/objgitd"]