b5bde59f10
Replace all runtime template.ParseFiles() calls with template.ParseFS() using an embedded filesystem, and serve static assets from an embedded FS via http.FileServerFS(). This eliminates the need for COPY steps in the Dockerfile and ensures the binary works with readOnlyRootFilesystem: true. - Add internal/templates/embed.go exposing templates.FS - Add static/embed.go exposing static.FS - Update all handlers to use template.ParseFS(templates.FS, ...) - Update static file server to use http.FileServerFS(static.FS) - Remove COPY static/ and COPY internal/templates/ from Dockerfile - Remove TestMain working directory hack (no longer needed) Closes leeworks-agents/gitea-mobile#231 Closes leeworks-agents/gitea-mobile#220 Closes leeworks-agents/gitea-mobile#221 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
17 lines
480 B
Docker
17 lines
480 B
Docker
# Stage 1: Build
|
|
FROM golang:1.22-alpine AS builder
|
|
WORKDIR /app
|
|
COPY go.mod go.sum ./
|
|
RUN go mod download
|
|
COPY . .
|
|
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /gitea-mobile ./cmd/server
|
|
|
|
# Stage 2: Runtime
|
|
# Templates and static assets are embedded in the binary via go:embed,
|
|
# so no COPY steps are needed for them.
|
|
FROM gcr.io/distroless/static:nonroot
|
|
COPY --from=builder /gitea-mobile /gitea-mobile
|
|
EXPOSE 8080
|
|
USER nonroot:nonroot
|
|
ENTRYPOINT ["/gitea-mobile"]
|