check.yml : le lint typé d'un satellite moyen ne tient pas dans les 2 Go du runner (SIGABRT, tas V8 plein) #4
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Infrastructure/eqs-workflows#4
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Constat (ATLAS,
check.yml@v1, run du 2026-10-15 sur542d9ec)pnpm check --sequential: la tâchelintmeurt « tuée par le système (SIGABRT), sans avoir pu rien dire ». Ce n'est pas le noyau (ce serait SIGKILL) : c'est V8 qui abandonne, tas plein. En série, comme le workflow le fait déjà, le lint est seul et meurt quand même.Mesuré en local (même dépôt, socle 0.24.0, ESLint 9.39, sans cache)
783 fichiers TS/JS. Le profil
next()de@eqs/toolingactiveprojectService: un programme TypeScript complet partsconfig.jsonrencontré. Chez ATLAS, il y en a trois (racine,tests/qui inclut aussisrc,worker/), chacun avec les types de Next 16 et de Prisma. Le tas nécessaire est donc entre 1,8 et 3 Go. Avec le runner à 2 Go et 1,5 CPU (commentaire decheck.yml), aucun réglage de--max-old-space-sizene peut suffire : au-delà de ce que le conteneur a, c'est le noyau qui tue.Conséquence
checkest rouge à chaque push sur ATLAS, etintegration,contractetaudit, qui en dépendent (needs), ne tournent jamais. Le hookpre-pushlocal (sans plafond) passe.Pistes
check(4 Go), en entrée du workflow (runs-on) ;node-optionstransmise àpnpm check, utile seulement avec un runner plus grand ;@eqs/tooling, un lint typé découpé partsconfig(un processus par programme), qui borne le pic à un seul programme.Ouvert depuis une session de travail sur ATLAS.
Correction : les jobs ont 3 Go depuis le 2026-10-14 (
forgejo-runner,config.yml), pas 2. Le chiffre venait du commentaire decheck.yml, qui est périmé et serait à mettre à jour. Le lint meurt quand même à 3 Go : demande de passage à 4 Go ouverte en Infrastructure/forgejo-runner#1.Cause mesurée (détail dans Infrastructure/forgejo-runner#1) : à 3 Go, Node 22 fixe son tas à 1 584 Mo, et le lint d'ATLAS en demande ~1,8 Go. V8 abandonne alors que le cgroup a encore plus d'un gigaoctet libre (
oom_kill 0). AvecNODE_OPTIONS=--max-old-space-size=2560, le job passe à 3 Go, avec un pic anonyme de 2 519 Mo.Côté workflow, deux choses suffiraient si le runner ne pose pas
NODE_OPTIONSlui-même :node-optionsdanscheck.yml(etintegration.yml,mutation.yml), transmise enenvaux étapes Node ;Réglé côté runner, déployé (Infrastructure/forgejo-runner
376e8ad) : chaque job reçoitNODE_OPTIONS=--max-old-space-size=2560(runner.envsdeconfig.yml, à côté du plafond de 3 Go qu'il accompagne). Rien à changer danscheck.ymlni dans les satellites.Vérifié avant de pousser :
config.yml— 29/29 ;next buildd'eqs-demo à 3 Go, trois workers comme sur le VPS : passe avec un pic plus bas (1 771 Mo contre 2 123 Mo sans réglage) ;Le commentaire périmé de
check.yml(« 2 Go et 1,5 CPU ») est corrigé dans #5.Il reste à relancer la CI d'ATLAS pour le constater sur pièces ; je laisse ce ticket ouvert jusque-là.
🤖 Generated with Claude Code
Constaté sur pièces : la CI de relance d'ATLAS (EQS/ATLAS#7, run #14) a
checkvert, lint compris, avec le tas de 2 560 Mo que pose le runner. Je ferme.Les jobs qui suivent
checkont enfin tourné chez ATLAS (integration,contract) ; leurs rouges sont un autre sujet, sans lien avec la mémoire.🤖 Generated with Claude Code