Quando Usar
Use esta skill ao preparar, publicar ou verificar um lançamento do gentle-pi.
Regras Rígidas
- Não publique
gentle-pino npm a partir de uma máquina local. - A publicação no npm DEVE passar pelo workflow do GitHub Actions
.github/workflows/publish.ymlpara que proveniência, proteção de ambiente e credenciais de registro sejam controladas pelo GitHub. - Despache a definição confiável do workflow a partir do
mainpadrão protegido, nunca de uma tag de release. Sua única entrada é a tag de versão anotada exata. - Use uma árvore de trabalho limpa para commits de release. Não empacote arquivos locais não relacionados ou artefatos temporários.
- Os resultados da revisão são informativos. A entrega do release segue a política comum do repositório e não deve ser bloqueada, autorizada ou reescrita por RDD.
- Nunca infira o alvo da tag de release a partir do
HEADlocal; use o commit recém-buscado deorigin/maine as proteções normais de release do repositório. - Nunca pule a verificação do pacote. O workflow de publicação executa a verificação novamente, mas a validação local ainda deve passar antes da criação da tag.
Procedimento de Release
-
Inspecione o estado
git status --short git fetch origin main --tags git log --oneline --decorate --max-count=5 origin/main -
Prepare o commit de release
- Aplique apenas as alterações pretendidas.
- Atualize a versão no
package.jsonpara a próxima versão semântica. - Mantenha alterações no lockfile fora, a menos que a resolução de dependências realmente tenha mudado.
-
Verifique localmente
pnpm test node scripts/verify-package-files.mjs npm pack --dry-runnpm pack --dry-runverifica o conteúdo do pacote e scripts de ciclo de vida sem entrar em um caminho de publicação. -
Faça commit e push
git add <arquivos-pretendidos> git commit -m "<tipo(escopo): alteração pronta para release>" git push origin HEAD:main git fetch origin main --tags -
Crie e verifique a tag de versão exata
version="$(node -p "require('./package.json').version")" tag="v${version}" release_sha="$(git rev-parse 'origin/main^{commit}')" test "$(git rev-parse 'HEAD^{commit}')" = "${release_sha}" test -z "$(git ls-remote --tags origin "refs/tags/${tag}")" git tag -a "${tag}" "${release_sha}" -m "gentle-pi ${tag}" test "$(git rev-parse "${tag}^{commit}")" = "${release_sha}" git fetch origin main test "$(git rev-parse 'origin/main^{commit}')" = "${release_sha}" git push origin "refs/tags/${tag}" git fetch --no-tags origin "refs/tags/${tag}" test "$(git rev-parse 'FETCH_HEAD^{commit}')" = "${release_sha}" gh release create "${tag}" \ --repo Gentleman-Programming/gentle-pi \ --verify-tag \ --title "gentle-pi ${tag}" \ --notes "<notas do release>"Não recrie a tag ou sobrescreva uma versão existente. O alvo da tag vem do commit recém-buscado e imutável de
origin/main, não de um branch local ambiente. -
Publique npm via GitHub Actions
version="$(node -p "require('./package.json').version")" tag="v${version}" gh workflow run publish.yml \ --repo Gentleman-Programming/gentle-pi \ --ref main \ -f tag="${tag}"A definição do workflow sempre vem do
mainpadrão protegido. Ela aceita apenas uma tagvSemVerexata, busca a tag anotada remota e omainremoto atual, e exige que o commit da tag, o commit do workflow de despacho, o checkout e a versão dopackage.jsoncoincidam. Ela consulta novamente a tag remota e omainimediatamente antes da publicação npm, deriva a dist-tag internamente e usa OIDC confiável com proveniência.Acompanhe a execução e falhe o release se falhar:
gh run list --repo Gentleman-Programming/gentle-pi --workflow publish.yml --limit 3 gh run watch <run-id> --repo Gentleman-Programming/gentle-pi --exit-status -
Verifique no npm
npm view gentle-pi@<version> version --registry=https://registry.npmjs.org/ npm dist-tag ls gentle-pi --registry=https://registry.npmjs.org/
Tratamento de Falhas
-
Uma falha de publicação é tratada através da política comum do repositório. Ela não reabre ou altera uma linhagem de revisão.
-
Nunca tente ou repita
npm publishlocalmente. Redespache a partir domainconfiável somente quando a mesma tag ainda apontar para omainremoto atual e a falha foi exclusivamente de publicação. -
Se o
mainremoto avançar, não mova ou recrie a tag existente. Prepare um novo commit/versão de release e crie uma nova tag de versão anotada. -
Se o workflow falhar, inspecione os logs com:
gh run view <run-id> --repo Gentleman-Programming/gentle-pi --log -
Se a verificação npm estiver temporariamente desatualizada após um workflow bem-sucedido, verifique a versão exata primeiro (
npm view gentle-pi@<version> version) antes de assumir que a publicação falhou.
Contrato de Saída
Relate:
- SHA do commit enviado para
main. - Tag de versão exata e seu SHA de commit.
- URL do release no GitHub.
- URL da execução do workflow de publicação e conclusão.
- Versão exata no npm e a dist-tag derivada do workflow (
latest,betaounext). - Quaisquer acompanhamentos ou avisos restantes.