Liste de controle de publication (npm + macOS)
Utilisezpnpm (Node 22+) depuis la racine du depot. Gardez l’arborescence de travail propre avant de taguer/publier.
Declencheur operateur
Lorsque l’operateur dit « release », effectuez immediatement ce precontrole (pas de questions supplementaires sauf blocage) :- Lisez ce document et
docs/platforms/mac/release.md. - Chargez l’environnement depuis
~/.profileet confirmez queSPARKLE_PRIVATE_KEY_FILE+ les variables App Store Connect sont definies (SPARKLE_PRIVATE_KEY_FILE doit se trouver dans~/.profile). - Utilisez les cles Sparkle depuis
~/Library/CloudStorage/Dropbox/Backup/Sparklesi necessaire.
- Version & metadonnees
- Incrementer la version de
package.json(ex.2026.1.29). - Executer
pnpm plugins:syncpour aligner les versions des packages d’extensions + les journaux de modifications. - Mettre a jour les chaines CLI/version :
src/cli/program.tset l’agent utilisateur Baileys danssrc/provider-web.ts. - Confirmer les metadonnees du package (nom, description, depot, mots-cles, licence) et que le mapping
binpointe versopenclaw.mjspouropenclaw. - Si les dependances ont change, executer
pnpm installafin quepnpm-lock.yamlsoit a jour.
- Build & artefacts
- Si les entrees A2UI ont change, executer
pnpm canvas:a2ui:bundleet commiter toute mise a jour desrc/canvas-host/a2ui/a2ui.bundle.js. -
pnpm run build(regeneredist/). - Verifier que le package npm
filesinclut tous les dossiersdist/*requis (notammentdist/node-host/**etdist/acp/**pour node headless + le CLI ACP). - Confirmer que
dist/build-info.jsonexiste et inclut le hashcommitattendu (la banniere CLI l’utilise pour les installations npm). - Optionnel :
npm pack --pack-destination /tmpapres le build ; inspectez le contenu du tarball et gardez-le a disposition pour la release GitHub (ne pas le commiter).
- Changelog & documentation
- Mettre a jour
CHANGELOG.mdavec les points saillants cote utilisateur (creer le fichier s’il manque) ; conserver un ordre strictement decroissant par version. - S’assurer que les exemples/flags du README correspondent au comportement actuel du CLI (notamment les nouvelles commandes ou options).
- Validation
-
pnpm build -
pnpm check -
pnpm test(oupnpm test:coveragesi vous avez besoin de la couverture) -
pnpm release:check(verifie le contenu de npm pack) -
OPENCLAW_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke(test fumee d’installation Docker, voie rapide ; requis avant publication)- Si la version npm immediate precedente est connue comme defectueuse, definir
OPENCLAW_INSTALL_SMOKE_PREVIOUS=<last-good-version>ouOPENCLAW_INSTALL_SMOKE_SKIP_PREVIOUS=1pour l’etape de preinstall.
- Si la version npm immediate precedente est connue comme defectueuse, definir
- (Optionnel) Test fumee complet de l’installateur (ajoute couverture non-root + CLI) :
pnpm test:install:smoke - (Optionnel) E2E de l’installateur (Docker, execute
curl -fsSL https://openclaw.ai/install.sh | bash, prise en main, puis appels d’outils reels) :pnpm test:install:e2e:openai(necessiteOPENAI_API_KEY)pnpm test:install:e2e:anthropic(necessiteANTHROPIC_API_KEY)pnpm test:install:e2e(necessite les deux cles ; execute les deux fournisseurs)
- (Optionnel) Verifier ponctuellement la Gateway (passerelle) web si vos changements affectent les chemins d’envoi/reception.
- Application macOS (Sparkle)
- Builder + signer l’application macOS, puis la zipper pour la distribution.
- Generer l’appcast Sparkle (notes HTML via
scripts/make_appcast.sh) et mettre a jourappcast.xml. - Garder le zip de l’app (et le zip dSYM optionnel) pret a etre joint a la release GitHub.
- Suivre macOS release pour les commandes exactes et les variables d’environnement requises.
APP_BUILDdoit etre numerique et monotone (pas de-beta) afin que Sparkle compare correctement les versions.- En cas de notarisation, utiliser le profil de trousseau
openclaw-notarycree a partir des variables d’environnement API App Store Connect (voir macOS release).
- Publication (npm)
- Confirmer que l’etat git est propre ; commiter et pousser si necessaire.
-
npm login(verifier la 2FA) si necessaire. -
npm publish --access public(utiliser--tag betapour les pre-releases). - Verifier le registre :
npm view openclaw version,npm view openclaw dist-tags, etnpx -y [email protected] --version(ou--help).
Depannage (notes de la release 2.0.0-beta2)
- npm pack/publish se bloque ou produit un tarball enorme : le bundle de l’application macOS dans
dist/OpenClaw.app(et les zips de release) est inclus dans le package. Corriger en listant explicitement le contenu publie viapackage.jsonfiles(inclure les sous-dossiers dist, docs, skills ; exclure les bundles d’app). Confirmer avecnpm pack --dry-runquedist/OpenClaw.appn’est pas liste. - Boucle d’authentification npm web pour les dist-tags : utiliser l’authentification legacy pour obtenir une invite OTP :
NPM_CONFIG_AUTH_TYPE=legacy npm dist-tag add [email protected] latest
- La verification
npxechoue avecECOMPROMISED: Lock compromised: reessayer avec un cache neuf :NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y [email protected] --version
- Le tag doit etre repointe apres une correction tardive : forcer la mise a jour et pousser le tag, puis s’assurer que les artefacts de la release GitHub correspondent toujours :
git tag -f vX.Y.Z && git push -f origin vX.Y.Z
- Release GitHub + appcast
- Taguer et pousser :
git tag vX.Y.Z && git push origin vX.Y.Z(ougit push --tags). - Creer/rafraichir la release GitHub pour
vX.Y.Zavec le titreopenclaw X.Y.Z(pas seulement le tag) ; le corps doit inclure la section de changelog complete pour cette version (Highlights + Changes + Fixes), en ligne (sans liens nus), et ne doit pas repeter le titre dans le corps. - Joindre les artefacts : tarball
npm pack(optionnel),OpenClaw-X.Y.Z.zip, etOpenClaw-X.Y.Z.dSYM.zip(si genere). - Commiter le
appcast.xmlmis a jour et le pousser (Sparkle alimente depuis main). - Depuis un repertoire temporaire propre (sans
package.json), executernpx -y [email protected] send --helppour confirmer que l’installation et les points d’entree du CLI fonctionnent. - Annoncer/partager les notes de release.
Perimetre de publication des plugins (npm)
Nous ne publions que les plugins npm existants sous le scope@openclaw/*. Les
plugins bundles qui ne sont pas sur npm restent uniquement dans l’arborescence disque
(toujours livres dans extensions/**).
Processus pour etablir la liste :
npm search @openclaw --jsonet capturer les noms de packages.- Comparer avec les noms
extensions/*/package.json. - Publier uniquement l’intersection (deja sur 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).