Lista de verificación de lanzamiento (npm + macOS)¶
Use pnpm (Node 22+) desde la raíz del repositorio. Mantenga el árbol de trabajo limpio antes de etiquetar/publicar.
Activador del operador¶
Cuando el operador diga “release”, haga inmediatamente este preflight (sin preguntas adicionales a menos que esté bloqueado):
- Lea este documento y
docs/platforms/mac/release.md. - Cargue las variables de entorno desde
~/.profiley confirme queSPARKLE_PRIVATE_KEY_FILE+ las variables de App Store Connect estén configuradas (SPARKLE_PRIVATE_KEY_FILE debe vivir en~/.profile). - Use las claves de Sparkle de
~/Library/CloudStorage/Dropbox/Backup/Sparklesi es necesario.
- Versión y metadatos
- [ ] Aumente la versión de
package.json(p. ej.,2026.1.29). - [ ] Ejecute
pnpm plugins:syncpara alinear las versiones de los paquetes de extensiones + los changelogs. - [ ] Actualice las cadenas de CLI/versión:
src/cli/program.tsy el user agent de Baileys ensrc/provider-web.ts. - [ ] Confirme los metadatos del paquete (nombre, descripción, repositorio, palabras clave, licencia) y que el mapa de
binapunte aopenclaw.mjsparaopenclaw. - [ ] Si cambiaron dependencias, ejecute
pnpm installpara quepnpm-lock.yamlesté actualizado.
- Build y artefactos
- [ ] Si cambiaron las entradas de A2UI, ejecute
pnpm canvas:a2ui:bundley haga commit de cualquiersrc/canvas-host/a2ui/a2ui.bundle.jsactualizado. - [ ]
pnpm run build(regeneradist/). - [ ] Verifique que el paquete npm
filesincluya todas las carpetasdist/*requeridas (en particulardist/node-host/**ydist/acp/**para node sin interfaz + la CLI de ACP). - [ ] Confirme que
dist/build-info.jsonexista e incluya el hashcommitesperado (el banner de la CLI lo usa para instalaciones de npm). - [ ] Opcional:
npm pack --pack-destination /tmpdespués del build; inspeccione el contenido del tarball y consérvelo para el release de GitHub (no lo haga commit).
- Changelog y docs
- [ ] Actualice
CHANGELOG.mdcon destacados orientados al usuario (cree el archivo si falta); mantenga las entradas estrictamente en orden descendente por versión. - [ ] Asegúrese de que los ejemplos/flags del README coincidan con el comportamiento actual de la CLI (en particular comandos u opciones nuevas).
- Validación
- [ ]
pnpm build - [ ]
pnpm check - [ ]
pnpm test(opnpm test:coveragesi necesita salida de cobertura) - [ ]
pnpm release:check(verifica el contenido de npm pack) - [ ]
OPENCLAW_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke(prueba de humo de instalación en Docker, ruta rápida; requerida antes del lanzamiento) - Si se sabe que el lanzamiento npm inmediatamente anterior está roto, configure
OPENCLAW_INSTALL_SMOKE_PREVIOUS=<last-good-version>oOPENCLAW_INSTALL_SMOKE_SKIP_PREVIOUS=1para el paso de preinstall. - [ ] (Opcional) Prueba de humo del instalador completo (agrega cobertura de usuario no root + CLI):
pnpm test:install:smoke - [ ] (Opcional) E2E del instalador (Docker, ejecuta
curl -fsSL https://openclaw.ai/install.sh | bash, hace onboarding y luego ejecuta llamadas reales de herramientas): pnpm test:install:e2e:openai(requiereOPENAI_API_KEY)pnpm test:install:e2e:anthropic(requiereANTHROPIC_API_KEY)pnpm test:install:e2e(requiere ambas claves; ejecuta ambos proveedores)- [ ] (Opcional) Verifique puntualmente el Gateway web si sus cambios afectan rutas de envío/recepción.
- App macOS (Sparkle)
- [ ] Compile y firme la app macOS, luego comprímala en zip para distribución.
- [ ] Genere el appcast de Sparkle (notas HTML vía
scripts/make_appcast.sh) y actualiceappcast.xml. - [ ] Mantenga listo el zip de la app (y el zip dSYM opcional) para adjuntarlo al release de GitHub.
- [ ] Siga macOS release para los comandos exactos y las variables de entorno requeridas.
APP_BUILDdebe ser numérico y monótono (sin-beta) para que Sparkle compare versiones correctamente.- Si va a notarizar, use el perfil de llavero
openclaw-notarycreado a partir de las variables de entorno de la API de App Store Connect (ver macOS release).
- Publicar (npm)
- [ ] Confirme que el estado de git esté limpio; haga commit y push según sea necesario.
- [ ]
npm login(verifique 2FA) si es necesario. - [ ]
npm publish --access public(use--tag betapara pre-releases). - [ ] Verifique el registro:
npm view openclaw version,npm view openclaw dist-tagsynpx -y openclaw@X.Y.Z --version(o--help).
Solución de problemas (notas del lanzamiento 2.0.0-beta2)¶
- npm pack/publish se cuelga o produce un tarball enorme: el bundle de la app macOS en
dist/OpenClaw.app(y los zips de release) se incluyen en el paquete. Corríjalo permitiendo explícitamente el contenido de publicación víapackage.jsonfiles(incluya subdirectorios dist, docs, skills; excluya bundles de apps). Confirme connpm pack --dry-runquedist/OpenClaw.appno esté listado. - bucle de npm auth web para dist-tags: use autenticación legacy para obtener un prompt de OTP:
NPM_CONFIG_AUTH_TYPE=legacy npm dist-tag add openclaw@X.Y.Z latest- La verificación de
npxfalla conECOMPROMISED: Lock compromised: reintente con una caché fresca: NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y openclaw@X.Y.Z --version- La etiqueta necesita re-apuntarse tras un arreglo tardío: fuerce la actualización y empuje la etiqueta, luego asegúrese de que los artefactos del release de GitHub aún coincidan:
git tag -f vX.Y.Z && git push -f origin vX.Y.Z
- Release de GitHub + appcast
- [ ] Etiquete y haga push:
git tag vX.Y.Z && git push origin vX.Y.Z(ogit push --tags). - [ ] Cree/actualice el release de GitHub para
vX.Y.Zcon títuloopenclaw X.Y.Z(no solo la etiqueta); el cuerpo debe incluir la sección completa del changelog para esa versión (Destacados + Cambios + Correcciones), en línea (sin enlaces sueltos), y no debe repetir el título dentro del cuerpo. - [ ] Adjunte artefactos: tarball
npm pack(opcional),OpenClaw-X.Y.Z.zipyOpenClaw-X.Y.Z.dSYM.zip(si se generó). - [ ] Haga commit del
appcast.xmlactualizado y haga push (Sparkle se alimenta desde main). - [ ] Desde un directorio temporal limpio (sin
package.json), ejecutenpx -y openclaw@X.Y.Z send --helppara confirmar que la instalación/los entrypoints de la CLI funcionan. - [ ] Anuncie/comparta las notas del lanzamiento.
Alcance de publicación de plugins (npm)¶
Solo publicamos plugins npm existentes bajo el scope @openclaw/*. Los plugins
incluidos que no están en npm permanecen solo en el árbol de disco (aun así se envían en
extensions/**).
Proceso para derivar la lista:
npm search @openclaw --jsony capture los nombres de los paquetes.- Compare con los nombres de
extensions/*/package.json. - Publique solo la intersección (ya en npm).
Lista actual de plugins npm (actualice según sea necesario):
- @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
Las notas del lanzamiento también deben mencionar nuevos plugins opcionales incluidos que no
están activados por defecto (ejemplo: tlon).