fix(ci): ci_invariants.sh não quebra com on: string/lista nem engole flag errada - #27
Merged
Merged
Conversation
…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>
This was referenced Oct 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que muda
Dois defeitos de robustez em
scripts/qa/ci_invariants.sh:on:como string ou lista (on: push,on: [push, pull_request]) faziagatilhos.get(...)quebrar comAttributeError— traceback do Python em vez deFALHA: ...._normaliza_gatilhos()agora converte pra dict (sem perder informação: as duas formas curtas não carregam sub-configuração mesmo) e registra umaFALHAexplícita pra qualquer outro tipo inesperado, sem nunca deixar a exceção estourar.ok/exit 0). Um typo como--checks-obrigatorio(sem o S) alimentaria uma saída vazia numPUTde proteção de branch, e o erro apareceria longe da causa. Os argumentos agora são validados antes de qualquer trabalho: flag desconhecida sai2com 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
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_WORKFLOWpara apontar a um workflow sintético em testes, ePYTHONIOENCODING=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