Les workflows tournent enfin : store hors du dépôt et en cache, check séquentiel, artefacts v3, intégration sur le service, fuzzing paramétrable, plus d'e2e #3

Merged
nicolas-fryder merged 6 commits from nicolas-fryder/dev into main 2026-10-14 19:57:37 +00:00 AGit

Premier passage réel de la CI (eqs-demo, 2026-10-14). Store pnpm hors du dépôt (format 662 s) et en cache au lockfile ; eqs-check --sequential sous 3 Go ; upload-artifact v3.2.2 (toute v4 lève GHESNotSupportedError, éprouvé : artefacts publiés) ; integration : EQS_TEST_POSTGRES_URL + psql (@eqs/testing 0.23) ; fuzzing : sante, exclure, AUTH_SECRET jetable, journal de l'application, schemathesis épinglé (203/203 en local) ; exemple sans e2e (D-064) ; contient aussi fix/chemins-par-profil ; harnais T11 réparé (11/11). Après fusion : déplacer v1. 🤖 Generated with Claude Code

Premier passage réel de la CI (eqs-demo, 2026-10-14). Store pnpm hors du dépôt (format 662 s) et en cache au lockfile ; eqs-check --sequential sous 3 Go ; upload-artifact v3.2.2 (toute v4 lève GHESNotSupportedError, éprouvé : artefacts publiés) ; integration : EQS_TEST_POSTGRES_URL + psql (@eqs/testing 0.23) ; fuzzing : sante, exclure, AUTH_SECRET jetable, journal de l'application, schemathesis épinglé (203/203 en local) ; exemple sans e2e (D-064) ; contient aussi fix/chemins-par-profil ; harnais T11 réparé (11/11). Après fusion : déplacer v1. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
`smoke.yml` codait `/health` et `/version` EN DUR. Un profil `nest` les
sert à la racine, un `next-fullstack` sous le préfixe de ses routes
(`/api/health`) — c'est `docs/profils.md` qui le dit. La sonde ne pouvait
donc pas fonctionner pour tout un profil : elle aurait reçu la page 404 de
Next et conclu à un service mort.

Deux entrées de plus, `chemin-sante` et `chemin-version`, dont les défauts
gardent le comportement actuel.

Personne ne l'avait vu parce que ce workflow n'a jamais tourné : les
satellites l'appellent par `@v1`, et ce tag n'existait pas jusqu'à
aujourd'hui.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Le runner a pris son premier job le 2026-10-14 ; avant, aucune exécution
n'avait jamais démarré (organisation privée, puis aucun runner). Le premier
check d'eqs-demo a montré :

- le store pnpm à la racine du checkout : Prettier et ESLint le parcouraient
  (format à 662 s, en échec sur des sources de Next). --store-dir hors du
  dépôt, sur les six pnpm install.
- eqs-check en parallèle sous 2 Go / 1,5 CPU : build:web et lint tués sans
  un mot. --sequential.
- upload-artifact v4 de GitHub : GHESNotSupportedError. Remplacé par la
  version de Forgejo, épinglée.

Et le harnais : T11 (gitleaks) échouait toujours, sur main aussi — son faux
secret, soixante « A », a une entropie nulle et gitleaks l'écarte. Généré
aléatoire, le cas passe : 11 cas verts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- upload-artifact : la v4 de Forgejo lève la même GHESNotSupportedError que
  celle de GitHub. Forgejo ne parle que le protocole v3 : v3.2.2, épinglé.
  C'était le dernier rouge de check (8/8 en 85 s, 2026-10-14).
- integration : EQS_TEST_POSTGRES_URL désigne le service, et psql est
  installé. withTestDatabase() (@eqs/testing 0.23) y crée ses bases au lieu
  de vouloir lever la sienne par Docker, que les jobs n'ont pas.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Décision du 2026-10-14. En CI personne ne démarrait l'application (quatre
tests d'eqs-demo en ERR_CONNECTION_REFUSED) et l'étage e2e regarde l'image
derrière le proxy, qu'un job sans Docker (D-015) ne peut pas monter. contract
attend désormais check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Premier passage réel (eqs-demo, 2026-10-14) : 60 s d'attente sur
127.0.0.1:3000/health pendant que pnpm avait refusé de démarrer dès la
première seconde (« Missing script start »), et rien ne le montrait.

- input sante (défaut /health) : une application Next fullstack répond sous
  /api/health ;
- SERVICE_NAME et un AUTH_SECRET tiré à chaque exécution, que @eqs/config
  exige pour démarrer ;
- le journal de l'application va dans un fichier ; l'attente s'arrête dès que
  le processus meurt et en montre la fin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Le fuzzing d'eqs-demo trouvait deux 500 voulus : deux routes dont le métier
est de prouver un refus (plantage, appel délégué hors requête). Input exclure
(--exclude-path-regex). Éprouvé en local sur l'application démarrée comme en
CI : 203 cas, 203 réussis. schemathesis 4.31.0, celui qui a été éprouvé.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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
Infrastructure/eqs-workflows!3
No description provided.