build: sjednocení Dockerfile
CI / Generate TypeScript types (push) Successful in 1m8s
CI / Server unit tests (push) Successful in 34s
CI / Build server (push) Successful in 1m39s
CI / Build client (push) Successful in 17m30s
CI / Playwright E2E tests (push) Successful in 15m25s
CI / Build and push Docker image (push) Successful in 12m57s
CI / Notify (push) Successful in 11s

This commit is contained in:
2026-05-05 21:57:41 +02:00
parent a2d45ad7e7
commit 5f903797f1
4 changed files with 37 additions and 40 deletions
+2 -1
View File
@@ -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
+2 -2
View File
@@ -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
+33 -8
View File
@@ -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" ]
# 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
-29
View File
@@ -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" ]