🔧 chore(ci): refonte CI — lint bloquant, cache Playwright, dédup coverage, déploiement docs#36
Merged
Conversation
jsdoc-to-markdown ne parse pas le TypeScript (interfaces, generics, annotations de type ne sont pas du JS valide) : jsdoc:build scannait des .js disparus depuis la migration et générait silencieusement 0 fichier. TypeDoc + typedoc-plugin-markdown gèrent le TS nativement. docs:build écrivait aussi docs-dist HORS du repo : `vitepress build docs-sources --outDir ../docs-dist` résout --outDir relatif au cwd du script npm (racine du repo), pas à docs-sources — le build atterrissait donc dans le répertoire parent du repo, jamais dans .gitignore ni déployable. Corrigé en --outDir docs-dist. docs-sources/developers/code/ (généré à chaque build) devient entièrement gitignored, y compris index.md qui était committé par erreur.
…cy-peer-deps origin pointait sur sfeir-open-source/talk-control (fork) alors que TalkControl/talk-control est l'organisation finale (droits admin vérifiés) — develop y a été poussé (fast-forward, 106 commits) dans le cadre de cette étape. Réaligne badges, liens Issues/PR/fork et editLink VitePress sur TalkControl/talk-control. README.md:18 — finalise le retrait de --legacy-peer-deps commencé à l'étape 06 (IMP-004) : `npm install` seul suffit désormais. Note : docs-sources/developers/index.md, users/index.md et index.md contiennent encore des références sfeir-open-source noyées dans du contenu pré-migration obsolète (Node 8, parcelJs, mocha/chai) — laissés en l'état, hors scope (nécessite une réécriture de contenu, pas une simple URL).
…p, concurrency) Constats de l'audit (docs/improvements/step-16-ci.md) tous confirmés sur l'état actuel : pas de lint, 3× `playwright install --with-deps` sans cache, job coverage qui ré-exécutait toutes les suites déjà lancées par unit-and-integration + web-components, pas de concurrency/permissions/ timeout-minutes, server-smoke qui ne pouvait jamais échouer (`|| true`). - Nouveau job `lint` → `npm run lint:check`, bloquant. - Cache `~/.cache/ms-playwright` keyé sur la version de `@playwright/test` du lockfile (jobs coverage + e2e) : évite le téléchargement à froid du binaire chromium à chaque run, seul `install-deps` (apt, léger) reste nécessaire au cache hit. - Dédup tests/coverage — option (a) retenue (cf. step-16-ci.md) : le job `coverage` (jsdom + browser + merge) remplace unit-and-integration et web-components. Chaque suite ne tourne plus qu'une fois par run au lieu de deux (jsdom/browser exécutés une fois nativement, une fois via coverage:*). - Coverage gate vérifié réellement bloquant : testé en local avec un seuil `lines` artificiellement remonté à 99 → `ERROR: Coverage for lines (94.43%) does not meet global threshold (99%)`, exit 1 confirmé, seuils réels remis en place. - `concurrency` (annule les runs obsolètes), `permissions: contents: read` au niveau workflow, `timeout-minutes` sur chaque job. - `server-smoke` : retire le `|| true` masquant, vérifie le vrai contrat de `/socket.io/` (HTTP 400 + `Transport unknown` — / répond 404, pas de route racine côté Express, testé en local). - Nouveau job `docs-deploy` : build + déploie la doc VitePress sur GitHub Pages, uniquement sur push develop et après succès de tous les autres jobs (`needs`). Permissions minimales `pages: write` / `id-token: write`, scopées à ce job. GitHub Pages activé sur TalkControl/talk-control (source = GitHub Actions).
build + lint + test + build avant toute release (pas de tag cassé), puis création d'une release GitHub via `gh release create` — notes extraites de la section CHANGELOG.md correspondante, fallback sur --generate-notes si absente. Pas de publish npm : le projet n'est pas une lib (cf. étape 02).
Dédup coverage (option a) et remplacement jsdoc-to-markdown → TypeDoc tracés dans decisions.md. Étape 16 laissée ⬜ dans le README du plan jusqu'à l'observation d'un run CI réel (PR #36) — le blocage org GitHub Actions (allowed_actions=local_only, débloqué en cours de session) empêchait toute exécution jusqu'ici.
…ajeure Le premier run réel sur TalkControl/talk-control (PR #36) montre des avertissements de dépréciation : checkout@v4/setup-node@v4 ciblent Node 20 (déprécié), forcés sur Node 24 par GitHub. Monte checkout v4→v7, setup-node v4→v6, cache v4→v6, configure-pages v5→v6, upload-pages-artifact v3→v5, deploy-pages v4→v5 (dernières versions majeures disponibles).
…locage org, coverage gate) Documente le blocage allowed_actions=local_only découvert au niveau organisation TalkControl (aucune CI n'avait jamais pu tourner), les durées du premier run réel (PR #36), et la vérification en local que le coverage gate échoue réellement sur un seuil non tenu (test + revert immédiat).
Confirme via l'API GitHub Actions que le 2e run (même clé de cache) skip bien
le téléchargement chromium ("Install Playwright chromium (cold)" → skipped,
"cache hit" → success), avec un gain mesuré (~7s sur coverage et e2e).
…ons réelles Confirme via l'API GitHub Actions que cancel-in-progress annule bien le run devenu obsolète (29275092170 → cancelled) au profit du plus récent (29275125106 → succès), déclenché par un 2e push pendant que le 1er tournait encore. Toutes les validations de l'étape 16 sont désormais faites en conditions réelles (run CI GitHub Actions), pas seulement en lecture de YAML.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Résumé
Exécute l'étape 16 du plan d'amélioration (docs/improvements/step-16-ci.md).
develop.yml) : joblintbloquant, cache Playwright (clé = version@playwright/testdu lockfile), dédup coverage (le jobcoverageremplaceunit-and-integration+web-components— chaque suite ne tourne plus qu'une fois par run),concurrency(annule les runs obsolètes),permissions/timeout-minutessur chaque job,server-smokecorrigé (le|| truemasquant est retiré, vérifie le vrai contrat/socket.io/). Actions officielles montées à leur dernière version majeure (checkout v7, setup-node v6, cache v6, configure-pages v6, upload-pages-artifact v5, deploy-pages v5).jsdoc-to-markdownremplacé par TypeDoc +typedoc-plugin-markdown— jsdoc ne parse pas le TypeScript,jsdoc:buildgénérait silencieusement 0 fichier depuis la migration. Bug additionnel corrigé au passage :docs:buildécrivaitdocs-disthors du repo (résolution--outDirrelative au cwd, pas àdocs-sources).docs-deploysur pushdevelop, après succès de toute la CI (needs), déploie sur GitHub Pages (activé surTalkControl/talk-control, permissionspages: write/id-token: writescopées au job).release.ymlsur tagv*— build+test puisgh release createavec notes tirées du CHANGELOG (pas de publish npm).--legacy-peer-depsretiré de README.md (finalise IMP-004), URLs GitHub réalignées surTalkControl/talk-control(l'org finale —originpointait sur le forksfeir-open-source, corrigé dans cette session avecdeveloppoussé en fast-forward, 106 commits jamais publiés jusqu'alors).Blocage infra découvert et levé (hors scope initial du plan)
TalkControl(l'organisation) avaitallowed_actions: local_only— aucune Action GitHub officielle ne pouvait s'exécuter sur aucun repo de l'org, avant cette PR. Confirmé en reproduisant le mêmestartup_failureavec l'anciendevelop.ymlinchangé. Politique changée par un Owner vers « Allow TalkControl, and select non-TalkControl » + « Allow actions created by GitHub » (portée minimale : namespaceactions/*uniquement, aucune action tierce). GitHub Pages activé sur ce repo (source = GitHub Actions).Test plan
npx tsc --noEmit— 0 erreurnpm run lint/npm run lint:check— 0 erreurNODE_ENV=test npm test— 392/392npm run test:components— 35/35npm run coverage— seuils tenus (93%/90.7%/86.5%/94.4% vs 80/90/70/80), gate testé défaillant avec un seuil artificiellement relevé (revert immédiat)npm run build— OKnpm audit— 0 vulnérabilité (npm ci sans flag)npm run test:e2e— 35/35npm run docs:build— doc API non vide (179 pages TypeDoc)concurrencyannule un run obsolète (29275092170→cancelledau profit de29275125106) ✅🤖 Généré avec Claude Code