feat(ci): reprovar if: em job-caller de reusable, que pula o gate e mostra success [INFRA-65706] #49

Merged
tarcisio merged 1 commit from feat/INFRA-65706-if-em-caller into develop 2026-10-05 11:30:09 -03:00
Owner

O que muda (INFRA-65706, grupo "CI: gates que passam em silêncio")

No Forgejo Actions, se o job que chama um reusable tem if:, o job interno é pulado e o caller aparece como success: o gate (Trivy, testes) some e o PR fica verde (observado em 25/09/2026, run 1958, PR Tennis#99).

  • scripts/conferir_if_em_caller.py: sem dependências (não usa PyYAML; lê por indentação, jobs a 2 espaços e chaves a 4). Reprova com ::error file=…,line=… o job que tem uses: e if: no mesmo nível. if: em passos (steps) não conta. Exceção só para job que não é gate, com motivo obrigatório: # if-caller-ok: <motivo>.
  • conferir-ci-identico.sh chama o verificador, em qualquer modo (o job changes do CI único já o roda em todo produto).
  • README: a regra, o exemplo errado e o certo (condição dentro do reusable ou num job anterior com needs:).

Varredura da frota (aceite da issue), 05/10/2026

46 repositórios, 317 workflows, 112 jobs-caller de reusable (branch padrão e develop, por YAML, pela API do Forgejo): nenhum com if: no próprio job. Não há caller a corrigir hoje; a verificação passa a impedir que apareça.

Testes

python3 -m unittest discover -s tests/if-em-caller: 18 testes (controle positivo: o scanner pega o defeito; controle negativo: não pega job normal nem if: de passo; marca com e sem motivo; vários jobs sem vazar o if: do vizinho; CLI; integração com o conferir-ci-identico.sh; e os workflows do próprio ci-shared estão limpos). Antes de ligar ao conferidor, os 2 testes de integração falhavam, como esperado. ci-unico (71), ci-config (88) e hub-issue-sync (38) seguem verdes.

Relacionado

INFRA-65706. Mesmo grupo: INFRA-67203 e INFRA-63677 (PRs separados nos repositórios deles: ~/.claude e TMF/infra).

🤖 Generated with Claude Code

https://claude.ai/code/session_019nhmgPciDjRhb5KSiZrePM

## O que muda (INFRA-65706, grupo "CI: gates que passam em silêncio") No Forgejo Actions, se o job que **chama** um reusable tem `if:`, o job interno é **pulado** e o caller aparece como `success`: o gate (Trivy, testes) some e o PR fica verde (observado em 25/09/2026, run 1958, PR Tennis#99). - `scripts/conferir_if_em_caller.py`: sem dependências (não usa PyYAML; lê por indentação, jobs a 2 espaços e chaves a 4). Reprova com `::error file=…,line=…` o job que tem `uses:` **e** `if:` no mesmo nível. `if:` em passos (`steps`) não conta. Exceção só para job que não é gate, com motivo obrigatório: `# if-caller-ok: <motivo>`. - `conferir-ci-identico.sh` chama o verificador, em qualquer modo (o job `changes` do CI único já o roda em todo produto). - README: a regra, o exemplo errado e o certo (condição dentro do reusable ou num job anterior com `needs:`). ## Varredura da frota (aceite da issue), 05/10/2026 46 repositórios, 317 workflows, 112 jobs-caller de reusable (branch padrão e `develop`, por YAML, pela API do Forgejo): **nenhum com `if:` no próprio job**. Não há caller a corrigir hoje; a verificação passa a impedir que apareça. ## Testes `python3 -m unittest discover -s tests/if-em-caller`: 18 testes (controle positivo: o scanner pega o defeito; controle negativo: não pega job normal nem `if:` de passo; marca com e sem motivo; vários jobs sem vazar o `if:` do vizinho; CLI; integração com o `conferir-ci-identico.sh`; e os workflows do próprio ci-shared estão limpos). Antes de ligar ao conferidor, os 2 testes de integração falhavam, como esperado. `ci-unico` (71), `ci-config` (88) e `hub-issue-sync` (38) seguem verdes. ## Relacionado INFRA-65706. Mesmo grupo: INFRA-67203 e INFRA-63677 (PRs separados nos repositórios deles: `~/.claude` e `TMF/infra`). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_019nhmgPciDjRhb5KSiZrePM
feat(ci): reprovar if: em job-caller de reusable, que pula o gate e mostra success [INFRA-65706]
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 2m47s
11e11c8820
- scripts/conferir_if_em_caller.py: sem dependencias, le o texto por indentacao; reprova com ::error file,line o job que tem uses: e if: no mesmo nivel (steps nao contam); excecao so com '# if-caller-ok: <motivo>'.
- conferir-ci-identico.sh passa a chamar o verificador, em qualquer modo.
- README: a regra, o exemplo errado e o certo, e a varredura da frota (46 repos, 317 workflows, 112 callers: nenhum com if: no job).
- tests/if-em-caller: 18 testes (controles positivo e negativo, steps, marca com e sem motivo, CLI, integracao com o conferidor).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019nhmgPciDjRhb5KSiZrePM
tarcisio merged commit 09b5bff2fc into develop 2026-10-05 11:30:09 -03:00
tarcisio deleted branch feat/INFRA-65706-if-em-caller 2026-10-05 11:30:10 -03:00
Sign in to join this conversation.
No reviewers
No labels
seguranca
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
TMF/ci-shared!49
No description provided.