ci: evento efetivo nos reusáveis — develop smoke, main nada, docs-only e hub-sync voltam a valer [INFRA-67006] #140

Merged
tmf-ia merged 1 commit from infra/INFRA-67006-runs-de-apoio into develop 2026-10-20 19:49:58 -03:00
Owner

INFRA-67006: evento efetivo nos reusáveis

Causa (verificada): dentro do workflow_call o Forgejo entrega github.event_name = workflow_call, tanto em PR quanto em push. Prova nos logs de 20/10/2026:

  • DANI task 198659 (push develop): modo=completo — derivado do evento (workflow_call refs/heads/develop)
  • DANI task 198931 (PR #989): Evento workflow_call (não-PR): code=true e reuso=false — ... (evento workflow_call, base main)
  • tmf-platform task 199204 (hub-issue-sync): não se aplica: evento 'workflow_call' não é pull_request

Por isso estas decisões não funcionavam:

Decisão Esperado Real
push develop smoke completo (DANI: 26 min de pytest por merge)
push main nada (decisão de 30/09) completo
PR docs-only / G2 docstring pula backend/frontend nunca pulava
reuso por tree (PR → main, TH-68150) reaproveita a suíte nunca valia
-m 'not heavy' no PR (INFRA-70586) tira o heavy do PR nunca entrava
hub-issue-sync move a issue no Hub sempre "não se aplica" (o sync não funciona na frota)

Medição antes (banco do Forgejo, 17/10 a 20/10, minutos de runner por job)

Origem Runs Min
ci.yml, push develop (platform 1155, helpcor 502, dani 270, mgmt 245, tmf9 80) 67 ~2.250
ci.yml, push main (platform 73, dani 27, mgmt 27, helpcor 15) 4 ~140
ci.yml, push epic/**/release/** do tmf-platform 4 188
security.yml (helpcor) 99 39
verificar-docs (helpcor + platform) 61 22
hub-issue-sync (platform + dani) 71 runs / 142 jobs 7 (todos "não se aplica")

Os workflows de apoio pesam pouco. O desperdício grande está no próprio ci.yml reusável, rodando completo onde deveria ser smoke ou nada. Desses números, só o DANI chama o ci.yml reusável. Platform, HelpCor e tmf-management usam CI próprio ou o ci-base.yml, e vão precisar de ajuste no próprio produto (a lista está na INFRA-67006).

O que muda

  • ci.yml: o passo guard: evento efetivo no changes lê o evento do payload: pull_request.number ou ref refs/pull/* dá PR, before dá push, o resto é dispatch. O resultado sai como output evento, e modo, filter, reuso, heavy (backend e frontend) e o ci-ok passam a usar esse output.
  • Smoke do develop: passa a ter passo próprio de heavy (pytest -m heavy, vitest run dos *.heavy.test.*). Sem isso, o heavy tirado do PR não rodaria em lugar nenhum. O teto é o mesmo dos testes.
  • ci-base.yml (G2, filter, fallback do Trivy, ci-ok) e hub-issue-sync.yml: o PR é reconhecido por github.event.pull_request.number.
  • Testes: tests/ci-unico/test_evento_efetivo.py cobre a matriz evento→modo, tem um controle negativo e uma varredura estática que reprova comparação nova com github.event_name/GITHUB_EVENT_NAME. Os testes antigos foram ajustados ao evento efetivo.

Riscos (ler antes de liberar para a main)

  • O reuso por tree (TH-68150) e o filtro docs-only vão rodar em produção pela primeira vez. Os dois são fail-safe: na dúvida, rodam tudo.
  • O hub-issue-sync vai mover issues de verdade pela primeira vez: PR aberto vai para review, merge em develop vai para approved, merge em epic vai para review, e nunca regride.
  • Os produtos chamam @main, então nada disso chega à frota antes do release develop→main do ci-shared, que é decisão do operador.

Fora deste PR (relatado na issue)

  • scripts/release-tag.sh decidir recusa evento=workflow_call ("não suportado"), e o reusable-sonar faz case push:develop. Os dois provavelmente sofrem do mesmo problema e precisam de issue própria.

🤖 Generated with Claude Code

## INFRA-67006: evento efetivo nos reusáveis **Causa (verificada):** dentro do `workflow_call` o Forgejo entrega `github.event_name = workflow_call`, tanto em PR quanto em push. Prova nos logs de 20/10/2026: - DANI task 198659 (push develop): `modo=completo — derivado do evento (workflow_call refs/heads/develop)` - DANI task 198931 (PR #989): `Evento workflow_call (não-PR): code=true` e `reuso=false — ... (evento workflow_call, base main)` - tmf-platform task 199204 (hub-issue-sync): `não se aplica: evento 'workflow_call' não é pull_request` Por isso estas decisões não funcionavam: | Decisão | Esperado | Real | |---|---|---| | push `develop` | smoke | completo (DANI: 26 min de pytest por merge) | | push `main` | nada (decisão de 30/09) | completo | | PR docs-only / G2 docstring | pula backend/frontend | nunca pulava | | reuso por tree (PR → main, TH-68150) | reaproveita a suíte | nunca valia | | `-m 'not heavy'` no PR (INFRA-70586) | tira o heavy do PR | nunca entrava | | hub-issue-sync | move a issue no Hub | sempre "não se aplica" (o sync **não funciona** na frota) | ### Medição antes (banco do Forgejo, 17/10 a 20/10, minutos de runner por job) | Origem | Runs | Min | |---|---|---| | ci.yml, push `develop` (platform 1155, helpcor 502, dani 270, mgmt 245, tmf9 80) | 67 | ~2.250 | | ci.yml, push `main` (platform 73, dani 27, mgmt 27, helpcor 15) | 4 | ~140 | | ci.yml, push `epic/**`/`release/**` do tmf-platform | 4 | 188 | | security.yml (helpcor) | 99 | 39 | | verificar-docs (helpcor + platform) | 61 | 22 | | hub-issue-sync (platform + dani) | 71 runs / 142 jobs | 7 (todos "não se aplica") | Os workflows de apoio pesam pouco. O desperdício grande está no próprio `ci.yml` reusável, rodando completo onde deveria ser smoke ou nada. Desses números, só o DANI chama o `ci.yml` reusável. Platform, HelpCor e tmf-management usam CI próprio ou o `ci-base.yml`, e vão precisar de ajuste no próprio produto (a lista está na INFRA-67006). ### O que muda - `ci.yml`: o passo `guard: evento efetivo` no `changes` lê o evento do payload: `pull_request.number` ou ref `refs/pull/*` dá PR, `before` dá push, o resto é dispatch. O resultado sai como output `evento`, e modo, filter, reuso, heavy (backend e frontend) e o `ci-ok` passam a usar esse output. - Smoke do develop: passa a ter passo próprio de heavy (`pytest -m heavy`, `vitest run` dos `*.heavy.test.*`). Sem isso, o heavy tirado do PR não rodaria em lugar nenhum. O teto é o mesmo dos testes. - `ci-base.yml` (G2, filter, fallback do Trivy, ci-ok) e `hub-issue-sync.yml`: o PR é reconhecido por `github.event.pull_request.number`. - Testes: `tests/ci-unico/test_evento_efetivo.py` cobre a matriz evento→modo, tem um controle negativo e uma varredura estática que reprova comparação nova com `github.event_name`/`GITHUB_EVENT_NAME`. Os testes antigos foram ajustados ao evento efetivo. ### Riscos (ler antes de liberar para a main) - O **reuso por tree** (TH-68150) e o **filtro docs-only** vão rodar em produção pela primeira vez. Os dois são fail-safe: na dúvida, rodam tudo. - O **hub-issue-sync** vai **mover issues** de verdade pela primeira vez: PR aberto vai para review, merge em develop vai para approved, merge em epic vai para review, e nunca regride. - Os produtos chamam `@main`, então nada disso chega à frota antes do release develop→main do ci-shared, que é decisão do operador. ### Fora deste PR (relatado na issue) - `scripts/release-tag.sh decidir` recusa `evento=workflow_call` ("não suportado"), e o `reusable-sonar` faz `case push:develop`. Os dois provavelmente sofrem do mesmo problema e precisam de issue própria. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
ci: evento efetivo nos reusáveis — develop smoke, main nada, docs-only e hub-sync voltam a valer [INFRA-67006]
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 4m33s
33654c5aff
Dentro do workflow_call o Forgejo entrega github.event_name = workflow_call
(medido em 20/10/2026: DANI tasks 198659/198931, tmf-platform 199204).
Push de develop e de main rodavam a suíte completa, PR docs-only/G2 e reuso
por tree nunca valiam, o heavy nunca saía do PR e o hub-issue-sync saía
sempre 'não se aplica'.

- ci.yml: passo 'evento' no changes (payload: pull_request.number -> PR,
  before -> push, resto -> dispatch); todo passo usa o output.
- smoke do develop ganha passo heavy (pytest -m heavy; vitest *.heavy.test.*).
- ci-base.yml e hub-issue-sync.yml reconhecem PR pelo payload.
- teste estático barra comparação nova com o evento cru.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tmf-ia merged commit 30cde03562 into develop 2026-10-20 19:49:58 -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!140
No description provided.