Lista de verificación de lanzamiento (npm + macOS)
Usepnpm (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.
- Si se sabe que el lanzamiento npm inmediatamente anterior está roto, configure
- (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 [email protected] --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 [email protected] latest
- La verificación de
npxfalla conECOMPROMISED: Lock compromised: reintente con una caché fresca:NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y [email protected] --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 [email protected] 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).
- @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
tlon).