Porte de vérification et automatisation
Aperçu
Où vit la vérification et ce qui la rend réelle. L'IC est la source de vérité ; le hook local est un miroir de commodité. Une règle non appliquée par une porte infalsifiable est une suggestion (Principe 7) — ainsi, lorsque la plateforme ne peut pas fournir cette porte, le projet déclare le mode advisory et porte la règle délibérément, plutôt que de supposer une machinerie qu'il ne possède pas.
Les règles
- Un seul exécuteur de tâches est l'entrée canonique de toute opération quotidienne — test, build, dev, deploy sont des recettes nommées. Une procédure qui n'existe que dans la tête de quelqu'un ne se produit pas de manière fiable et ne peut pas être confiée à un agent.
- L'IC est la source de vérité — faisant autorité, partagée et infalsifiable partout où la plateforme le permet. Lint, vérification de types, vérifications contractuelles, tests, scans de sécurité, validation de commit s'exécutent tous ici et doivent réussir avant la fusion en mode
enforced. Ce que dit l'IC est ce qui compte. En modeadvisory, les mêmes vérifications s'exécutent et rapportent ; la porte est la discipline, et ce n'est jamais une raison pour faire moins de vérifications. - Le hook pre-push est un miroir de présoumission, pas un mur. Il exécute les mêmes vérifications rapides localement pour que vous puissiez probablement réussir l'IC avant de pousser. Il est explicitement contournable (
--no-verify) et ne s'exécute que là où la chaîne d'outils est installée. Son travail est la rapidité et le retour rapide, pas l'application. Le hook ne bloque jamais ; l'IC bloque partout où la plateforme le permet. - Gardez l'IC rapide en hiérarchisant, pas en supprimant des vérifications. Lorsque la suite complète dépasse chaque PR, divisez la présoumission (sous-ensemble rapide, bloque la PR) de la postsoumission (suite complète, après la fusion, bloque la promotion) — ne déplacez jamais les vérifications faisant autorité vers le hook contournable.
- Les images conteneur sont construites dans l'IC, identifiées par digest de contenu et publiées avec une attestation de provenance. Maintenez cela abordable avec un cache de couches de registre ou un exécuteur auto-hébergé — jamais en déplaçant la construction vers un ordinateur portable, où la provenance de l'artefact ne peut être vérifiée par personne d'autre.
- Déclarez le mode d'application.
enforced— l'IC bloque la fusion via la protection de branche ; ce que dit l'IC est ce qui compte.advisory— l'IC s'exécute et rapporte, et la porte est la discipline, car la protection de branche est indisponible (un dépôt privé sur un plan gratuit). Le mode advisory est légitime ; prétendre à une application que vous n'avez pas ne l'est pas. Indiquez le mode dans le premier enregistrement de décision du projet, et ce qui le ferait passer en mode enforced.
La tension nommée
Une présoumission locale contournable est rapide mais non applicable ; une IC faisant autorité est applicable mais plus lente. Résolvez en donnant à chacune un mandat différent — le hook optimise la boucle interne, l'IC l'exactitude de l'enregistrement — et en faisant de l'IC, pas du hook, ce qui bloque une fusion.
Rationalisations courantes
| Excuse | Réalité |
|---|---|
| "Le hook pre-push exécute les tests, donc l'IC peut être minimale" | Le hook est contournable et dépend de la chaîne d'outils. Il ne peut pas être la source de vérité. L'IC doit tout réexécuter. |
"Je vais juste faire --no-verify cette fois" | Très bien — car l'IC l'attrapera quand même. C'est exactement pourquoi l'IC, pas le hook, est la porte. |
| "L'IC est lente, déplaçons les tests vers le hook" | Hiérarchisez l'IC (présoumission/postsoumission) ; ne déplacez jamais les vérifications faisant autorité vers une porte contournable. |
| "Les builds IC sont lents, je vais construire l'image localement" | Un artefact construit sur un ordinateur portable porte une provenance que personne d'autre ne peut vérifier. Corrigez la latence avec un cache de couches ou un exécuteur auto-hébergé. |
| "La protection de branche coûte de l'argent, donc les règles ne s'appliquent pas" | Les règles s'appliquent ; l'application diffère. Déclarez le mode advisory et gardez la discipline, ou rendez le dépôt public et obtenez la protection gratuitement. |
Drapeaux rouges — STOP
- Vérifications faisant autorité qui n'existent que dans un hook local
- IC qui ne réexécute pas ce que le hook a exécuté
- Une fusion autorisée alors que l'IC est rouge
- Une image construite ailleurs que dans l'IC, ou promue par tag plutôt que par digest
- Un projet se comportant comme si l'IC bloquait la fusion alors qu'aucune protection de branche n'existe
Raisonnement complet : Article VIII de la constitution, regroupé dans engineering-constitution/references/engineering-constitution.md. Spécificités Deploy/k8s : cloud-delivery-aks.