Release-Checkliste (npm + macOS)
Nutze pnpm (Node 22+) aus dem Repo-Root. Halte den Working Tree sauber, bevor du taggst oder veröffentlichst.
Operator-Trigger
Wenn der Operator “release” sagt, führe sofort diesen Preflight durch (keine zusätzlichen Fragen, außer du bist blockiert):
- Lies dieses Dokument und
docs/platforms/mac/release.md. - Lade die Umgebungsvariablen aus
~/.profileund bestätige, dassSPARKLE_PRIVATE_KEY_FILE+ App Store Connect Variablen gesetzt sind (SPARKLE_PRIVATE_KEY_FILE sollte in~/.profileliegen). - Nutze Sparkle Keys aus
~/Library/CloudStorage/Dropbox/Backup/Sparkle, falls nötig.
- Version & Metadaten
- Erhöhe die Version in
package.json(z. B.2026.1.29). - Führe
pnpm plugins:syncaus, um Extension-Package-Versionen + Changelogs abzugleichen. - Aktualisiere CLI/Version-Strings:
src/cli/program.tsund den Baileys User Agent insrc/provider-web.ts. - Prüfe die Package-Metadaten (name, description, repository, keywords, license) und dass die
bin-Map aufopenclaw.mjsfüropenclawzeigt. - Falls sich Dependencies geändert haben, führe
pnpm installaus, damitpnpm-lock.yamlaktuell ist.
- Build & Artefakte
- Falls sich A2UI-Inputs geändert haben, führe
pnpm canvas:a2ui:bundleaus und committe die aktualisiertesrc/canvas-host/a2ui/a2ui.bundle.js. -
pnpm run build(regeneriertdist/). - Prüfe, dass das npm Package
filesalle erforderlichendist/*-Ordner enthält (insbesonderedist/node-host/**unddist/acp/**für headless node + ACP CLI). - Bestätige, dass
dist/build-info.jsonexistiert und den erwartetencommit-Hash enthält (das CLI-Banner nutzt dies für npm-Installationen). - Optional:
npm pack --pack-destination /tmpnach dem Build; inspiziere den Tarball-Inhalt und halte ihn für das GitHub Release bereit (committe ihn nicht).
- Changelog & Docs
- Aktualisiere
CHANGELOG.mdmit nutzerorientierten Highlights (erstelle die Datei, falls sie fehlt); halte die Einträge strikt absteigend nach Version sortiert. - Stelle sicher, dass README-Beispiele/Flags dem aktuellen CLI-Verhalten entsprechen (insbesondere neue Befehle oder Optionen).
- Validierung
-
pnpm build -
pnpm check -
pnpm test(oderpnpm test:coverage, falls du Coverage-Output brauchst) -
pnpm release:check(prüft npm pack Inhalte) -
OPENCLAW_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke(Docker Install Smoke Test, schneller Pfad; erforderlich vor Release)- Falls das unmittelbar vorherige npm Release bekanntermaßen defekt ist, setze
OPENCLAW_INSTALL_SMOKE_PREVIOUS=<last-good-version>oderOPENCLAW_INSTALL_SMOKE_SKIP_PREVIOUS=1für den Preinstall-Schritt.
- Falls das unmittelbar vorherige npm Release bekanntermaßen defekt ist, setze
- (Optional) Vollständiger Installer Smoke Test (fügt non-root + CLI Coverage hinzu):
pnpm test:install:smoke - (Optional) Installer E2E (Docker, führt
curl -fsSL https://openclaw.ai/install.sh | bashaus, onboarded, dann echte Tool Calls):pnpm test:install:e2e:openai(benötigtOPENAI_API_KEY)pnpm test:install:e2e:anthropic(benötigtANTHROPIC_API_KEY)pnpm test:install:e2e(benötigt beide Keys; führt beide Provider aus)
- (Optional) Prüfe das Web Gateway stichprobenartig, falls deine Änderungen Send/Receive-Pfade betreffen.
- macOS App (Sparkle)
- Baue + signiere die macOS App und zippe sie für die Distribution.
- Generiere den Sparkle Appcast (HTML-Notes via
scripts/make_appcast.sh) und aktualisiereappcast.xml. - Halte das App-Zip (und optional dSYM-Zip) bereit, um es an das GitHub Release anzuhängen.
- Folge macOS Release für die exakten Befehle und erforderlichen Umgebungsvariablen.
APP_BUILDmuss numerisch + monoton steigend sein (kein-beta), damit Sparkle Versionen korrekt vergleicht.- Falls du notarisierst, nutze das
openclaw-notaryKeychain-Profil, das aus App Store Connect API Umgebungsvariablen erstellt wurde (siehe macOS Release).
- Veröffentlichen (npm)
- Bestätige, dass der Git-Status sauber ist; committe und pushe bei Bedarf.
-
npm login(prüfe 2FA), falls nötig. -
npm publish --access public(nutze--tag betafür Pre-Releases). - Prüfe die Registry:
npm view openclaw version,npm view openclaw dist-tagsundnpx -y [email protected] --version(oder--help).
Troubleshooting (Notizen vom 2.0.0-beta2 Release)
- npm pack/publish hängt oder erzeugt riesigen Tarball: das macOS App Bundle in
dist/OpenClaw.app(und Release-Zips) werden ins Package aufgenommen. Behebe dies, indem du die Publish-Inhalte viapackage.jsonfileswhitelistest (inkludiere dist-Subdirs, docs, skills; exkludiere App Bundles). Bestätige mitnpm pack --dry-run, dassdist/OpenClaw.appnicht aufgelistet ist. - npm auth Web-Loop für dist-tags: nutze Legacy Auth, um einen OTP-Prompt zu bekommen:
NPM_CONFIG_AUTH_TYPE=legacy npm dist-tag add [email protected] latest
npx-Verifizierung schlägt fehl mitECOMPROMISED: Lock compromised: versuche es erneut mit einem frischen Cache:NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y [email protected] --version
- Tag muss nach einem späten Fix neu gesetzt werden: force-update und pushe den Tag, stelle dann sicher, dass die GitHub Release Assets noch passen:
git tag -f vX.Y.Z && git push -f origin vX.Y.Z
- GitHub Release + Appcast
- Tagge und pushe:
git tag vX.Y.Z && git push origin vX.Y.Z(odergit push --tags). - Erstelle/aktualisiere das GitHub Release für
vX.Y.Zmit Titelopenclaw X.Y.Z(nicht nur der Tag); der Body sollte den vollständigen Changelog-Abschnitt für diese Version enthalten (Highlights + Changes + Fixes), inline (keine nackten Links), und darf den Titel nicht im Body wiederholen. - Hänge Artefakte an:
npm packTarball (optional),OpenClaw-X.Y.Z.zipundOpenClaw-X.Y.Z.dSYM.zip(falls generiert). - Committe die aktualisierte
appcast.xmlund pushe sie (Sparkle bezieht Feeds von main). - Führe aus einem sauberen Temp-Verzeichnis (ohne
package.json)npx -y [email protected] send --helpaus, um zu bestätigen, dass Install/CLI-Entrypoints funktionieren. - Verkünde/teile die Release Notes.
Plugin Publish Scope (npm)
Wir veröffentlichen nur existierende npm Plugins unter dem @openclaw/* Scope. Gebündelte Plugins, die nicht auf npm sind, bleiben nur im Disk-Tree (werden trotzdem in extensions/** ausgeliefert).
Prozess zur Ableitung der Liste:
npm search @openclaw --jsonund erfasse die Package-Namen.- Vergleiche mit
extensions/*/package.jsonNamen. - Veröffentliche nur die Schnittmenge (bereits auf npm).
Aktuelle npm Plugin-Liste (bei Bedarf aktualisieren):
- @openclaw/bluebubbles
- @openclaw/diagnostics-otel
- @openclaw/discord
- @openclaw/lobster
- @openclaw/matrix
- @openclaw/msteams
- @openclaw/nextcloud-talk
- @openclaw/nostr
- @openclaw/voice-call
- @openclaw/zalo
- @openclaw/zalouser
Release Notes müssen auch neue optionale gebündelte Plugins hervorheben, die nicht standardmäßig aktiviert sind (Beispiel: tlon).