AUR-555 — Workflow liga o SBOM ao Dependency-Track com secrets opcionais
Status
Implementado em .github/workflows/review.yml (ordem dos passos, secrets
opcionais). code-review.yml já usa secrets: inherit e continua válido sem
mudança; action.yml não é afetado (não declara secrets nem o gate).
Prova: cmd/aurumcode/aur555_test.go::TestAUR555*, que lê o workflow como
YAML. Aceite: tests/acceptance/AUR-555.sh.
Ordem final e justificativa
- SBOM (AUR-549): precisa existir antes do review porque o gate
ssor_dtrack(AUR-550) lê o arquivo dequality_gates.ssor_dtrack.sbom_generator.output_filedurante o review. O passo rodaaurumcode sbom --repo .com cwd no checkout do PR, que resolveoutput_filedentro desse checkout; o container do review monta o mesmo checkout em/github/workspace(seu cwd), ondeSBOMOutputFile()é lido. Nenhuma flag nova. - Review (gate): envia o SBOM ao Dependency-Track e compara métricas. É o
único passo com
DTRACK_API_KEY/DTRACK_PROJECT_IDnoenv. - Assinatura (AUR-551): só quando o review terminou com sucesso
(
success() && steps.review.outcome == 'success') — não se assina um artefato reprovado. Antes (always()) ela rodava mesmo com review reprovado. - Upload do bundle de assinatura (inalterado;
if-no-files-found: ignore).
Consequência aceita: o passo de SBOM não é mais always() e sem dependência
do review; se ele falhar (digest do Trivy inválido, falha de geração com
gate.inconclusive: block), o job falha antes do review. Sem
sbom_generator declarado, o comando sai com 0 sem fazer nada e o fluxo é o
de antes.
Secrets
DTRACK_API_KEY e DTRACK_PROJECT_ID em workflow_call.secrets, com
required: false: os nomes padrão de api_key_secret/project_id_secret.
Repasse ao container do review via -e. Sem ssor_dtrack, nada é exigido
(AC-004). Com ssor_dtrack e secret ausente, o gate é inconclusivo
(dtrack_secret_missing) segundo gate.inconclusive, nunca aprovado (AC-003).
Cobertura
- AC-001
TestAUR555SBOMStepPrecedesReview - AC-002
TestAUR555SecretsOptionalAndScopedToReview - AC-003
TestAUR555MissingSecretIsInconclusiveNeverApproved(block e warn; o caso warn também existe emTestAUR550SecretMissingWarnsNeverBlocks, o caso block é novo) - AC-004
TestAUR555WorkflowValidWithoutDTrackAndSignsOnlyAfterReview - MUT-001: o script move o passo de SBOM para depois do review numa cópia do
workflow (
AUR555_WORKFLOW) e exige que o teste de AC-001 caia.
Limites
Os testes provam a estrutura do YAML, não a execução no runner do GitHub. Se
api_key_secret/project_id_secret forem renomeados, o workflow não repassa
os novos nomes (ver docs/configuration.md).