Release-tjekliste (npm + macOS)¶
Brug pnpm (Node 22+) fra repo roden. Hold arbejdstræet rent før tagging/publicering.
Operator-trigger¶
Når operatøren siger “release”, skal du straks lave denne preflight (ingen ekstra spørgsmål medmindre blokeret):
- Læs dette dokument og
docs/platforms/mac/release.md. - Indlæs env fra
~/.profileog bekræft, atSPARKLE_PRIVATE_KEY_FILE+ App Store Connect-variabler er sat (SPARKLE_PRIVATE_KEY_FILE skal ligge i~/.profile). - Brug Sparkle-nøgler fra
~/Library/CloudStorage/Dropbox/Backup/Sparklehvis nødvendigt.
- Version & metadata
- [ ] Forøg
package.json-versionen (fx2026.1.29). - [ ] Kør
pnpm plugins:syncfor at afstemme versionsnumre og changelogs for extensions. - [ ] Opdatér CLI-/versionsstrenge:
src/cli/program.tsog Baileys user agent isrc/provider-web.ts. - [ ] Bekræft pakke-metadata (navn, beskrivelse, repository, keywords, licens), og at
bin-mappet peger påopenclaw.mjsforopenclaw. - [ ] Hvis afhængigheder er ændret, kør
pnpm install, såpnpm-lock.yamler opdateret.
- Build & artefakter
- [ ] Hvis A2UI-inputs er ændret, kør
pnpm canvas:a2ui:bundleog commit eventuelle opdateredesrc/canvas-host/a2ui/a2ui.bundle.js. - [ ]
pnpm run build(regenerererdist/). - [ ] Verificér at npm-pakken
filesindeholder alle nødvendigedist/*-mapper (isærdist/node-host/**ogdist/acp/**til headless node + ACP CLI). - [ ] Bekræft at
dist/build-info.jsonfindes og indeholder den forventedecommit-hash (CLI-banneret bruger dette til npm-installationer). - [ ] Valgfrit:
npm pack --pack-destination /tmpefter build; inspicér tarball-indholdet og gem det til GitHub-releasen (commit det ikke).
- Changelog & docs
- [ ] Opdatér
CHANGELOG.mdmed brugerrettede highlights (opret filen hvis den mangler); hold indgange strengt faldende efter version. - [ ] Sørg for, at README-eksempler/flags matcher den aktuelle CLI-adfærd (især nye kommandoer eller muligheder).
- Validering
- [ ]
pnpm build - [ ]
pnpm check - [ ]
pnpm test(ellerpnpm test:coveragehvis du har brug for coverage-output) - [ ]
pnpm release:check(verificerer npm pack-indhold) - [ ]
OPENCLAW_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke(Docker-installations-smoke test, hurtig sti; påkrævet før release) - Hvis den umiddelbart forrige npm-release vides at være defekt, sæt
OPENCLAW_INSTALL_SMOKE_PREVIOUS=<last-good-version>ellerOPENCLAW_INSTALL_SMOKE_SKIP_PREVIOUS=1for preinstall-trinnet. - [ ] (Valgfrit) Fuld installer-smoke (tilføjer non-root + CLI-dækning):
pnpm test:install:smoke - [ ] (Valgfrit) Installer E2E (Docker, kører
curl -fsSL https://openclaw.ai/install.sh | bash, onboarder og kører derefter rigtige tool-kald): pnpm test:install:e2e:openai(kræverOPENAI_API_KEY)pnpm test:install:e2e:anthropic(kræverANTHROPIC_API_KEY)pnpm test:install:e2e(kræver begge nøgler; kører begge providers)- [ ] (Valgfrit) Spot-tjek web-gatewayen, hvis dine ændringer påvirker send/modtag-stier.
- macOS-app (Sparkle)
- [ ] Build og signér macOS-appen, og zip den derefter til distribution.
- [ ] Generér Sparkle-appcast (HTML-noter via
scripts/make_appcast.sh) og opdatérappcast.xml. - [ ] Hold app zip (og valgfri dSYM zip) klar til at vedhæfte til GitHub udgivelse.
- [ ] Følg macOS release for de præcise kommandoer og påkrævede env-vars.
APP_BUILDskal være numerisk og monoton (ingen-beta), så Sparkle sammenligner versioner korrekt.- Hvis der notariseres, brug
openclaw-notary-keychain-profilen oprettet fra App Store Connect API env-vars (se macOS release).
- Publicér (npm)
- [ ] Bekræft at git-status er ren; commit og push efter behov.
- [ ]
npm login(verificér 2FA) hvis nødvendigt. - [ ]
npm publish --access public(brug--tag betatil pre-releases). - [ ] Verificér registreret:
npm view openclaw version,npm view openclaw dist-tagsognpx -y openclaw@X.Y.Z --version(eller--help).
Fejlfinding (noter fra 2.0.0-beta2-release)¶
- npm pack/publish hangs or produces huge tarball: macOS app bundle in
dist/OpenClaw.app(og release zips) bliver fejet ind i pakken. Fix ved whitelisting publicere indhold viapackage.jsonfiles(omfatter dist subdirs, docs, færdigheder; udelukke app bundter). Bekræft mednpm pack --dry-runatdist/OpenClaw.appikke er angivet. - npm auth web-loop for dist-tags: brug legacy-auth for at få en OTP-prompt:
NPM_CONFIG_AUTH_TYPE=legacy npm dist-tag add openclaw@X.Y.Z latestnpx-verifikation fejler medECOMPROMISED: Lock compromised: prøv igen med en frisk cache:NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y openclaw@X.Y.Z --version- Tag skal peges om efter en sen rettelse: force-opdatér og push tagget, og sørg derefter for, at GitHub-release-artefakterne stadig matcher:
git tag -f vX.Y.Z && git push -f origin vX.Y.Z
- GitHub-release + appcast
- [ ] Tag og push:
git tag vX.Y.Z && git push origin vX.Y.Z(ellergit push --tags). - [ ] Opret/opdatér GitHub-releasen for
vX.Y.Zmed titelopenclaw X.Y.Z(ikke kun tagget); brødteksten skal indeholde den fulde changelog-sektion for den version (Highlights + Changes + Fixes), inline (ingen bare links), og må ikke gentage titlen inde i brødteksten. - [ ] Vedhæft artefakter:
npm pack-tarball (valgfrit),OpenClaw-X.Y.Z.zipogOpenClaw-X.Y.Z.dSYM.zip(hvis genereret). - [ ] Commit den opdaterede
appcast.xmlog push den (Sparkle feeder fra main). - [ ] Fra en ren temp-mappe (ingen
package.json), kørnpx -y openclaw@X.Y.Z send --helpfor at bekræfte, at install/CLI-entrypoints virker. - [ ] Annoncér/del release-noter.
Plugin-publiceringsscope (npm)¶
Vi offentliggør kun eksisterende npm plugins under @openclaw/* anvendelsesområdet. Medfølgende
plugins, der ikke er på npm ophold disk-tree kun (stadig afsendt i
extensions/**).
Proces for at aflede listen:
npm search @openclaw --jsonog indfang pakkenavnene.- Sammenlign med
extensions/*/package.json-navne. - Publicér kun snittet (allerede på npm).
Aktuel liste over npm-plugins (opdatér efter behov):
- @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
Release-noter skal også fremhæve nye valgfrie bundtede plugins, der ikke er
slået til som standard (eksempel: tlon).