From 5f903797f181ac70ac13c0acc78f839aadddb70c Mon Sep 17 00:00:00 2001 From: Martin Berka Date: Tue, 5 May 2026 21:57:41 +0200 Subject: [PATCH] =?UTF-8?q?build:=20sjednocen=C3=AD=20Dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/ci.yaml | 3 ++- CLAUDE.md | 4 ++-- Dockerfile | 41 ++++++++++++++++++++++++++++++++-------- Dockerfile-Woodpecker | 29 ---------------------------- 4 files changed, 37 insertions(+), 40 deletions(-) delete mode 100644 Dockerfile-Woodpecker diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index ab228b5..2ab591e 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -215,7 +215,8 @@ jobs: - uses: docker/build-push-action@v5 with: context: . - file: Dockerfile-Woodpecker + file: Dockerfile + target: runner-prebuilt platforms: linux/amd64 push: true tags: ${{ secrets.REPO_URL }}/${{ secrets.REPO_NAME }}:latest diff --git a/CLAUDE.md b/CLAUDE.md index f7d200d..c7736cb 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -17,7 +17,7 @@ e2e/ → Playwright E2E tests (separate package) Each of the four directories has its own `package.json`. Package manager: **Yarn Classic**. -Deployment files at repo root: `Dockerfile`, `Dockerfile-Woodpecker`, `compose.yml`, `compose-traefik.yml`. +Deployment files at repo root: `Dockerfile` (multi-stage, dva runner targety: výchozí `runner` pro lokální build, `runner-prebuilt` pro CI s předem sestavenými artefakty), `compose.yml`, `compose-traefik.yml`. ## Development Commands @@ -69,7 +69,7 @@ Gitea Actions — `.gitea/workflows/ci.yaml` (no `.github/` equivalent): 2. `server-test` — Jest 3. `server-build` + `client-build` — parallel tsc/vite builds 4. `e2e` — Playwright in `mcr.microsoft.com/playwright:v1.59.1-jammy` with a Redis service container; only Firefox installed in CI -5. `docker-build` — master branch only, uses `Dockerfile-Woodpecker` +5. `docker-build` — master branch only, uses `Dockerfile` with `--target runner-prebuilt` (skládá image z artefaktů `server-build` + `client-build`) 6. `notify` — Discord + ntfy webhooks ### Formatting diff --git a/Dockerfile b/Dockerfile index e940d6c..5f673bb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ ARG NODE_VERSION="node:22-alpine" -# Builder +# ─── Builder ────────────────────────────────────────────────────────────────── FROM ${NODE_VERSION} AS builder WORKDIR /build @@ -62,8 +62,9 @@ RUN yarn build WORKDIR /build/client RUN yarn build -# Runner -FROM ${NODE_VERSION} +# ─── Runner base ────────────────────────────────────────────────────────────── +# Společný základ pro oba runner targety – nastaví prostředí a metadata běhu. +FROM ${NODE_VERSION} AS runner-base RUN apk add --no-cache tzdata ENV TZ=Europe/Prague \ @@ -72,6 +73,17 @@ ENV TZ=Europe/Prague \ WORKDIR /app +# Export /data/db.json do složky /data +VOLUME ["/data"] + +EXPOSE 3000 + +CMD [ "node", "./server/src/index.js" ] + +# ─── Runner (default) ───────────────────────────────────────────────────────── +# Použití: docker build . (lokální sestavení – vše se buildí uvnitř image) +FROM runner-base AS runner + # Vykopírování sestaveného serveru COPY --from=builder /build/server/node_modules ./server/node_modules COPY --from=builder /build/server/dist ./ @@ -85,12 +97,25 @@ COPY /server/.env.production ./server # Zkopírování changelogů (seznamu novinek) COPY /server/changelogs ./server/changelogs -# Zkopírování konfigurace easter eggů a changelogů +# Zkopírování konfigurace easter eggů RUN if [ -f ./server/.easter-eggs.json ]; then cp ./server/.easter-eggs.json ./server/; fi -# Export /data/db.json do složky /data -VOLUME ["/data"] +# ─── Runner (prebuilt) ──────────────────────────────────────────────────────── +# Použití: docker build --target runner-prebuilt . +# Očekává předem sestavené artefakty v build kontextu (server/dist, +# client/dist, server/node_modules) – využívá Gitea Actions, kde se +# server i klient buildí v separátních jobech a sem se jen kopírují. +FROM runner-base AS runner-prebuilt -EXPOSE 3000 +# Vykopírování sestaveného serveru +COPY ./server/node_modules ./server/node_modules +COPY ./server/dist ./ -CMD [ "node", "./server/src/index.js" ] \ No newline at end of file +# Vykopírování sestaveného klienta +COPY ./client/dist ./public + +# Zkopírování changelogů (seznamu novinek) +COPY ./server/changelogs ./server/changelogs + +# Zkopírování konfigurace easter eggů +RUN if [ -f ./server/.easter-eggs.json ]; then cp ./server/.easter-eggs.json ./server/; fi diff --git a/Dockerfile-Woodpecker b/Dockerfile-Woodpecker deleted file mode 100644 index 7b4a91a..0000000 --- a/Dockerfile-Woodpecker +++ /dev/null @@ -1,29 +0,0 @@ -ARG NODE_VERSION="node:22-alpine" - -FROM ${NODE_VERSION} - -RUN apk add --no-cache tzdata -ENV TZ=Europe/Prague \ - LC_ALL=cs_CZ.UTF-8 \ - NODE_ENV=production - -WORKDIR /app - -# Vykopírování sestaveného serveru -COPY ./server/node_modules ./server/node_modules -COPY ./server/dist ./ -# TODO tohle není dobře, má to být součástí serveru -# COPY ./server/resources ./resources - -# Vykopírování sestaveného klienta -COPY ./client/dist ./public - -# Zkopírování changelogů (seznamu novinek) -COPY ./server/changelogs ./server/changelogs - -# Zkopírování konfigurace easter eggů -RUN if [ -f ./server/.easter-eggs.json ]; then cp ./server/.easter-eggs.json ./server/; fi - -EXPOSE 3000 - -CMD [ "node", "./server/src/index.js" ]