chore(docker): reproducible and asset-free image build (#14) #41

Merged
Reliodas merged 1 commit from chore/14-docker-hardening into develop 2026-06-24 14:40:41 +00:00
Owner

Closes #14.

Durcit la reproductibilité et la garantie « checkout propre sans assets privés » sur l'image unique (#19).

Changements

  • .dockerignore exclut les assets privés/référence (original/, client/public) et coverage du contexte → build reproductible à partir des lockfiles seuls, ne pouvant jamais embarquer d'assets propriétaires.
  • Garde check:assets (échoue sur tout import statique d'asset), exécutée en CI → les assets restent des URLs runtime que Vite ne résout pas au build.
  • docs/ASSETS.md : fourniture des assets à l'exécution (montage de volume dans le répertoire servi) + intégrité ; note build sans assets dans Implémentation.md.

npm ci --omit=dev, l'utilisateur non privilégié et le healthcheck /health sont déjà livrés par l'image unique de #19.

Vérifs

  • check:assets vert (aucun import statique) ; build client propre sans assets ; le smoke test de #19 prouve déjà qu'un build sans assets sert correctement.

Critères d'acceptation

  • package-lock.json + npm ci --omit=dev (image #19)
  • Utilisateur non privilégié (image #19)
  • Healthchecks serveur + composition (#19)
  • Reproductibilité vérifiée en CI (lockfiles, contexte sans assets, garde imports)
  • Cas sans assets privés dans un checkout propre (URLs runtime + smoke build propre)
  • Fourniture et intégrité des assets documentées

🤖 Generated with Claude Code

Closes #14. Durcit la reproductibilité et la garantie « checkout propre sans assets privés » sur l'image unique (#19). ## Changements - `.dockerignore` exclut les assets privés/référence (`original/`, `client/public`) et `coverage` du contexte → build **reproductible à partir des lockfiles seuls**, ne pouvant jamais embarquer d'assets propriétaires. - Garde `check:assets` (échoue sur tout import statique d'asset), exécutée en CI → les assets restent des URLs runtime que Vite ne résout pas au build. - `docs/ASSETS.md` : fourniture des assets à l'exécution (montage de volume dans le répertoire servi) + intégrité ; note build sans assets dans `Implémentation.md`. `npm ci --omit=dev`, l'utilisateur non privilégié et le healthcheck `/health` sont déjà livrés par l'image unique de #19. ## Vérifs - `check:assets` vert (aucun import statique) ; build client propre sans assets ; le smoke test de #19 prouve déjà qu'un build sans assets sert correctement. ## Critères d'acceptation - [x] `package-lock.json` + `npm ci --omit=dev` (image #19) - [x] Utilisateur non privilégié (image #19) - [x] Healthchecks serveur + composition (#19) - [x] Reproductibilité vérifiée en CI (lockfiles, contexte sans assets, garde imports) - [x] Cas sans assets privés dans un checkout propre (URLs runtime + smoke build propre) - [x] Fourniture et intégrité des assets documentées 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chore(docker): make the image build reproducible and asset-free
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
9a71d0f22d
Build on the single image (#19) to harden reproducibility and the
clean-checkout-without-private-assets guarantee (#14).

- Exclude private/reference assets (original/, client/public) and coverage from
  the Docker build context via .dockerignore, so the image build is reproducible
  from the lockfiles alone and can never bake proprietary assets.
- Add client check:assets guard (fails on any static asset import) and run it in
  CI, enforcing that assets stay runtime URLs Vite never resolves at build time.
- Document runtime asset provisioning (volume mount into the served client dir)
  and integrity in docs/ASSETS.md; note the asset-free, reproducible build in
  Implémentation.md.

npm ci/--omit=dev, the non-root user and the /health healthcheck already ship
with the single image from #19.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reliodas merged commit affd3d24bf into develop 2026-06-24 14:40:41 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: jeux/le-grand-concours#41
No description provided.