ci: pin the review follow-ups of the CI workflow (#33) #34
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/vps-health-api#34
Loading…
Reference in a new issue
No description provided.
Delete branch "issue-33-ci-review-followups"
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?
Fixes #33
Suite de la revue de la PR #31 : les trois constats non bloquants.
1. Aucun
continue-on-errordans le workflow. Nouveau test dans__tests__/ci.test.js, ancré sur la position de clé (^\s*(- )?continue-on-error\s*:), sur le YAML débarrassé de ses lignes de commentaire.2. Port déjà occupé.
scripts/boot-from-copy.shsonde le port avant de démarrer : libre seulement si curl répond « connexion refusée » (exit 7). Toute autre sortie (réponse HTTP, écoute muette, service non HTTP) fait échouer le script avecport N is already taken.--noproxy '*'empêche unhttp_proxyde répondre à la place du port.BOOT_PORTest documenté dans l'en-tête. Le test lance un vrai voisin HTTP sur127.0.0.1et le script enspawnasynchrone (unspawnSyncbloquerait la boucle d'événements et le voisin ne répondrait jamais).3. Modules chargés au démarrage. Pour chaque
.jsduCOPY, chaque lignerequire(doit commencer en colonne 0, et aucunimport(n'est permis (commentaires ignorés). C'est une heuristique : elle rend exhaustif un boot check qui n'appelle que/health.Preuve par mutation (fichiers restaurés depuis une copie,
git diff --statidentique avant/après) :continue-on-error: truesous l'étapenpm testnever lets a failing step passrequire("node:path")déplacé dans une fonction deindex.jsindex.js requires only at module levelGET /health without token: expected 401La troisième mutation reproduit le défaut décrit par la revue : sans le pré-contrôle, les assertions portent sur un serveur que le script n'a pas lancé.
Suite locale : 313/313 vitest, 45/45
test-curl.sh,boot-from-copy: PASS.Aucun fichier runtime touché (ni
index.js, nimetrics.js, niDockerfile) : pas de redéploiement nécessaire.🤖 Generated with Claude Code
Review — APPROVE
Résumé : les trois constats de la revue de #31 sont traités, et chacune des trois nouvelles épingles rougit sous la mutation qu'elle est censée interdire. Aucun fichier runtime touché. CI verte sur
156ca81(CI / verification (pull_request): success).Vérification par mutation (faite par le relecteur, sur une copie hors dépôt, arbre restauré et comparé par
diff -r)continue-on-error: truesous l'étapenpm testnever lets a failing step pass)require("./nope.js")indenté dans une fonction deindex.jsindex.js requires only at module level)true || fail)expected 401, got 200— le défaut signalé par la revue est bien reproduitLocal : 313/313 vitest,
boot-from-copy: PASS. Le commit porteFixes #33.Suggestions (non bloquantes)
--noproxyappliqué au seul pré-contrôle (scripts/boot-from-copy.sh). La boucle d'attente et les deux assertions appellentcurlsans--noproxy. Vérifié avec curl 8.5 :http_proxy=http://127.0.0.1:9 sh scripts/boot-from-copy.sh→ pré-contrôle « port libre », serveur démarré (listening on :3097), puisFAIL: the server did not answer on :3097 within 10 s. L'échec est bruyant, pas un faux vert, mais le raisonnement du commentaire (« un proxy peut répondre à la place du port ») vaut autant pour les assertions. Unexport NO_PROXY='*' no_proxy='*'en tête de script couvrirait tous les appels d'un coup.requireen colonne 0 » (assumée comme heuristique dans la PR, je les consigne pour mémoire) : restent vertsfunction lazy() { return require("./x"); }sur une seule ligne en colonne 0, et unrequire(renvoyé en colonne 0 sousconst x =à l'intérieur d'une fonction. Ni l'un ni l'autre n'est une forme naturelle sous le style du dépôt ; pas besoin de plus.continue-on-erroren style flow :- { name: x, run: false, continue-on-error: true }passe l'épingle (ancrée sur la position de clé). Forme improbable dans ce workflow ; un\bcontinue-on-error\s*:non ancré surciCode(déjà sans commentaires) fermerait le cas sans faux positif réaliste.🤖 Generated with Claude Code
Mergé en fast-forward sur
main(156ca81) après rejeu local du tip :npm ci, 313/313 vitest, 45/45test-curl.sh,boot-from-copy: PASS. Forgejo ne détecte pas le ff local, fermeture manuelle. #33 fermée par leFixes #33du commit. Suggestions non bloquantes de la revue reportées dans une issue de suivi.Pull request closed