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 ~/.profile und bestätige, dass SPARKLE_PRIVATE_KEY_FILE + App Store Connect Variablen gesetzt sind (SPARKLE_PRIVATE_KEY_FILE sollte in ~/.profile liegen).
  • Nutze Sparkle Keys aus ~/Library/CloudStorage/Dropbox/Backup/Sparkle, falls nötig.
  1. Version & Metadaten
  • Erhöhe die Version in package.json (z. B. 2026.1.29).
  • Führe pnpm plugins:sync aus, um Extension-Package-Versionen + Changelogs abzugleichen.
  • Aktualisiere CLI/Version-Strings: src/cli/program.ts und den Baileys User Agent in src/provider-web.ts.
  • Prüfe die Package-Metadaten (name, description, repository, keywords, license) und dass die bin-Map auf openclaw.mjs für openclaw zeigt.
  • Falls sich Dependencies geändert haben, führe pnpm install aus, damit pnpm-lock.yaml aktuell ist.
  1. Build & Artefakte
  • Falls sich A2UI-Inputs geändert haben, führe pnpm canvas:a2ui:bundle aus und committe die aktualisierte src/canvas-host/a2ui/a2ui.bundle.js.
  • pnpm run build (regeneriert dist/).
  • Prüfe, dass das npm Package files alle erforderlichen dist/*-Ordner enthält (insbesondere dist/node-host/** und dist/acp/** für headless node + ACP CLI).
  • Bestätige, dass dist/build-info.json existiert und den erwarteten commit-Hash enthält (das CLI-Banner nutzt dies für npm-Installationen).
  • Optional: npm pack --pack-destination /tmp nach dem Build; inspiziere den Tarball-Inhalt und halte ihn für das GitHub Release bereit (committe ihn nicht).
  1. Changelog & Docs
  • Aktualisiere CHANGELOG.md mit 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).
  1. Validierung
  • pnpm build
  • pnpm check
  • pnpm test (oder pnpm 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> oder OPENCLAW_INSTALL_SMOKE_SKIP_PREVIOUS=1 für den Preinstall-Schritt.
  • (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 | bash aus, onboarded, dann echte Tool Calls):
    • pnpm test:install:e2e:openai (benötigt OPENAI_API_KEY)
    • pnpm test:install:e2e:anthropic (benötigt ANTHROPIC_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.
  1. 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 aktualisiere appcast.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_BUILD muss numerisch + monoton steigend sein (kein -beta), damit Sparkle Versionen korrekt vergleicht.
    • Falls du notarisierst, nutze das openclaw-notary Keychain-Profil, das aus App Store Connect API Umgebungsvariablen erstellt wurde (siehe macOS Release).
  1. 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 beta für Pre-Releases).
  • Prüfe die Registry: npm view openclaw version, npm view openclaw dist-tags und npx -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 via package.json files whitelistest (inkludiere dist-Subdirs, docs, skills; exkludiere App Bundles). Bestätige mit npm pack --dry-run, dass dist/OpenClaw.app nicht aufgelistet ist.
  • npm auth Web-Loop für dist-tags: nutze Legacy Auth, um einen OTP-Prompt zu bekommen:
  • npx-Verifizierung schlägt fehl mit ECOMPROMISED: Lock compromised: versuche es erneut mit einem frischen Cache:
  • 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
  1. GitHub Release + Appcast
  • Tagge und pushe: git tag vX.Y.Z && git push origin vX.Y.Z (oder git push --tags).
  • Erstelle/aktualisiere das GitHub Release für vX.Y.Z mit Titel openclaw 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 pack Tarball (optional), OpenClaw-X.Y.Z.zip und OpenClaw-X.Y.Z.dSYM.zip (falls generiert).
  • Committe die aktualisierte appcast.xml und pushe sie (Sparkle bezieht Feeds von main).
  • Führe aus einem sauberen Temp-Verzeichnis (ohne package.json) npx -y [email protected] send --help aus, 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:

  1. npm search @openclaw --json und erfasse die Package-Namen.
  2. Vergleiche mit extensions/*/package.json Namen.
  3. 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).