Releases
Uma release oficial do AurumCode aponta para um SHA aprovado da main, tem
versão semântica maior que qualquer tag anterior, notas curtas e um exemplo de
instalação fixado nela. O script scripts/release.sh confere tudo isso antes
de criar qualquer coisa; nada é publicado sem a pessoa que publica rodar o
passo publicar com a própria identidade.
As tags históricas v1.x são do produto anterior e não representam o conteúdo
atual da main; a primeira release deste produto é maior que todas elas.
1. A PR de release
Na PR de release (que passa pelo changelog obrigatório como qualquer outra):
- Mova as linhas de
## Unreleasedpara uma seção nova## X.Y.Z - AAAA-MM-DDe escreva as notas com estas três subseções, em uma ou duas páginas:
## 2.0.0 - 2026-10-07
Destaques em uma frase.
### Entregue
- O que quem usa ganha, por capacidade.
### Limites
- O que não foi medido ou ainda não existe.
### Migração do v1
- O que muda para quem vinha do produto v1 e como trocar o workflow.
- Fixe os exemplos de instalação na versão nova (edita os arquivos; você revisa e commita):
scripts/release.sh fixar-exemplos --versao 2.0.0
Isso troca @main por @v2.0.0 em .github/workflows/examples/code-review.yml,
docs/site/workflow.yml (o download do site, que precisa ser idêntico ao
exemplo) e docs/getting-started.md.
2. Preparar (dry-run)
Depois do merge, com o SHA da main:
git fetch origin
scripts/release.sh preparar --sha <SHA completo>
O passo é só leitura. Ele imprime a versão e as notas derivadas do
CHANGELOG.md daquele SHA e recusa (exit 1):
| Recusa | Quando |
|---|---|
fora de origin/main |
O SHA não é ancestral da main. |
nao e maior que vA.B.C |
A versão não é maior que a maior tag existente. |
tag vX.Y.Z ja existe em ... |
A tag já existe apontando para outro SHA. |
sem '### Entregue' (e as outras) |
As notas não têm as três subseções, estão vazias ou passam de 120 linhas. |
nao fixa @vX.Y.Z / diferem |
Os exemplos não fixam a versão ou o download do site difere do exemplo. |
Rodar de novo depois de publicada é idempotente: a tag no mesmo SHA passa.
3. Verificar no consumidor
Antes do anúncio, rode o QA do consumidor (Desenvolvimento e QA) com o SHA da release e guarde a evidência:
tests/consumer/run.sh --repo OWNER/CONSUMIDOR --sha <SHA completo> --evidencia qa-evidencia
4. Publicar
scripts/release.sh publicar --sha <SHA completo> --versao 2.0.0 --evidencia-consumidor qa-evidencia
O passo repete todas as conferências, exige que toda a evidência seja do mesmo
SHA e que o verificador do QA aprove (no container compartilhado), e então cria
a tag anotada v2.0.0 naquele SHA e a release com as notas. Ele usa a
identidade git e o gh já configurados por quem publica: se faltar
user.name, user.email ou a autenticação do gh, ele para (exit 79) e não
define nada. Nunca força push nem move tag; repetir não sobrescreve a release.
Ative "Immutable releases" nas configurações do repositório para que a tag e a release publicadas não possam ser alteradas.
A versão que o AurumCode informa
O binário informa uma versão em aurumcode --version, numa linha dentro dos
detalhes do parecer ("Revisado com AurumCode v2.0.0"), no campo
tool_version do registro de auditoria e em tool.driver.version do SARIF.
Ela vem do argumento de build AURUMCODE_VERSION do Dockerfile, que a
injeta com -ldflags "-X main.version=...". O workflow reutilizável
(.github/workflows/review.yml, nos jobs de revisão e de dependências)
resolve o valor a partir do SHA da ferramenta que está rodando
(job.workflow_sha), no passo "Resolve AurumCode version":
| Situação | Versão |
|---|---|
Uma tag de release vX.Y.Z aponta exatamente para o SHA |
a tag, por exemplo v2.0.0 |
Nenhuma tag de release aponta para o SHA (@main, um SHA fixado) |
os 12 primeiros caracteres do SHA, por exemplo 0123456789ab |
| A consulta das tags falha | os 12 primeiros caracteres do SHA (o job não falha por isso) |
A consulta lê só a lista de tags do repositório da ferramenta
(git ls-remote --tags), sem baixar histórico. O smoke de provedores
(.github/workflows/providers-smoke.yml) usa o mesmo passo com o SHA do
próprio checkout.
Um build local sem o argumento (docker build ., os tutoriais, go build)
fica com a versão dev. Com dev o parecer não ganha a linha de versão e a
auditoria não grava tool_version, então as saídas gravadas dos tutoriais
não mudam; o SARIF continua com "version": "dev". Para testar uma versão
localmente:
docker build --build-arg AURUMCODE_VERSION=v9.9.9 --tag aurumcode-local .