Files
scrabble-game/loadtest/Dockerfile
T
Ilia Denisov bb0e3e17e5
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Successful in 10s
CI / integration (pull_request) Successful in 14s
CI / ui (pull_request) Successful in 54s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m22s
chore(deploy): pin dictionary seed to v1.3.0
Bump DICT_VERSION v1.2.1 -> v1.3.0 across the seed surface: .env.example, the
compose build-arg default, both backend Dockerfile stages, the loadtest
Dockerfile, the CI dawg-download version, and the deploy/backend docs.

v1.3.0 drops the abbreviation class from the Russian word list (scrabble-dictionary
#6). This only seeds a FRESH volume; a live contour/prod volume is unaffected (the
.seed_version marker wins — seed-drift guard) and moves to v1.3.0 through the admin
console (ARCHITECTURE §5). Per-contour deploy still overrides via TEST_/PROD_DICT_VERSION.
2026-06-22 14:45:52 +02:00

44 lines
2.0 KiB
Docker

# Multi-stage build for the R2 load harness. Mirrors backend/Dockerfile: a
# golang-alpine builder yields a static binary on distroless nonroot, with the
# dictionary DAWGs baked in from the scrabble-dictionary release (the harness runs
# the same solver as the backend, so it needs the same dictionary). The published
# scrabble-solver module is fetched from Gitea (GOPRIVATE), so the build stage needs
# git and network.
#
# The harness is not a contour service; build and run it ad hoc, from the repo root
# so go.work, pkg/, gateway/ and loadtest/ are in the Docker context:
# docker build -f loadtest/Dockerfile -t scrabble-loadtest .
# docker run --rm --network scrabble-internal -e POSTGRES_PASSWORD=... scrabble-loadtest run
# --- dictionary artifact -----------------------------------------------------
FROM alpine:3.20 AS dawg
ARG DICT_VERSION=v1.3.0
RUN apk add --no-cache curl tar
RUN mkdir -p /dawg \
&& curl -fsSL -o /tmp/dawg.tar.gz \
"https://gitea.iliadenisov.ru/developer/scrabble-dictionary/releases/download/${DICT_VERSION}/scrabble-dawg-${DICT_VERSION}.tar.gz" \
&& tar xzf /tmp/dawg.tar.gz -C /dawg
# --- build -------------------------------------------------------------------
FROM golang:1.26.3-alpine AS build
WORKDIR /src
# git: the published solver module is fetched from Gitea directly (GOPRIVATE).
RUN apk add --no-cache git
ENV GOPRIVATE=gitea.iliadenisov.ru/*
COPY go.work go.work.sum ./
COPY pkg ./pkg
COPY gateway ./gateway
COPY loadtest ./loadtest
# Reduce the workspace to what the harness needs: loadtest + gateway (edge proto) + pkg.
RUN go work edit -dropuse=./backend -dropuse=./platform/telegram
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -o /out/loadtest ./loadtest/cmd/loadtest
# --- runtime -----------------------------------------------------------------
FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=build /out/loadtest /usr/local/bin/loadtest
COPY --from=dawg /dawg /opt/dawg
ENV LOADTEST_DAWG_DIR=/opt/dawg
ENTRYPOINT ["/usr/local/bin/loadtest"]