outillage : la chaîne borne npm audit et cesse de réinstaller le tableau de bord (#148) #151
No reviewers
Labels
No labels
Compat/Breaking
EC01
EC02
EC03
EC04
EC05
EC06
Kind/BDD
Kind/Back
Kind/Bug
Kind/CICD
Kind/Cloud
Kind/Contenu
Kind/Data
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Front
Kind/IA
Kind/Infra
Kind/Monitoring
Kind/Security
Kind/Testing
Portée/Post-jury
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
ops/alerte
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision!151
Loading…
Reference in a new issue
No description provided.
Delete branch "olivier/148-chaine-tableau-de-bord"
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?
Ferme le #148. Suite du #133, qui avait réuni les jobs sans pouvoir traiter ce
qui restait.
Le constat, mesuré
Sur les treize dernières exécutions de
ci.yml, relevées via l'APIactions/tasksde la forge :ci.ymlLe job Python tient 127 s sans un échec : ce n'était donc ni la machine ni le
réseau en général.
Chronométré en local sur les 244 paquets du tableau de bord :
Ce n'est pas
npm ci. C'estnpm audit, reproduit ici avec le journal npmà l'appui :
fetch-timeoutvaut 300 000 ms par défaut,fetch-retries2, et l'appel enfait deux successifs (
bulkpuisquick) : d'où le plafond de 433-435 s, quiest une signature de délai d'attente et non de travail variable.
Personne ne pouvait le voir : une seule étape, « Audit et inventaire du tableau
de bord », enchaînait
npm ci,npm auditetnpm sbom. Le journal imputaitquatre minutes à une ligne unique — d'où l'attribution à
npm i.Ce que fait cette demande
services/dashboard/.npmrcborne les appels réseau de npm : 60 s partentative au lieu de cinq minutes. Versionné, donc valable aussi sur les
postes de travail — la même pendaison s'y produit.
le journal dise qui coûte quoi.
node_modulesentre en cache, clé exacte portée parpackage-lock.jsonet la version de node, sans repli. Sur une clé qui tombe juste,
npm cine tourne pas.
complet pour un
openssl x509 -checkendque le job Python de la mêmeexécution fait déjà sur le même fichier.
Le point à trancher en relecture
npm auditsortait1pour deux choses qui n'ont rien à voir, avec le mêmemessage qui ne nomme ni paquet ni réseau :
.forgejo/scripts/verdict-audit-npm.jsles sépare sur la structure durapport — un rapport sans
metadata.vulnerabilitiesest un scan qui n'a pas eulieu — et non sur un motif du texte d'erreur, qui change de version en version.
J'ai gardé le cas réseau bloquant, avec un réessai et un message qui nomme
la cause. Raisonnement : c'est celui du
--strictdepip-auditdéjà en placecôté Python, dont le commentaire dit « une dépendance non auditée est une
dépendance inconnue ». Le désarmer serait une décision de politique de
sécurité, pas un réglage de performance, et ENF-11 exige un scan bloquant.
Mais c'est discutable, et c'est le vrai arbitrage de cette demande : en
l'état, un point d'accès npm injoignable continue de bloquer les fusions de tout
le monde — plus vite (2 min au lieu de 7) et avec un message clair, mais il
bloque. Si l'équipe préfère un avertissement non bloquant sur les demandes de
fusion, le changement est d'une ligne dans la branche
*)de l'étape, ettest-chaine-tableau-de-bord.shdevra être ajusté. Je ne l'ai pas fait seul.Comment c'est vérifié
Deux tests, joués par la chaîne :
tests/ci/test-verdict-audit-npm.sh— test de comportement du verdict sursept cas, dont le rapport d'échec réel capturé pendant l'analyse
(
tests/ci/fixtures/audit-npm/endpoint-injoignable.json, sortie authentiquede npm 10.9.8 en délai d'attente). Joué dans le job
node, seul job dontl'image porte node à coup sûr.
tests/ci/test-chaine-tableau-de-bord.sh— verrouille statiquement lesquatre correctifs, qui se défont sans le vouloir.
Les deux ont été éprouvés par mutation : huit régressions plausibles
essayées (repli remis sur le cache, borne effacée, borne relâchée, apt-get
remis, audit désarmé, étapes refondues, verdict remplacé par un appel nu, test
du verdict retiré de la chaîne), les huit sont détectées. Deux contrôles ont dû
être corrigés au passage, parce qu'un commentaire du workflow les satisfaisait
sans que le code correspondant existe.
Joués en local, tous verts : les cinq contrôles statiques, les 42 tests du
tableau de bord, la construction,
npm ciavec le nouveau.npmrc, le SBOM(244 composants), et
bash -nsur les 28 scriptsrun:du workflow.Ce que je n'ai pas fait
demande de documentation paie toujours l'installation, l'audit et la
construction du tableau de bord. C'est le prochain gain, et il est plus gros
que celui-ci sur les demandes qui ne touchent pas au front.
l'exécution #255,
nodedémarre à la seconde oùpythonse termine. Çarelève du #141 et de ta demande #145, que je ne voulais pas croiser.
vérifier qu'après passage sur
develop.Contexte de relecture
.forgejo/ettests/ci/sont à @lenaic dans CODEOWNERS, et le #133 était lesien. La demande #145 touche la configuration de l'exécuteur : si elle passe
d'abord, cette branche n'entre pas en conflit avec elle (aucun fichier commun).
developest actuellement rouge sur ce job (exécution #240) : c'est aussice que cette demande devrait remettre au vert.
Fermée au profit de la #149, qui traite le #148 et couvre les quatre mêmes correctifs. Travail redondant de ma part, désolé du bruit.
Deux choses de celle-ci qui ne sont pas dans la #149, à prendre ou à laisser :
.forgejo/scripts/verdict-audit-npm.js—npm auditsort1pour deux pannes qui n'ont rien à voir : une CVE (le scan a eu lieu) et le point d'accès injoignable (le scan n'a pas eu lieu). Le script les sépare sur la structure du rapport — un rapport sansmetadata.vulnerabilitiesest un scan qui n'a pas eu lieu — et non sur le texte d'erreur, qui change de version en version. Couvert partests/ci/test-verdict-audit-npm.sh, sept cas, dont la sortie réelle de npm 10.9.8 en délai d'attente capturée pendant l'analyse (tests/ci/fixtures/audit-npm/endpoint-injoignable.json).Une mesure qui concerne directement la #149 : la chaîne jouée sur cette branche (exécution #278) a fini le job en 133 s au lieu de 433-435 s — les bornes font leur travail — mais elle a échoué quand même, le point d'accès npm étant injoignable au même moment. Reproduit en local dans la même demi-heure, journal npm à l'appui :
network timeout at .../security/audits/quick. La #149 rencontrera la même chose : borner l'appel rend la panne rapide et lisible, elle ne la supprime pas. Le vrai arbitrage reste entier, et il est à l'équipe : un point d'accès npm en panne doit-il bloquer les fusions ?Branche
olivier/148-chaine-tableau-de-bordconservée pour l'instant si quelque chose vaut d'être repris ; à supprimer sinon.Pull request closed