ADR 0282 — A pin dos componentes segue a última Release final
- Status: aceito (decisão do dono de 07/11/2026: bot e trava, AT-796)
- Data: 2026-11-08
- Tema:
engenharia - Referencia: usa a dispensa de escada do ADR 0255 e o mesmo ciclo da trava do ADR 0274. A causa foi o Trivy reprovar um broker antigo (ADR 0172). Mantém o
install.shcomo no ADR 0150. Origem: separação do ADR 0252. Explicação em release do produto. Sem RN: é CI e release, não regra do produto.
Contexto
O componentes.json era editado à mão e nenhuma promoção o atualizava. O produto v2.1.x ia sair com componentes antigos e o Trivy reprovou o broker v1.0.0. Uma hora depois de a AT-793 subir as pins, o web v1.2.1 já era a Latest. O runner ficou em v1.0.0 no componentes.json e no RUNNER_TAG do install.sh, com a v1.1.1 publicada.
Decisão
- A pin segue a última Release final (
releases/latest, que ignora rascunho e pré-release) de cada componente, com o asset que o produto consome:imagem.jsonnas imagens e no backup,checksums.txte a assinatura no runner. - O bot é um passo do
regenera-gerados.yml(a cada 6 h e porworkflow_dispatch), que só SOBE a pin, nunca desce.infra.refeimagens.backup.tagandam juntos, e oRUNNER_TAGdoinstall.shmuda no mesmo commit. A mudança cai na PR fixachore/regenera-gerados, o que amplia o escopo da dispensa de escada do ADR 0255 (que não é editado); o merge continua humano. Dispensa mudar obrabo-ci. - A trava é o mesmo script (
scripts/ci/pins-dos-componentes.ts --conferir). Reprova pin atrás, sem Release final, sem asset, backup diferente do infra eRUNNER_TAGdiferente derunner.tag. Roda na PRdev → main(checkPins dos componentes) e norelease.yml, que reprova na tag e só avisa no ensaio. - O
install.shmantém a tag do runner literal. É o hash dele que o manifesto do produto assina; ler ocomponentes.jsonem tempo de execução abriria um segundo download a verificar.
Consequências
- A defasagem máxima entre a Release e a PR do bot é de 6 h; a trava cobre essa janela na promoção.
- Se um componente soltar Release entre o merge na
maine o carimbo, a tag fica sem Release. A recuperação é mergear a PR do bot e promover um patch. - Tornar
Pins dos componentesobrigatório no ruleset damainé gesto do dono (TODO(humano)). - A chave
contractsnão entra: obrabo-contractsnão tem Releases.