Skip to content

fix(ci): ci_invariants.sh não quebra com on: string/lista nem engole flag errada - #27

Merged
hbgit merged 1 commit into
developfrom
fix/ci-invariants-parsing
Sep 30, 2026
Merged

hbgit merged 1 commit into
developfrom
fix/ci-invariants-parsing

Conversation

@vinimartinsufrr

Copy link
Copy Markdown
Collaborator

O que muda

Dois defeitos de robustez em scripts/qa/ci_invariants.sh:

  • on: como string ou lista (on: push, on: [push, pull_request]) fazia gatilhos.get(...) quebrar com AttributeError — traceback do Python em vez de FALHA: .... _normaliza_gatilhos() agora converte pra dict (sem perder informação: as duas formas curtas não carregam sub-configuração mesmo) e registra uma FALHA explícita pra qualquer outro tipo inesperado, sem nunca deixar a exceção estourar.
  • Flag de linha de comando desconhecida era ignorada em silêncio (ok/exit 0). Um typo como --checks-obrigatorio (sem o S) alimentaria uma saída vazia num PUT de proteção de branch, e o erro apareceria longe da causa. Os argumentos agora são validados antes de qualquer trabalho: flag desconhecida sai 2 com mensagem de uso.

Por quê

Item adiado da revisão final das PRs #16/#18 (auditoria de CI de 2026-09-28) — issue #22.

Como testar

python3 -m pip install pyyaml   # se ainda não tiver

# regressão: continua limpo contra o ci.yml real
./scripts/qa/ci_invariants.sh
./scripts/qa/ci_invariants.sh --checks-obrigatorios

# o typo exato do corpo da issue
./scripts/qa/ci_invariants.sh --checks-obrigatorio   # esperado: exit 2, mensagem de uso

# on: como string/lista/tipo inesperado, via fixture sintética (não mexe no ci.yml real)
tmp="$(mktemp -d)"
printf 'on: push\njobs:\n  workflow-lint:\n    runs-on: ubuntu-24.04\n' > "$tmp/a.yml"
CI_INVARIANTS_WORKFLOW="$tmp/a.yml" ./scripts/qa/ci_invariants.sh   # esperado: FALHA(s) específicas, nunca traceback

Fora do escopo

Os outros gaps documentados (issues #19, #20, #21, #23, #24) — não tocados aqui.

Nota sobre a PR #26 (issue #20)

As duas correções (CI_INVARIANTS_WORKFLOW para apontar a um workflow sintético em testes, e PYTHONIOENCODING=utf-8) já existem na PR #26, ainda não mesclada. Como as duas PRs mexem nas mesmas linhas por motivos independentes, é esperado precisar de um rebase de uma sobre a outra antes do merge da segunda — nenhuma das duas depende da outra funcionalmente.

Closes #22

🤖 Generated with Claude Code

…flag errada

Dois defeitos de robustez em scripts/qa/ci_invariants.sh:

- gatilhos = wf.get('on', wf.get(True)) or {} assumia dict. `on: push`
  (string) ou `on: [push, pull_request]` (lista) — as duas formas curtas que
  o GitHub Actions aceita — viravam str/list, e o primeiro .get() de
  check_gatilhos quebrava com AttributeError: traceback do Python em vez de
  FALHA: ..., a causa real longe do sintoma. _normaliza_gatilhos() agora
  converte string/lista em dict (sem sub-configuração mesmo, então os checks
  existentes acusam o que já acusariam: push sem branches, sem
  workflow_dispatch etc.) e registra FALHA explícita pra qualquer outro tipo,
  em vez de deixar o AttributeError estourar.

- sys.argv[2:] só procurava --checks-obrigatorios; qualquer flag desconhecida
  (ex.: o typo --checks-obrigatorio, sem o S) era ignorada em silêncio e o
  script saía com "ok"/exit 0. Quem chama com --checks-obrigatorios
  normalmente alimenta a saída direto num PUT da API de proteção de branch —
  "ok" sem o JSON esperado quebra ali, longe da causa. Os argumentos agora
  são validados ANTES de qualquer trabalho: flag desconhecida sai 2 com
  mensagem de uso.

De passagem, adiciona CI_INVARIANTS_WORKFLOW (aponta pra um workflow
sintético em vez do real, usado só para testar as duas correções acima com
fixtures) e PYTHONIOENCODING=utf-8 (sem isso, mensagens de falha com acento
saem corrompidas em locale não-UTF-8 — sem efeito nos runners Linux do CI,
mas necessário pra validar localmente neste Windows). Mesmos dois ajustes já
feitos na PR #26 (issue #20), que ainda não foi mesclada — como as duas PRs
mexem nas mesmas linhas por motivos independentes, é esperado precisarem de
um rebase uma sobre a outra antes do merge da segunda.

Validado manualmente com fixtures sintéticas (sem mudar .github/workflows/ci.yml):
`on: push`, `on: [push, pull_request]` e `on: 42` não quebram mais (FALHA
específica ou nenhuma, exit 1 quando há falha, nunca traceback);
`--checks-obrigatorios --foo` e `--checks-obrigatorio` (typo) saem 2 com
mensagem de uso. Script continua ok contra o ci.yml real (dict) e
--checks-obrigatorios continua devolvendo os 8 checks certos.

CLAUDE.md e AGENTS.md atualizados: #22 sai da lista de lacunas conhecidas da
guarda.

Closes #22

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@hbgit
hbgit merged commit 6a66c1b into develop Sep 30, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants