Puerta de verificación y automatización
Resumen
Dónde vive la verificación y qué la hace real. CI es la fuente de verdad; el gancho local es un espejo de conveniencia. Una regla que no es aplicada por una puerta ineludible es una sugerencia (Principio 7) — así que cuando la plataforma no puede proporcionar esa puerta, el proyecto declara el modo advisory y lleva la regla deliberadamente, en lugar de asumir la maquinaria que no tiene.
Las reglas
- Un único gestor de tareas es la entrada canónica a toda operación cotidiana — test, build, dev, deploy son recetas con nombre. Un procedimiento que solo existe en la cabeza de alguien no ocurre de forma confiable y no se puede delegar a un agente.
- CI es la fuente de verdad — autoritativo, compartido e ineludible siempre que la plataforma lo permita. Lint, verificación de tipos, comprobaciones de contratos, pruebas, escaneos de seguridad, validación de commits: todo se ejecuta aquí y debe aprobarse antes de fusionar en modo
enforced. Lo que dice CI es lo que cuenta. En modoadvisorylas mismas comprobaciones se ejecutan y reportan; la puerta es la disciplina, y eso nunca es motivo para hacer menos comprobaciones. - El gancho pre-push es un espejo de presubmit, no un muro. Ejecuta las mismas comprobaciones rápidas localmente para que probablemente pases CI antes de subir. Es explícitamente evadible (
--no-verify) y solo se ejecuta donde esté instalada la cadena de herramientas. Su trabajo es velocidad y retroalimentación temprana, no aplicación. El gancho nunca puerta; CI puerta donde la plataforma lo permita. - Mantén CI rápido jerarquizando, no eliminando comprobaciones. Cuando el conjunto completo supera lo razonable para cada PR, divide presubmit (subconjunto rápido, bloquea PR) de postsubmit (conjunto completo, después de fusionar, bloquea promoción) — nunca muevas comprobaciones autoritativas de vuelta al gancho evadible.
- Las imágenes de contenedor se construyen en CI, identificadas por digest de contenido y publicadas con una atestación de proveniencia. Mantenlo asequible con capas de registro en caché o un ejecutown autogestionado — nunca moviendo la construcción a un portátil, donde la proveniencia del artefacto no puede ser verificada por nadie más.
- Declara el modo de aplicación.
enforced— CI bloquea la fusión mediante protección de rama; lo que dice CI es lo que cuenta.advisory— CI se ejecuta y reporta, y la puerta es la disciplina, porque la protección de rama no está disponible (un repositorio privado en un plan gratuito). Advisory es legítimo; reclamar aplicación que no tienes no lo es. Indica el modo en el primer registro de decisión del proyecto, y qué lo movería a modo enforced.
La tensión nombrada
Un presubmit local evadible es rápido pero no aplicable; CI autoritativo es aplicable pero más lento. Resuelve dando a cada uno un mandato diferente — el gancho optimiza el bucle interno, CI la corrección del registro — y haciendo que CI, no el gancho, sea lo que bloquea una fusión.
Racionalizaciones comunes
| Excusa | Realidad |
|---|---|
| "El gancho pre-push ejecuta las pruebas, así que CI puede ser mínimo" | El gancho es evadible y depende de la cadena de herramientas. No puede ser la fuente de verdad. CI debe volver a ejecutar todo. |
"Solo usaré --no-verify esta vez" | Bien — porque CI igual lo detectará. Exactamente por eso CI, no el gancho, es la puerta. |
| "CI es lento, movamos las pruebas al gancho" | Jerarquiza CI (presubmit/postsubmit); nunca traslades comprobaciones autoritativas a una puerta evadible. |
| "Las builds de CI son lentas, construiré la imagen localmente" | Un artefacto construido en un portátil lleva una proveniencia que nadie más puede verificar. Soluciona la latencia con un caché de capas o un ejecutown autogestionado. |
| "La protección de rama cuesta dinero, así que las reglas no aplican" | Las reglas aplican; la aplicación difiere. Declara modo advisory y mantén la disciplina, o haz el repositorio público y obtén protección gratis. |
Banderas rojas — DETENTE
- Comprobaciones autoritativas que existen solo en un gancho local
- CI que no vuelve a ejecutar lo que ejecutó el gancho
- Una fusión permitida mientras CI está rojo
- Una imagen construida en cualquier lugar excepto CI, o promovida por tag en lugar de por digest
- Un proyecto que actúa como si CI puerta la fusión cuando no existe protección de rama
Razonamiento completo: Artículo VIII de la constitución, incluido en engineering-constitution/references/engineering-constitution.md. Detalles de deploy/k8s: cloud-delivery-aks.