ci(docker): pin base image on opencode's versioned nightly tag (v0.0.60-latest) #60

Merged
jcabillot merged 1 commits from ci/opencode-base-tag into main 2026-10-17 15:59:21 -04:00
Owner

Problème

FROM jcabillot/opencode:latest flotte sur le tag poussé par le workflow de release de perso/opencode, qui n'est jamais rebuild ensuite :

  • jcabillot/opencode:latest = dernier build de release, figé au 2026-10-14 (Node 26.11.1, label v0.0.59)
  • jcabillot/opencode:v0.0.60-latest = la release v0.0.60, rebuild chaque nuit par cron.yaml
  • Renovate ignore les dépendances :latest -> l'image de base ne pouvait jamais être bumpée automatiquement.

Changement

  • FROM jcabillot/opencode:v0.0.60-latest : version OpenCode explicite dans le Dockerfile, base/npm rafraîchis à chaque rebuild nightly.
  • Suppression du # hadolint ignore=DL3007 : la règle ne se déclenche que sur :latest (vérifié avec hadolint 2.13.1 : nouveau Dockerfile exit=0 sans l'ignore, l'ancien tag sort bien le warning).
  • renovate.json inchangé : le custom manager jcabillot/opencode (datasource docker) suit déjà correctement la convention -latest.

CI (run 12215, re-run)

  • CI Shared Jobs / hadolint : success (12 s)
  • CI Shared Jobs / build-test : success (3m32) — log : FROM docker.io/jcabillot/opencode:v0.0.60-latest@sha256:bc9ed7bc…, puis HTTP status: 200, PASS: HTTP 200, 1/1 tests passed
  • Le 1er essai de ce commit a échoué sur opencode:v0.0.60-latest: not found : le tag a été publié à 19:53:27 UTC, une trentaine de secondes après le démarrage du job. Re-run vert, aucun changement de code.

Autres vérifications

  • Renovate en dry-run local (--platform=local --dry-run=lookup, Renovate 44.166.0) :
    • FROM ...:v0.0.58-latest -> newValue: v0.0.59-latest (updateType patch) : les bumps à venir restent dans la famille -latest.
    • FROM ...:v0.0.59-latest -> aucune update sur jcabillot/opencode (pas de PR parasite) ; seul le bump npm @openchamber/web reste détecté.
  • Images au registre : USER/WORKDIR/ENTRYPOINT identiques entre latest et vX.Y.Z-latest (seul le contenu de base diffère).

Note

Cette base est la release OpenCode 2 (@opencode/cli 2.0.32, migration perso/opencode#75) : l'API REST a changé (/api/*). Le test CI valide le build + le service de l'UI openchamber (HTTP 200), pas la compatibilité API openchamber <-> opencode v2.

## Problème `FROM jcabillot/opencode:latest` flotte sur le tag poussé par le workflow de release de `perso/opencode`, qui n'est **jamais rebuild** ensuite : - `jcabillot/opencode:latest` = dernier build de release, figé au **2026-10-14** (Node 26.11.1, label `v0.0.59`) - `jcabillot/opencode:v0.0.60-latest` = la release v0.0.60, rebuild **chaque nuit** par `cron.yaml` - Renovate **ignore les dépendances `:latest`** -> l'image de base ne pouvait jamais être bumpée automatiquement. ## Changement - `FROM jcabillot/opencode:v0.0.60-latest` : version OpenCode explicite dans le Dockerfile, base/npm rafraîchis à chaque rebuild nightly. - Suppression du `# hadolint ignore=DL3007` : la règle ne se déclenche que sur `:latest` (vérifié avec hadolint 2.13.1 : nouveau Dockerfile `exit=0` sans l'ignore, l'ancien tag sort bien le warning). - `renovate.json` **inchangé** : le custom manager `jcabillot/opencode` (datasource docker) suit déjà correctement la convention `-latest`. ## CI (run 12215, re-run) - `CI Shared Jobs / hadolint` : success (12 s) - `CI Shared Jobs / build-test` : success (3m32) — log : `FROM docker.io/jcabillot/opencode:v0.0.60-latest@sha256:bc9ed7bc…`, puis `HTTP status: 200`, `PASS: HTTP 200`, `1/1 tests passed` - Le 1er essai de ce commit a échoué sur `opencode:v0.0.60-latest: not found` : le tag a été publié à 19:53:27 UTC, une trentaine de secondes après le démarrage du job. Re-run vert, aucun changement de code. ## Autres vérifications - Renovate en dry-run local (`--platform=local --dry-run=lookup`, Renovate 44.166.0) : - `FROM ...:v0.0.58-latest` -> `newValue: v0.0.59-latest` (updateType patch) : les bumps à venir restent dans la famille `-latest`. - `FROM ...:v0.0.59-latest` -> **aucune update** sur `jcabillot/opencode` (pas de PR parasite) ; seul le bump npm `@openchamber/web` reste détecté. - Images au registre : `USER`/`WORKDIR`/`ENTRYPOINT` identiques entre `latest` et `vX.Y.Z-latest` (seul le contenu de base diffère). ## Note Cette base est la release **OpenCode 2** (`@opencode/cli 2.0.32`, migration `perso/opencode#75`) : l'API REST a changé (`/api/*`). Le test CI valide le build + le service de l'UI openchamber (HTTP 200), **pas** la compatibilité API openchamber <-> opencode v2.
opencodecabilloteu requested review from jcabillot 2026-10-17 15:47:37 -04:00
opencodecabilloteu added 1 commit 2026-10-17 15:52:31 -04:00
ci(docker): pin base image on opencode's versioned nightly tag
CI Shared Jobs / hadolint (pull_request) Successful in 14s
CI Shared Jobs / build-test (pull_request) Successful in 3m32s
PR Checks / ci (pull_request) Successful in 3m35s
32c3855d07
`FROM jcabillot/opencode:latest` floats on the tag pushed by perso/opencode's
release workflow, which is never rebuilt afterwards: it is still the 2026-10-14
build while the nightly cron keeps rebuilding `vX.Y.Z-latest`. Renovate also
ignores `:latest` dependencies, so the base image could never be bumped.

Pin `v0.0.60-latest` (released from perso/opencode main, rebuilt nightly by
cron.yaml): fresh Debian/npm packages, explicit OpenCode version in the
Dockerfile, and Renovate can now follow the bumps.

The DL3007 hadolint ignore is dropped: that rule only fires on `:latest`.
opencodecabilloteu force-pushed ci/opencode-base-tag from 39b37ea985 to 32c3855d07 2026-10-17 15:52:31 -04:00 Compare
opencodecabilloteu changed title from ci(docker): pin base image on opencode's versioned nightly tag (v0.0.59-latest) to ci(docker): pin base image on opencode's versioned nightly tag (v0.0.60-latest) 2026-10-17 15:58:31 -04:00
jcabillot merged commit 3c8b4ed122 into main 2026-10-17 15:59:21 -04:00
jcabillot deleted branch ci/opencode-base-tag 2026-10-17 15:59:28 -04:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: perso/opencode-openchamber#60