Skip to content
Apothem
Seguridad

Protección de ramas

Protección de ramas de Apothem en main: la regla de protección vigente, sus verificaciones de estado requeridas y las verificaciones pendientes de agregar.

La rama main de Apothem está protegida por una regla clásica de protección de rama de GitHub. El repositorio no tiene conjuntos de reglas. La protección hace cumplir la disciplina de conjunto de cambios declarada en rules/production-ready-prs.md y alimenta las comprobaciones Branch-Protection y Code-Review de OpenSSF Scorecard.

Esta página registra exactamente los ajustes vigentes, tal como se leyeron por última vez de la API de GitHub el 2026-10-07. Un ajuste que el mantenedor tiene previsto pero que todavía no ha aplicado aparece solo en Cambios pendientes del mantenedor.

Ajustes de protección

AjusteCampo de la APIValor vigenteEfecto
Exigir una pull request antes de fusionarrequired_pull_request_reviews (presente)✅Los cambios llegan a main a través de una pull request.
Revisiones de aprobación requeridasrequired_approving_review_count0Una pull request se fusiona sin una revisión de aprobación. Consulta Modelo de mantenedor único.
Descartar aprobaciones obsoletas con nuevos commitsdismiss_stale_reviews✅Una aprobación otorgada antes de un nuevo push deja de contar.
Exigir la revisión de Code Ownersrequire_code_owner_reviews❌Habilitar esto antes de que se incorpore un segundo mantenedor produce un bloqueo mutuo en las pull requests de mantenedor único.
Exigir la aprobación del push revisable más recienterequire_last_push_approval❌GitHub exige que esa aprobación provenga de alguien distinto de quien hizo el push, algo que un mantenedor único no puede aportar.
Exigir que las verificaciones de estado pasenrequired_status_checks✅Los 12 contextos listados en Verificaciones de estado requeridas deben pasar.
Exigir que las ramas estén actualizadas antes de fusionarrequired_status_checks.strict❌Una pull request puede fusionarse cuando sus verificaciones requeridas pasaron contra un main más antiguo. Los flujos de trabajo que se ejecutan con un push a main prueban entonces el resultado fusionado.
Exigir la resolución de conversaciones antes de fusionarrequired_conversation_resolution✅Los hilos de revisión abiertos bloquean la fusión.
Exigir commits firmadosrequired_signatures❌Los commits de lanzamiento se firman localmente. La aplicación obligatoria espera hasta que la documentación de incorporación de colaboradores describa la configuración de firma SSH o GPG.
Exigir historial linealrequired_linear_history✅Mantiene el historial público de main en una sola línea.
Bloquear la ramalock_branch❌main acepta fusiones.
No permitir omitir los ajustes anterioresenforce_admins❌Los ajustes anteriores no obligan a un administrador del repositorio. Un administrador puede fusionar sin las verificaciones requeridas o hacer push directamente a main.
Permitir force pushesallow_force_pushes❌Los force pushes a main están bloqueados para todos, incluidos los administradores.
Permitir eliminacionesallow_deletions❌Nadie puede eliminar main, incluidos los administradores.

Modelo de mantenedor único

El repositorio tiene un solo mantenedor. GitHub indica: «Los autores de una pull request no pueden aprobar sus propias pull requests». Por lo tanto, un número de aprobaciones requeridas superior a 0 bloquearía todas las pull requests del mantenedor. La regla vigente exige una pull request con 0 aprobaciones y deja enforce_admins desactivado.

Para cualquier persona sin permiso de administrador, una fusión sigue necesitando las verificaciones de estado requeridas en verde, las conversaciones de revisión resueltas y un historial lineal. Los force pushes y la eliminación de main siguen bloqueados para todas las cuentas.

Cuando se incorpore un segundo mantenedor, los ajustes más estrictos son al menos una aprobación requerida, la aprobación del último push, la revisión de CODEOWNERS y enforce_admins activado. La ceremonia de fusión para mantenedor único se aplica solo a una protección que exige una aprobación y la aplica a los administradores.

Verificaciones de estado requeridas

Cada uno de estos 12 contextos es obligatorio, con GitHub Actions (ID de app 15368) como origen:

quality / ubuntu-latest / py3.10
quality / ubuntu-latest / py3.11
quality / ubuntu-latest / py3.12
quality / ubuntu-latest / py3.13
quality / ubuntu-latest / py3.14
quality / windows-latest / py3.10
quality / windows-latest / py3.11
quality / windows-latest / py3.12
quality / windows-latest / py3.13
quality / windows-latest / py3.14
coverage
Require Signed-off-by
ContextoFlujo de trabajo y trabajoCómo informa en cada pull request
quality / <os> / py<ver> (10)ci.yml, trabajo qualityci.yml se ejecuta cuando una pull request modifica una ruta de código o de configuración. ci-docs-stub.yml informa los mismos contextos en una pull request solo de documentación.
coverageci.yml, trabajo coverageIgual que quality.
Require Signed-off-bydco.yml, trabajo dcoSu disparador de pull request no tiene filtro paths, por lo que se ejecuta en cada pull request a main.

La celda de prelanzamiento quality / ubuntu-latest / py3.15 se ejecuta en ci.yml con continue-on-error y no es obligatoria. Cualquier otro flujo de trabajo, incluidos CodeQL, Scorecard y pip-audit, puede informar un estado, pero su resultado no condiciona la fusión a menos que su contexto se agregue a esta lista.

Cambios pendientes del mantenedor

El mantenedor tiene previsto agregar estos 25 contextos a la lista de obligatorios. El encabezado de cada flujo de trabajo declara el trabajo como verificación requerida, y su disparador de pull request no tiene filtro paths, por lo que se ejecuta en cada pull request a main. Hasta que se agregue un contexto, un fallo en él no bloquea la fusión.

clean-install-gate.yml, 7 contextos:

installer-shell-compat / ubuntu-latest
installer-shell-compat / macos-latest
installer-shell-compat / windows-latest
clean-install-gate / ubuntu-latest
clean-install-gate / windows-latest
wheel-smoke / ubuntu-latest
wheel-smoke / windows-latest

harness-matrix.yml, 17 contextos, un matrix (<adapter>) por cada adaptador de la matriz del trabajo:

matrix (antigravity)
matrix (claude-code)
matrix (codebuddy)
matrix (codex)
matrix (cursor)
matrix (gemini-cli)
matrix (github-copilot)
matrix (glm)
matrix (hermes)
matrix (kimi-code)
matrix (kiro)
matrix (open-claw)
matrix (opencode)
matrix (qwen-code)
matrix (trae)
matrix (windsurf)
matrix (zed)

installer-lint.yml, 1 contexto:

installer-lint

Una vez que los contextos de harness-matrix.yml sean obligatorios, registrar un nuevo adaptador agrega un contexto matrix (<adapter>), y la lista de obligatorios lo incorpora en el mismo cambio. «Exigir que las ramas estén actualizadas antes de fusionar» sigue desactivado. Cuando se aplique un cambio pendiente, muévelo a las secciones de la configuración vigente de arriba en el mismo cambio.

Cadencia de auditoría

Este archivo se revisa en cada auditoría de seguridad y en cada punto de control de ingeniería de lanzamientos. Una desviación entre este archivo y la configuración real de protección de rama es un hallazgo de severidad alta. Lee la configuración vigente con:

gh api repos/ahmed-g-gad/apothem/branches/main/protection
gh api repos/ahmed-g-gad/apothem/rulesets

Referencias

On this page