ci : refonte complète de la chaîne — tâches qui s'expliquent, chaîne qui se contrôle elle-même #158
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
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision!158
Loading…
Reference in a new issue
No description provided.
Delete branch "lenaic/ci-refonte-anglais"
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?
Ce que ça change
La chaîne d'intégration est refondue : chaque tâche se termine par un tableau
qui nomme ses contrôles — avec la raison de ceux qui se sautent, et « échec »
pour ceux qui cassent. Une tâche ouverte dans l'interface ne peut plus paraître
vide, ce qui était le reproche du mini-oral.
La relecture des fichiers a sorti au passage une série de défauts qu'aucun
relecteur humain n'avait vus : un scan de secrets qui passait au vert quand
grepéchouait, sept noms d'étapes tronqués depuis toujours, quatrerépertoires de Python jamais lintés.
La chaîne est en français, comme le reste du dépôt. Une première version de
cette PR l'avait passée en anglais à la suite de la remarque du formateur ; après
discussion, l'équipe tient un dépôt d'une seule langue. Le nom du workflow reste
donc
Intégrationet le motif de protectionIntégration / *n'a pas àchanger. La question exacte — « les conventions CI, ou tout le projet ? » — est
à poser au formateur ; ce qui est fait ici ne préjuge pas de sa réponse.
Pas de ticket : ça vient du retour du formateur au mini-oral du 04/09 (rapporté
par Justine), pas du backlog. À rattacher si vous en ouvrez un.
Preuve
L'état avant, sur
develop:Dans un scalaire YAML non protégé, « espace +
#» ouvre un commentaire. Lefichier reste valide, donc rien ne le signalait.
Après, sur cette branche :
Chaque commit pris isolément, dans un arbre neuf, est vert.
L'épinglage par empreinte a été mesuré contre le miroir que le runner utilise
vraiment,
data.forgejo.org— après un premier passage qui avait vérifié lemauvais hôte et fait échouer la chaîne :
Et
defaults.run.shell: shn'est pas cosmétique — sans elleactionlintsuppose bash et passe nos blocs à
shellchecken bash :Relecture
Ce qui suit le code
docs/runbooks/mis à jour, un geste d'exploitation a changéOù regarder en priorité
1. Rien à changer côté protection de branche. Le workflow s'appelle
toujours
Intégration, le motifIntégration / *reste valide. (Une versionintermédiaire de cette PR le renommait
CI— c'est fini.)2.
ruffcouvre maintenantservices packages infra .forgejo bin db. Quatrerépertoires y échappaient, dont les scripts de la chaîne elle-même — un bloc
d'imports non trié y dormait.
tests/reste dehors, et c'est écrit :15 erreurs et 23 fichiers sur 55 à reformater, écrits par plusieurs personnes.
Décision d'équipe, pas effet de bord. Conséquence pour la #152 : le relais
d'alerte sous
infra/porte un E741 et deux blocs non formatés, la chaîne ledira désormais.
3. Trois constats réels que je n'ai pas voulu trancher seul — antérieurs à
cette PR, ils engagent l'équipe :
deploy.ymlne dépend pas de la CI.push: main, sansworkflow_runnineeds. Sur un exécuteur unique, le déploiement peut passer avant lachaîne. La « barrière » est une convention de merge, pas un mécanisme.
inventory/hosts.ini.example. Cefichier EST l'inventaire de production, et son nom dit le contraire. Deux
garde-fous ajoutés (
test-deploiement-continu.sh), le nom reste à trancher.pip-audit --strictconfond panne PyPI et CVE. Une indisponibilité bloqueune PR que personne ne peut débloquer — ce que la doctrine du dépôt interdit
ailleurs (
verdict-audit-npm.js).4. Deux décisions assumées, à contredire si vous n'êtes pas d'accord.
actions/upload-artifactreste en v3. La v4 exige le backend d'artefactsde Gitea 1.22+, que l'instance a, mais l'action officielle fait un contrôle
GHES auquel le backend Forgejo ne répond pas d'après la documentation amont
— ce n'est pas mesuré ici. Report, pas verdict.
imagesetsecretsfusionnent enrepo. Toutes deux nelisaient que des fichiers sur l'image nue : deux démarrages de conteneur pour
quelques secondes, sur un exécuteur où les tâches font la queue. La nouvelle
tâche
meta(la chaîne se lint elle-même : actionlint + shellcheck, zizmor,yamllint) reprend ce budget. Quatre tâches avant, quatre après.
5. Le défaut qui ne se voit pas d'ici.
core.filemodeest àfalsesurmon poste : mes
chmod +xn'étaient pas enregistrés. La chaîne aurait répondu« Permission denied » partout. Corrigé, et
test-hygiene-workflows.shlitdésormais le mode dans git, pas sur le disque.
ci : refonte complète de la chaîne — anglais, tâches qui s'expliquent, chaîne qui se contrôle elle-mêmeto ci : refonte complète de la chaîne — tâches qui s'expliquent, chaîne qui se contrôle elle-mêmeNew commits pushed, approval review dismissed automatically according to repository settings