ci: move check-frontend, audit and release from Node 20 to Node 24 #414
No reviewers
Labels
No labels
autopilot:pending-human
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-clarification
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#414
Loading…
Reference in a new issue
No description provided.
Delete branch "issue-376-node24"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Resolves #376
Generated autonomously by /autopilot run of 2026-10-10
Ce qui change
check-frontend.yml,audit.yml,release.yml: Node.js 20 (fin de vie le 2026-04-30) → Node.js 24, pardeb.nodesource.com/setup_24.x, commecheck-rust.ymldepuis #375. L'étape s'appelle « Install Node.js 24 » danscheck-frontendetaudit. Dansrelease.yml, l'étape « Install base tools and runtimes » garde son nom (elle installe aussi les outils de base et Rust) : seul son commentaire change.node --versionreste dans les trois journaux.concurrencydecheck-rust.ymlréécrit d'aprèsla-compagnie-maximus/docs/forgejo-ops.md(mesure du 2026-10-02 sur Forgejo 8.0.3) : la clé passe la validation de schéma mais son apport n'a pas été isolé, Forgejo annule sans elle un runpushremplacé, et aucun jobpull_requestn'a été annulé par un run suivant. Les clés restent (D2), avec la raison écrite.check-frontend.ymletaudit.ymlrenvoient à ce commentaire.release.yml, le script tourne en root dans le conteneur, dont le Node.js lance ensuitenpx tauri buildavecTAURI_SIGNING_PRIVATE_KEY. Gardé, sans tarball épinglé (décision de Max). Même constat dansdocs/architecture.md.docs/architecture.md, sectionrelease.yml: « Deux jobs (build-windows en windows-latest, build-linux en ubuntu-22.04) » était faux. Corrigé : un seul jobbuild-and-releaseen conteneurubuntu:22.04, Windows compilé depuis Linux parcargo-xwin./release, étape 9 : lirenode --versiondans le journal du run de release (commande rejouée sur le run 508).STATE.md: nouvelle puce « Vérifications dues à la prochaine release » dans « Blockers actifs », avecrelease.ymlsous Node 24.CLAUDE.mdinchangé : sa section CI/CD ne cite aucune version de Node, et sa phrasenpm auditpérimée relève de #358 (critère explicite de ce maillon).Technique
npm cidoit lire le lock actuel, généré par npm 10 (lockfileVersion3). Le runcheck-frontendde cette PR le prouve. #358 s'appuie dessus : son lock sera généré et lu par npm 11.actions/checkout@v4déclarenode20; le runner le lance avec lenodedu conteneur, Node 24 compris (prouvé parcheck-rustdepuis #375). Le commentaire decheck-rust.ymlqui le dit reste exact..github/workflows/check.yml(miroir GitHub dormant) épingle aussinode-version: '20', mais il n'est pas dans les fichiers planifiés, etdocs/architecture.mdle dit « laissé tel quel ».release.yml: la modification tient dans le blocrun:(commentaire et URL), donc rien que le validateur du runner puisse refuser au prochain tag.Preuves
Contrôles locaux :
grep -rn setup_20 .forgejo/workflows/: vide.yaml.safe_load) ; leur première étape installesetup_24.x.v20.20.2danscheck-frontend(run 507),audit(run 510) etrelease(run 508). Motif :grep -E 'Z v[0-9]+\.[0-9]+\.[0-9]+\s*$', une seule ligne par journal.Runs CI à lire (journal par la route web
/maximus/Simpl-Resultat/actions/runs/<n>/jobs/0/logs) :auditsur la branche, déclenché parPOST /actions/workflows/audit.yml/dispatches{"ref":"issue-376-node24"}→ HTTP 204, run 511 (workflow_dispatch,71a4e1e). Vert, lu dans le journal :node --version=v24.21.0, 666 crates scannées, « 12 allowed warnings found » (même compte qu'avant),🏁 Job succeeded. L'avertissementcouldn't update crates.io indexfigurait déjà dans le run 510 sous Node 20.check-frontendsur71a4e1e: run 512, vert en 1 min 51 s, lu dans le journal :node --version=v24.21.0, npm11.19.0,npm ci(175 paquets en 11 s), build vite, 109 fichiers et 1904 tests verts,🏁 Job succeeded.check-rustsur71a4e1e: run 513 (déclenché parce quecheck-rust.ymlchange), attendu vert ; Node y était déjà en 24.f19b027(correctif d'auto-revue : skill/releaseet un commentaire, voir le commentaire d'auto-revue) :check-frontendrun 514,check-rustrun 515, à lire. Les runs de PR ne s'annulent pas entre eux (mesure deforgejo-ops.md), donc 512 et 513 vont aussi au bout.Observation sous npm 11 (run 512, absente du run 507 sous npm 10) :
npm warn install-scripts 1 package has install scripts not yet covered by allowScripts: esbuild@0.25.12 (postinstall: node install.js). Sans effet aujourd'hui : le build vite, qui passe par esbuild, et les tests sont verts.esbuildest le seul paquet du lock à script d'installation sur Linux (fseventsest optionnel, macOS). Si une version future de npm bloque ce script par défaut, c'est là que ça se verra ; à garder en tête pour #358, dont le lock sera généré par npm 11.Ce qui ne se prouve qu'au prochain tag
release.ymln'est exercé qu'au tag, d'oùResolvesavec la vérification consignée. Son build frontend est déjà couvert :beforeBuildCommandvautnpm run build, la commande que le run 512 a passée sous Node 24. Restent propres au tag la CLI Tauri (npx tauri build) sous Node 24,cargo-xwinet la publication :node --versiondu run de release env24.x(commande à l'étape 9 du skill/release) ;verify-release.shvert (7 artefacts,latest.json).Le diff touchant
release.yml, l'étape 10 de/release(cycle réel de mise à jour) s'applique aussi, selon la règle du skill. Les deux points sont notés dansSTATE.md.Pour relire en priorité
concurrencydecheck-rust.yml, contreforgejo-ops.md(sections « Le schéma du workflow est validé par le runner » et « Un push annule le run du push précédent »). La raison de garder les clés ne dit pas que le miroir GitHub lit ces fichiers : GitHub ne lit que.github/workflows/.release.ymlet le paragraphe dedocs/architecture.md. La phrase surrustup(même situation que NodeSource) est un ajout du worker, hors caveat : à garder ou à retirer.docs/architecture.md, à comparer àrelease.yml.🤖 Generated with Claude Code
Auto-revue du worker
/autopilot, pas une revue indépendante. Verdict final : APPROVE, après une correction faite pendant la revue (f19b027).Critères de planification
grep -rn setup_20 .forgejo/workflows/vide : ✅ contrôlé localement sur la tête.check-frontendde la PR sous Node 24 : ✅ run 512 (sur71a4e1e) :v24.21.0, npm11.19.0,npm ci, build vite, 109 fichiers et 1904 tests verts. Reste le run 514 sur la têtef19b027, dont le workflow ne diffère que par un commentaire.auditsous Node 24 parworkflow_dispatch: ✅ HTTP 204, run 511 :v24.21.0, 666 crates, « 12 allowed warnings found » (même compte qu'avant),🏁 Job succeeded.concurrencyconforme àforgejo-ops.md: ✅ relu contre les sections « Le schéma du workflow est validé par le runner » et « Un push annule le run du push précédent ». Clé validée mais apport non isolé ; annulation des runspushsans la clé, job en file comme en cours ; aucun jobpull_request/pull_request_syncannulé par un run suivant. Rien n'est affirmé surscheduleetworkflow_dispatch, que la doc ne couvre pas.STATE.mdet à l'étape 9 du skill/release.Caveats
release.ymlet dansdocs/architecture.md: script en root,npx tauri buildavecTAURI_SIGNING_PRIVATE_KEY, jetons de publication des étapes suivantes. Gardé, sans tarball épinglé./release, commande rejouée surv0.17.1(run 508 →v20.20.2).Sécurité, justesse, conventions
$(cat ~/.forgejo-token). Aucune entrée non fiable interpolée dans un workflow ; les changements de workflow se limitent aux URL NodeSource, aux noms d'étape et à des commentaires. Lignes ajoutées scannées (dépôt public) : rien.release.yml: modification limitée au blocrun:, donc aucun risque de rejet de schéma au prochain tag.CLAUDE.mdinchangé : aucune version de Node citée, et la phrasenpm auditpérimée est un critère de #358.Correction faite pendant la revue (
f19b027,Refs #376)GET /actions/tasks?limit=5. L'API ignorelimit(602 entrées rendues). Remplacé par une sélection directe du runrelease.ymldu tag (python3, commeverify-release.sh), testée surv0.17.1:RUN=508,v20.20.2.check-frontend.yml: « Same concurrency key » pouvait se lire « même groupe » ; précisé.Reste à prouver par la CI (lecture par la session principale)
check-rust) : verts attendus ; aucune ligne exécutée ne change, seul le commentaireconcurrency.check-frontendsur la tête) : vert attendu, même contenu que 512 hors commentaire.node --versiondu run de release env24.x,verify-release.shvert, et l'étape 10 de/release(le diff toucherelease.yml).Points à relire en priorité
concurrencydecheck-rust.yml, et la formulation de la raison D2 (« keeps its GitHub Actions meaning should these workflows run where it is honoured ») : GitHub ne lit que.github/workflows/.rustupdansdocs/architecture.md, ajout hors caveat.docs/architecture.md.install-scriptssur lepostinstalld'esbuild(run 512, absent sous npm 10) : sans effet aujourd'hui, à garder en tête pour #358.CI lue par la session principale du run autopilot (pas une revue)
workflow_dispatchsur la branche)71a4e1ev24.21.0, 666 crates, 12 avertissements autorisés71a4e1ev24.21.0, npm11.19.0,npm ci, build vite, 1904 tests (109 fichiers)71a4e1ev24.21.0, garde des suppressions 2 vérifications exit 0, 255 tests Rustf19b027(tête)v24.21.0, npm11.19.0, 1904 tests (109 fichiers)f19b027(tête)v24.21.0, garde des suppressions exit 0, 255 tests RustNouveau sous npm 11 (run 512 et 514) :
npm warn install-scripts … esbuild@0.25.12 (postinstall) not yet covered by allowScripts, absent sous npm 10. Sans effet sur le build ni les tests ; signalé pour #358.Reste à prouver au prochain tag :
release.ymlsous Node 24 (voir la section dédiée du corps et la puce de STATE.md).Revue indépendante
/pr-review(pas l'auto-revue du worker). Verdict : APPROVEDans les trois workflows, le passage à Node 24 tient au seul changement d'URL
setup_20.x→setup_24.x. Les commentaires et la doc disent ce que mesureforgejo-ops.mdet ce que faitrelease.yml. Aucun bloquant, et la CI de la têtef19b027est verte, lue dans les journaux.Vérifié
setup_20dans.forgejo/workflows/à la tête ;check-frontendsur la tête (run 514) :v24.21.0, npm11.19.0,npm ci(175 paquets), build vite, 109 fichiers et 1904 tests verts, comme le run 507 sous Node 20 (npm10.8.2) ;auditparworkflow_dispatch(run 511 sur71a4e1e, fichier inchangé depuis) :v24.21.0, 666 crates, 12 avertissements autorisés, comme le run 510 ;check-rustsur la tête (run 515) :v24.21.0, cache en correspondance exacte, gardersavérifiée sur les deux cibles, 255 tests Rust ;STATE.mdet à l'étape 9 du skill.release.ymlne change rien que le validateur du runner puisse refuser. Les deux versions passées paryaml.safe_loadne diffèrent que par la chaînerunde l'étape 0. Une fois les commentaires retirés, la seule commande changée est l'URL NodeSource, celle que les runs 511 à 515 exécutent dans le même conteneurubuntu:22.04.bash -npasse sur les trois scripts modifiés. Le build frontend du tag est couvert (beforeBuildCommandvautnpm run build), aucune contrainteenginesdu lock n'exclut Node 24, et@tauri-apps/cli2.10.0 déclare>= 10.concurrency, relu contre les deux sections citées deforgejo-ops.md: il passe la validation de schéma, son apport n'est pas isolé, les runspushsont annulés sans la clé, en file comme en cours (les 22 jobsmaximus-apisans clé et les 5 jobssimpl-resultatantérieurs au 2026-04-28), et aucun jobpull_request/pull_request_syncn'a été annulé. Conforme. Cette PR en apporte une confirmation directe.f19b027a été poussé à 23:44:03Z (push non forcé) pendant quecheck-rustrun 513 tournait (démarré à 23:43:56Z). La clé était en place aveccancel-in-progress: true, et le run 513 est allé au bout (vert à 23:48:42Z) au lieu d'être annulé. C'est un cas observé où la clé reste sans effet sur unpull_request_sync, utile àforgejo-ops.md./release, extraite du fichier et rejouée : elle rendv20.20.2pour v0.17.1 (run 508), v0.17.0 et v0.16.0. Un tag inconnu échoue de façon visible (StopIteration, code de sortie 1). Le motif ne trouve qu'une ligne dans chacun des 8 journaux lus (507, 508, 510 à 515), y compris le journal de release de 515 Ko. La sonde sépare donc Node 20 de Node 24 sur le seul workflow que la CI de PR n'exerce pas : c'est l'équivalent de mutation de cette revue.docs/architecture.md: la description « un seul jobbuild-and-releaseen conteneurubuntu:22.04, Linux puis Windows parcargo-xwin» correspond àrelease.yml:9-63. La phrase sur les jetons est exacte :GITHUB_TOKENetPACKAGE_TOKENservent aux étapes suivantes (release.yml:150et:221), dans le même conteneur, en root.ci:), avecResolves #376dans le corps et sur71a4e1e. La timeline de #376 porte un seulpull_refencloses, celui de cette PR ; #415 à #417 la citent sans la fermer. Aucun secret ni aucune donnée personnelle dans les lignes ajoutées.Réponses aux points « à relire en priorité »
concurrencyne prête pas au miroir GitHub la lecture de.forgejo/workflows/. La formulation de D2 est corrigée à bon droit.rustup.release.yml:29est le mêmecurl … | shen root, etnpx tauri buildlance cargo avec la clé de signature dans l'environnement, donc aussi les scripts de build de chaque crate. Sans cette phrase, NodeSource passerait pour le seul installeur à qui le job fait confiance.Suggestions (non bloquantes)
STATE.md:79: la puce « Backlog ouvert » garde « #376 (status:triage: Node 20 … encore installé parcheck-frontend.ymletaudit.yml…) », que la nouvelle puce du même fichier contredit dès le merge. La mention est toujours là à la tête de la pile (e8306aa, ligne 80). Le journal de décisions du run la laisse au sync post-merge : la vérifier à ce moment-là, ou la retirer ici.src/services/reportService.test.ts:722dit « CI runs Node 20 → no node:sqlite », ce qui devient faux au merge, puisque Node 24 anode:sqlite. Le changement revient à #392, qui prévoit le harnaisnode:sqliteet dépend de #376 : corriger le commentaire ici, ou le signaler sur #392..claude/skills/release/SKILL.md:48, « le paramètrelimity est ignoré » : ce n'est vrai que sanspage. Mesuré ce jour : sans paramètre comme avec?limit=5, 611 lignes ;?limit=5&page=2en rend 5 et?page=2en rend 30. La commande ne passe ni l'un ni l'autre, elle est donc correcte, mais la parenthèse gagnerait à dire « sanspage, la route rend toute la liste ». La même nuance vaut pour le message def19b027et pour l'exemple?limit=5deforgejo-ops.md(autre dépôt).audit.yml:30-31renvoie au commentaire decheck-rust.yml, qui ne couvre quepushetpull_request. Oraudit.ymlne tourne que surscheduleetworkflow_dispatch, queforgejo-ops.mdne mesure pas. Une demi-ligne dans le renvoi le dirait. Facultatif.Reste à prouver au prochain tag
Il faudra lire
node --versionenv24.xdans le journal du run de release et obtenirverify-release.shvert. L'étape 10 (cycle réel de mise à jour) s'applique aussi, puisque le diff toucherelease.yml. Tout cela est déjà consigné dansSTATE.mdet à l'étape 9 du skill.Actions faites
mainet la tête,bash -nsur les trois scripts, et la mesure de la pagination de/actions/tasks./tmp/pr414-*(journaux et script extrait) sont supprimés.status:review→status:approved, posé juste après ce commentaire.