Checklist de Lançamento (npm + macOS)¶
Use pnpm (Node 22+) a partir da raiz do repositório. Mantenha a árvore de trabalho limpa antes de marcar/publicar.
Gatilho do operador¶
Quando o operador disser “release”, faça imediatamente este preflight (sem perguntas extras, a menos que esteja bloqueado):
- Leia este documento e
docs/platforms/mac/release.md. - Carregue as variáveis de ambiente de
~/.profilee confirme queSPARKLE_PRIVATE_KEY_FILE+ as variáveis do App Store Connect estão definidas (SPARKLE_PRIVATE_KEY_FILE deve ficar em~/.profile). - Use as chaves do Sparkle de
~/Library/CloudStorage/Dropbox/Backup/Sparklese necessário.
- Versão & metadados
- [ ] Atualize a versão de
package.json(por exemplo,2026.1.29). - [ ] Execute
pnpm plugins:syncpara alinhar as versões dos pacotes de extensões + changelogs. - [ ] Atualize as strings de versão da CLI:
src/cli/program.tse o user agent do Baileys emsrc/provider-web.ts. - [ ] Confirme os metadados do pacote (nome, descrição, repositório, palavras-chave, licença) e se o mapa de
binaponta paraopenclaw.mjsparaopenclaw. - [ ] Se as dependências mudaram, execute
pnpm installpara quepnpm-lock.yamlesteja atual.
- Build & artefatos
- [ ] Se as entradas do A2UI mudaram, execute
pnpm canvas:a2ui:bundlee faça commit de qualquersrc/canvas-host/a2ui/a2ui.bundle.jsatualizado. - [ ]
pnpm run build(regeneradist/). - [ ] Verifique se o pacote npm
filesinclui todas as pastasdist/*necessárias (notavelmentedist/node-host/**edist/acp/**para node headless + ACP CLI). - [ ] Confirme que
dist/build-info.jsonexiste e inclui o hashcommitesperado (o banner da CLI usa isso para instalações via npm). - [ ] Opcional:
npm pack --pack-destination /tmpapós o build; inspecione o conteúdo do tarball e mantenha-o à mão para o release no GitHub (não faça commit).
- Changelog & docs
- [ ] Atualize
CHANGELOG.mdcom destaques voltados ao usuario (crie o arquivo se não existir); mantenha as entradas estritamente em ordem decrescente por versão. - [ ] Garanta que exemplos/flags do README correspondam ao comportamento atual da CLI (notavelmente novos comandos ou opções).
- Validação
- [ ]
pnpm build - [ ]
pnpm check - [ ]
pnpm test(oupnpm test:coveragese voce precisar de saída de cobertura) - [ ]
pnpm release:check(verifica o conteúdo do npm pack) - [ ]
OPENCLAW_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke(smoke test de instalação via Docker, caminho rápido; obrigatório antes do lançamento) - Se o lançamento npm imediatamente anterior for conhecido como quebrado, defina
OPENCLAW_INSTALL_SMOKE_PREVIOUS=<last-good-version>ouOPENCLAW_INSTALL_SMOKE_SKIP_PREVIOUS=1para a etapa de preinstall. - [ ] (Opcional) Smoke completo do instalador (adiciona cobertura de não-root + CLI):
pnpm test:install:smoke - [ ] (Opcional) E2E do instalador (Docker, executa
curl -fsSL https://openclaw.ai/install.sh | bash, faz onboarding e depois executa chamadas reais de ferramentas): pnpm test:install:e2e:openai(requerOPENAI_API_KEY)pnpm test:install:e2e:anthropic(requerANTHROPIC_API_KEY)pnpm test:install:e2e(requer ambas as chaves; executa ambos os provedores)- [ ] (Opcional) Faça um spot-check do web gateway se suas mudanças afetarem caminhos de envio/recebimento.
- App macOS (Sparkle)
- [ ] Faça o build + assinatura do app macOS e depois compacte em zip para distribuição.
- [ ] Gere o appcast do Sparkle (notas em HTML via
scripts/make_appcast.sh) e atualizeappcast.xml. - [ ] Mantenha o zip do app (e o zip dSYM opcional) prontos para anexar ao release do GitHub.
- [ ] Siga macOS release para os comandos exatos e as variáveis de ambiente necessárias.
APP_BUILDdeve ser numérico + monotônico (sem-beta) para que o Sparkle compare versões corretamente.- Se for notarizar, use o perfil de chaveiro
openclaw-notarycriado a partir das variáveis de ambiente da API do App Store Connect (veja macOS release).
- Publicar (npm)
- [ ] Confirme que o status do git está limpo; faça commit e push conforme necessário.
- [ ]
npm login(verifique o 2FA), se necessário. - [ ]
npm publish --access public(use--tag betapara pré-lançamentos). - [ ] Verifique o registry:
npm view openclaw version,npm view openclaw dist-tagsenpx -y openclaw@X.Y.Z --version(ou--help).
Solução de problemas (notas do lançamento 2.0.0-beta2)¶
- npm pack/publish trava ou produz um tarball enorme: o bundle do app macOS em
dist/OpenClaw.app(e zips de release) é varrido para dentro do pacote. Corrija fazendo whitelist do conteúdo publicado viapackage.jsonfiles(inclua subdirs dist, docs, skills; exclua bundles de app). Confirme comnpm pack --dry-runquedist/OpenClaw.appnão está listado. - Loop de autenticação web do npm para dist-tags: use autenticação legada para obter o prompt de OTP:
NPM_CONFIG_AUTH_TYPE=legacy npm dist-tag add openclaw@X.Y.Z latest- Falha na verificação de
npxcomECOMPROMISED: Lock compromised: tente novamente com um cache novo: NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y openclaw@X.Y.Z --version- Tag precisa ser repontada após um ajuste tardio: force a atualização e faça push da tag, depois garanta que os assets do release no GitHub ainda correspondam:
git tag -f vX.Y.Z && git push -f origin vX.Y.Z
- Release no GitHub + appcast
- [ ] Marque a tag e faça push:
git tag vX.Y.Z && git push origin vX.Y.Z(ougit push --tags). - [ ] Crie/atualize o release do GitHub para
vX.Y.Zcom títuloopenclaw X.Y.Z(não apenas a tag); o corpo deve incluir a seção completa do changelog para essa versão (Destaques + Mudanças + Correções), inline (sem links soltos), e não deve repetir o título dentro do corpo. - [ ] Anexe os artefatos: tarball
npm pack(opcional),OpenClaw-X.Y.Z.zipeOpenClaw-X.Y.Z.dSYM.zip(se gerado). - [ ] Faça commit do
appcast.xmlatualizado e faça push (o Sparkle consome a partir da main). - [ ] A partir de um diretório temporário limpo (sem
package.json), executenpx -y openclaw@X.Y.Z send --helppara confirmar que a instalação/entrypoints da CLI funcionam. - [ ] Anuncie/compartilhe as notas de lançamento.
Escopo de publicação de plugins (npm)¶
Publicamos apenas plugins npm existentes sob o escopo @openclaw/*. Plugins
empacotados que não estão no npm permanecem apenas na árvore do disco (ainda enviados em
extensions/**).
Processo para derivar a lista:
- Execute
npm search @openclaw --jsone capture os nomes dos pacotes. - Compare com os nomes em
extensions/*/package.json. - Publique apenas a interseção (já existentes no npm).
Lista atual de plugins npm (atualize conforme necessário):
- @openclaw/bluebubbles
- @openclaw/diagnostics-otel
- @openclaw/discord
- @openclaw/feishu
- @openclaw/lobster
- @openclaw/matrix
- @openclaw/msteams
- @openclaw/nextcloud-talk
- @openclaw/nostr
- @openclaw/voice-call
- @openclaw/zalo
- @openclaw/zalouser
As notas de lançamento também devem destacar novos plugins empacotados opcionais que não
ficam ativados por padrão (exemplo: tlon).