Files
Ilia Denisov 0e3e3b6c90
CI / test (pull_request) Successful in 1m20s
CI / deploy (pull_request) Has been skipped
Add Gitea Actions CI/CD and deploy descriptor
- .gitea/workflows/ci.yaml: test on PR/push to master, deploy on push to master
- deploy/docker-compose.yml: 15-puzzle container on the edge network with a persistent data volume
- Dockerfile: create /data owned by app for the DATA_FILE volume
- README: document deployment, required Actions secrets/variables, and persistence
2026-06-02 11:45:28 +02:00

59 lines
1.5 KiB
Docker

ARG REPO_URL=docker.io
ARG IMAGE_BUILDER=golang:1.23.0-alpine3.20
ARG IMAGE_RUNNER=alpine:3.20
## --- Builder
FROM ${REPO_URL}/${IMAGE_BUILDER} AS builder
LABEL stage=builder
WORKDIR /build
ARG GOPROXY_URL
ENV GOPROXY=${GOPROXY_URL}
SHELL [ "/bin/sh", "-ec" ]
RUN apk add --no-cache make
COPY go.mod go.sum Makefile ./
COPY cmd/ cmd/
COPY internal/ internal/
ENV GOOS=linux
ENV GOARCH=amd64
RUN cp $(go env GOROOT)/misc/wasm/wasm_exec.js .
RUN make build
RUN make build/wasm
## --- Runner
FROM ${REPO_URL}/${IMAGE_RUNNER}
ARG UID=1337
ARG GID=1337
ENV APPLICATION_HOME=/home/app \
TARGET_USER=app \
TARGET_GROUP=app
RUN apk add --no-cache tzdata ; \
getent group ${GID} || addgroup --gid ${GID} ${TARGET_GROUP} ; \
adduser -u ${UID} -g ${TARGET_GROUP} -D -S -h ${APPLICATION_HOME} ${TARGET_USER}
WORKDIR ${APPLICATION_HOME}
# Persisted game-data directory (DATA_FILE lives here). A named volume mounted
# at /data inherits this ownership on first use, so the unprivileged app user
# can write the temp-file + rename that repo.go performs.
RUN mkdir -p /data && chown ${TARGET_USER}:${TARGET_GROUP} /data
USER ${TARGET_USER}
COPY --from=builder /tmp/bin/server /usr/bin/server
COPY --from=builder --chown=${TARGET_USER}:${TARGET_GROUP} /tmp/bin/game.wasm ./
COPY --from=builder --chown=${TARGET_USER}:${TARGET_GROUP} /build/wasm_exec.js ./
COPY --chown=${TARGET_USER}:${TARGET_GROUP} web/*.html ./
COPY --chown=${TARGET_USER}:${TARGET_GROUP} entrypoint.sh ./
CMD [ "/bin/sh", "/home/app/entrypoint.sh", "/usr/bin/server" ]