Skip to content

ci(release): confere as libs dentro da imagem e registra o digest - #25

Merged
rodrigofs merged 1 commit into
mainfrom
ci/gates-de-release
Oct 3, 2026
Merged

rodrigofs merged 1 commit into
mainfrom
ci/gates-de-release

Conversation

@rodrigofs

Copy link
Copy Markdown
Contributor

A imagem v1.3.0 saiu com a libacbrnfse64.so oficial (bc72f0c2), sem os patches de docker/acbr-patches/, enquanto o próprio release v1.3.0 anexava a versão patchada (ce5d5f94). Passou pela fumaça, porque ela prova que a lib carrega, não qual lib é.

O cache local tinha o mesmo furo: make acbr-libs-baixar dava o cache por bom quando os arquivos batiam com o SHA256SUMS local, que o acbr-extrair regera a partir do que acabou de extrair. Um cache com a lib sem patch conferia consigo mesmo, e o docker-build seguia com ela.

Mudanças

  • scripts/conferir-libs-imagem.sh <imagem> [cache] compara as cinco .so em /usr/lib da imagem com o SHA256SUMS do cache. make imagem-libs-conferir IMAGEM=... roda o mesmo localmente.
  • publicar.yml roda a conferência depois da fumaça.
  • release.yml baixa as libs do ACBR_LIBS_RELEASE da tag e confere a imagem :<sha> antes de promover. O publicar.yml empurra a imagem antes de testá-la, e o release só sabia que ela existia.
  • release.yml confere que :vX.Y.Z, :vX e :stable ficaram no digest de :<sha>, e as notas passam a trazer o digest (imagem@sha256:..., para fixar no deploy) e o sha da lib de NFS-e.
  • baixar-acbr-libs.sh valida o cache contra o SHA256SUMS do release. Sem acesso ao release, avisa e segue com o cache local, como antes.

Verificação

  • Gate da imagem contra o SHA256SUMS do release v1.3.0: a :v1.3.1 passa; a :v1.3.0 falha com libacbrnfse64.so na imagem é bc72f0c24967ca72, o release declara ce5d5f94068206e7.
  • Download, em quatro cenários: cache certo (nada a baixar); cache com a lib sem patch (rebaixa e termina em ce5d5f94); sem acesso ao release (avisa e usa o cache); diretório vazio (baixa). Cache inconsistente sem acesso falha, e revisão pinada diferente da do release também.
  • Partes novas do release.yml simuladas só com leitura contra o registry: :v1.3.1, :stable e :v1 no digest de :9b39b23; :v1.3.0 detectada como diferente.
  • actionlint: nenhum erro. Dois avisos SC2016 novos, nos printf com crase literal das notas, iguais aos que já existiam. shellcheck limpo nos dois scripts. make test, yaml-valida e openapi-check passam.

O que só o GitHub prova

Os workflows não rodam fora dele. O publicar.yml roda no merge deste PR, e a etapa nova deve passar, porque o runner baixa as libs do zero. O release.yml só roda na próxima tag.

Fora deste PR

Os passos 5 a 7 de "Publicando uma revisão nova" em docs/ACBRLIB.md descrevem um fluxo que já não funciona: com ACBR_LIBS_RELEASE apontando para um release ainda sem anexos, o publicar.yml da main falha e não há :<sha> para promover. A v1.3 precisou de duas versões por isso. Fica para o PR do bump para r48491, onde o fluxo vai ser exercitado.

A v1.3.0 saiu com a lib de NFS-e oficial, sem os patches que o próprio
release anexava, e passou pela fumaça: ela prova que a lib carrega, não
qual lib é. E o make acbr-libs-baixar dava o cache por bom comparando com
o SHA256SUMS local, que o acbr-extrair regera a partir do que extraiu, então
um cache com a lib sem patch conferia consigo mesmo.

scripts/conferir-libs-imagem.sh compara as cinco .so da imagem com o
SHA256SUMS do release. Roda no publicar.yml e no release.yml, que não promove
a imagem se divergir. O release.yml também confere que cada tag nova ficou no
digest de origem e escreve nas notas o digest e o sha da lib de NFS-e.

O download passa a validar o cache contra o SHA256SUMS do release. Sem acesso
a ele, avisa e segue com o cache local.
@rodrigofs
rodrigofs merged commit 761b251 into main Oct 3, 2026
10 checks passed
@rodrigofs
rodrigofs deleted the ci/gates-de-release branch October 3, 2026 20:34
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.

1 participant