ci(release): SemVer-tagged Docker images with OCI labels (#57) #67

Merged
Reliodas merged 2 commits from feat/57-docker-semver into develop 2026-06-25 20:42:04 +00:00
Owner

Closes #57

Aligne les images Docker publiées sur les versions de release SemVer et facilite rollbacks/déploiements reproductibles.

Pipeline (.woodpecker.yml)

  • build-release (déclenché par un tag Git) : publie le tag SemVer (${CI_COMMIT_TAG##v}, le « v » retiré, ex. 1.0.0-alpha.0) + le SHA de commit immuable, avec build args nourrissant les labels OCI.
  • verify-release (tag) : confirme via l'API registry OCI (/v2/.../manifests/<tag>) que le tag attendu existe ; échoue sinon.
  • build-app (push main) inchangé sur le principe : latest (mouvant) + SHA, build args IMAGE_VERSION=edge.
  • La suite de tests complète tourne aussi sur les tags, donc une release est validée avant publication.

Dockerfile

Labels OCI dans l'étape runtime, depuis des build args : org.opencontainers.image.version / .revision / .source / .licenses (MIT) / .title / .description.

Tags publiés

Tag Source Mutabilité Usage
1.0.0-alpha.0 (SemVer) tag Git immuable production — à épingler
<SHA> chaque commit publié immuable déploiements reproductibles / rollback
latest dernier build main mouvant essais, jamais en production

Docs (CONTRIBUTING.md)

Table des tags, lequel épingler en production, labels OCI, comment couper une release (git tag v… && git push), et commande de vérification du tag dans le registry.

Conformité aux critères

release taggée → image SemVer ✓ · latest documenté comme mouvant ✓ · tag SHA immuable conservé ✓ · labels OCI (version/revision/source…) ✓ · CONTRIBUTING explique quel tag utiliser ✓ · vérification post-release du tag dans le registry ✓

Vérification

  • YAML .woodpecker.yml parsé/validé ; les nouveaux steps (build-release/verify-release) ne s'exécutent que sur événement tag (la CI de cette PR n'est pas impactée).
  • docker build local OK ; docker inspect confirme les labels OCI (version=1.0.0-test, revision=abc123, source, licenses=MIT).
  • typecheck OK, node:test 220 pass, build OK, validate:questions OK (360), check:assets OK, smoke OK.
Closes #57 Aligne les images Docker publiées sur les versions de release SemVer et facilite rollbacks/déploiements reproductibles. ## Pipeline (`.woodpecker.yml`) - **`build-release`** (déclenché par un tag Git) : publie le tag **SemVer** (`${CI_COMMIT_TAG##v}`, le « v » retiré, ex. `1.0.0-alpha.0`) **+ le SHA de commit immuable**, avec build args nourrissant les labels OCI. - **`verify-release`** (tag) : confirme via l'API registry OCI (`/v2/.../manifests/<tag>`) que le tag attendu existe ; échoue sinon. - **`build-app`** (push `main`) inchangé sur le principe : `latest` (mouvant) + SHA, build args `IMAGE_VERSION=edge`. - La **suite de tests complète tourne aussi sur les tags**, donc une release est validée avant publication. ## Dockerfile Labels OCI dans l'étape runtime, depuis des build args : `org.opencontainers.image.version` / `.revision` / `.source` / `.licenses` (MIT) / `.title` / `.description`. ## Tags publiés | Tag | Source | Mutabilité | Usage | |---|---|---|---| | `1.0.0-alpha.0` (SemVer) | tag Git | immuable | **production — à épingler** | | `<SHA>` | chaque commit publié | immuable | déploiements reproductibles / rollback | | `latest` | dernier build `main` | mouvant | essais, jamais en production | ## Docs (`CONTRIBUTING.md`) Table des tags, lequel épingler en production, labels OCI, comment couper une release (`git tag v… && git push`), et commande de vérification du tag dans le registry. ## Conformité aux critères release taggée → image SemVer ✓ · `latest` documenté comme mouvant ✓ · tag SHA immuable conservé ✓ · labels OCI (version/revision/source…) ✓ · CONTRIBUTING explique quel tag utiliser ✓ · vérification post-release du tag dans le registry ✓ ## Vérification - YAML `.woodpecker.yml` parsé/validé ; les nouveaux steps (build-release/verify-release) ne s'exécutent que sur événement `tag` (la CI de cette PR n'est pas impactée). - **`docker build` local OK** ; `docker inspect` confirme les labels OCI (version=1.0.0-test, revision=abc123, source, licenses=MIT). - typecheck OK, `node:test` 220 pass, build OK, validate:questions OK (360), check:assets OK, smoke OK.
Add a tag-triggered build-release step that publishes the release image with the
SemVer tag (Git tag, "v" stripped) plus the immutable commit SHA, and a
verify-release step that confirms the tag exists in the Forgejo registry. The
main push keeps the moving `latest` and SHA tags. The Dockerfile now sets OCI
version/revision/source/licenses labels from build args, wired by the pipeline.
The full test suite also runs on tag events so a release is validated first.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(release): document Docker image tags and the release flow (#57)
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
9f0c9d1e70
Describe the SemVer/SHA/latest tags, which to pin in production, the OCI labels,
how to cut a release by pushing a Git tag, and how to verify the published tag.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reliodas merged commit 94d07dfdda into develop 2026-06-25 20:42:04 +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#67
No description provided.