CI y el gate

Lleva codafort al CI: SARIF en el code scanning, un gate con exit code a partir de tus condiciones y el veredicto de vet sobre el delta del PR.

SARIF 2.1.0 alimenta el code scanning de GitHub y cualquier herramienta que lea ese formato. Ningún paso necesita red más allá de descargar el binario.

GitHub Actions: la acción lista

jobs:
  security:
    runs-on: ubuntu-latest
    permissions:
      security-events: write   # subida del SARIF
      contents: read
    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }     # --git necesita el historial; vet necesita la base
      - uses: codafort/gate-action@v1
        with:
          source: '.'
          vet: 'true'                # veredicto sobre el delta del PR (default)
          vet-enforce: 'false'       # report-only: nunca rompe el build (Free)

La acción corre engine analyze --format sarif, publica en el code scanning, archiva el veredicto coda-gate/1 como evidencia y corre vet sobre el delta. Por defecto solo informa y no rompe el build. Con vet-enforce: 'true', un veredicto bloqueante de vet reprueba el job.

Sin la acción: el binario directo (GitLab, Jenkins, cualquier CI)

codafort engine analyze --source . --format sarif --output codafort.sarif --progress never
codafort gate --report codafort.json            # exit 0 pasa · 1 reprueba

Para GitHub sin la acción: github/codeql-action/upload-sarif@v3 con sarif_file: codafort.sarif.

El gate

codafort gate lee un envelope y devuelve un exit code a partir de las condiciones de .codafort-gate.yaml. Sin archivo, usa el gate embebido:

MétricaCondición por defecto
vulnerabilities> 0 reprueba
blocker> 0 reprueba
taint_findings> 0 reprueba
risk_findings_high> 0 reprueba

Un .codafort-gate.yaml propio reemplaza las condiciones (métricas por severidad, kind, tag). engine analyze --fail-on-quality-gate evalúa el mismo archivo en el mismo paso. Los dos comandos buscan la configuración en el mismo orden: --config explícito > .codafort-gate.yaml en el directorio > embebido.

El gate de la declaración contrafirmada (el artefacto coda-attestation/1) no lee este archivo: attest evalúa condiciones fijas del estándar (asvs-l*-sast), versionadas en reduction_version. Ver Declaración contrafirmada.

PR mode: solo el código nuevo

codafort engine analyze --source . --git --diff origin/main --format sarif --output codafort.sarif

--git --diff <base> marca is_new en cada finding. Combina un gate laxo para el legado con uno estricto para lo nuevo; el dashboard tiene el toggle "PR mode".

Pre-commit

codafort scan . && codafort vet

O, en el agente, la tool scan_diff antes de cada commit (ver En tu agente de IA).

Enforcement a escala

Llamado directo en el pipeline, codafort gate reprueba el build en cualquier plan. La acción pública solo informa el gate y reprueba por vet con vet-enforce. El plan Platform agrega la consolidación de varios repositorios (engine merge) y la política de la organización. La declaración contrafirmada empieza en el plan Verified y firma el mismo dato que mides en el CI gratis.