Lista kontrolna wydania (npm + macOS)¶
Użyj pnpm (Node 22+) z katalogu głównego repozytorium. Przed tagowaniem/publikacją zachowaj czyste drzewo robocze.
Wyzwalacz operatora¶
Gdy operator powie „release”, natychmiast wykonaj to sprawdzenie wstępne (bez dodatkowych pytań, chyba że coś blokuje):
- Przeczytaj ten dokument oraz
docs/platforms/mac/release.md. - Załaduj zmienne środowiskowe z
~/.profilei potwierdź, że ustawione sąSPARKLE_PRIVATE_KEY_FILEoraz zmienne App Store Connect (SPARKLE_PRIVATE_KEY_FILE powinien znajdować się w~/.profile). - W razie potrzeby użyj kluczy Sparkle z
~/Library/CloudStorage/Dropbox/Backup/Sparkle.
- Wersja i metadane
- [ ] Zwiększ wersję
package.json(np.2026.1.29). - [ ] Uruchom
pnpm plugins:sync, aby wyrównać wersje pakietów rozszerzeń oraz changelogi. - [ ] Zaktualizuj ciągi wersji CLI:
src/cli/program.tsoraz user agent Baileys wsrc/provider-web.ts. - [ ] Potwierdź metadane pakietu (name, description, repository, keywords, license) oraz to, że mapa
binwskazuje naopenclaw.mjsdlaopenclaw. - [ ] Jeśli zmieniły się zależności, uruchom
pnpm install, abypnpm-lock.yamlbyło aktualne.
- Build i artefakty
- [ ] Jeśli zmieniły się wejścia A2UI, uruchom
pnpm canvas:a2ui:bundlei zatwierdź wszelkie zaktualizowanesrc/canvas-host/a2ui/a2ui.bundle.js. - [ ]
pnpm run build(regenerujedist/). - [ ] Sprawdź, czy pakiet npm
fileszawiera wszystkie wymagane folderydist/*(w szczególnościdist/node-host/**idist/acp/**dla headless node + ACP CLI). - [ ] Potwierdź, że
dist/build-info.jsonistnieje i zawiera oczekiwany hashcommit(baner CLI używa tego przy instalacjach npm). - [ ] Opcjonalnie:
npm pack --pack-destination /tmppo buildzie; obejrzyj zawartość tarballa i zachowaj go do wydania GitHub (nie zatwierdzaj go w repozytorium).
- Changelog i dokumentacja
- [ ] Zaktualizuj
CHANGELOG.mdo najważniejsze zmiany widoczne dla użytkownika (utwórz plik, jeśli nie istnieje); zachowaj wpisy ściśle w kolejności malejącej według wersji. - [ ] Upewnij się, że przykłady i flagi w README odpowiadają aktualnemu zachowaniu CLI (zwłaszcza nowe polecenia lub opcje).
- Walidacja
- [ ]
pnpm build - [ ]
pnpm check - [ ]
pnpm test(lubpnpm test:coverage, jeśli potrzebujesz wyjścia z pokryciem) - [ ]
pnpm release:check(weryfikuje zawartość npm pack) - [ ]
OPENCLAW_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke(test dymny instalacji Docker, szybka ścieżka; wymagany przed wydaniem) - Jeśli bezpośrednio poprzednie wydanie npm jest znane jako uszkodzone, ustaw
OPENCLAW_INSTALL_SMOKE_PREVIOUS=<last-good-version>lubOPENCLAW_INSTALL_SMOKE_SKIP_PREVIOUS=1dla kroku preinstall. - [ ] (Opcjonalnie) Pełny test dymny instalatora (dodaje użytkownika bez uprawnień roota + pokrycie CLI):
pnpm test:install:smoke - [ ] (Opcjonalnie) E2E instalatora (Docker, uruchamia
curl -fsSL https://openclaw.ai/install.sh | bash, wykonuje onboarding, a następnie realne wywołania narzędzi): pnpm test:install:e2e:openai(wymagaOPENAI_API_KEY)pnpm test:install:e2e:anthropic(wymagaANTHROPIC_API_KEY)pnpm test:install:e2e(wymaga obu kluczy; uruchamia obu dostawców)- [ ] (Opcjonalnie) Szybko sprawdź web gateway, jeśli zmiany dotyczą ścieżek wysyłania/odbioru.
- Aplikacja macOS (Sparkle)
- [ ] Zbuduj i podpisz aplikację macOS, a następnie spakuj ją do zipa do dystrybucji.
- [ ] Wygeneruj appcast Sparkle (notatki HTML przez
scripts/make_appcast.sh) i zaktualizujappcast.xml. - [ ] Zachowaj zip aplikacji (oraz opcjonalny zip dSYM) gotowy do dołączenia do wydania GitHub.
- [ ] Postępuj zgodnie z macOS release w celu uzyskania dokładnych poleceń i wymaganych zmiennych środowiskowych.
APP_BUILDmusi być numeryczny i monotoniczny (bez-beta), aby Sparkle poprawnie porównywał wersje.- Jeśli wykonujesz notaryzację, użyj profilu pęku kluczy
openclaw-notaryutworzonego na podstawie zmiennych środowiskowych App Store Connect API (zobacz macOS release).
- Publikacja (npm)
- [ ] Potwierdź, że stan git jest czysty; w razie potrzeby zatwierdź i wypchnij zmiany.
- [ ]
npm login(weryfikacja 2FA), jeśli wymagane. - [ ]
npm publish --access public(użyj--tag betadla wydań wstępnych). - [ ] Zweryfikuj rejestr:
npm view openclaw version,npm view openclaw dist-tagsoraznpx -y openclaw@X.Y.Z --version(lub--help).
Rozwiązywanie problemów (notatki z wydania 2.0.0-beta2)¶
- npm pack/publish zawiesza się lub tworzy ogromny tarball: pakiet aplikacji macOS w
dist/OpenClaw.app(oraz zipy wydań) są wciągane do pakietu. Naprawa: dodaj listę dozwoloną zawartości publikacji przezpackage.jsonfiles(uwzględnij podkatalogi dist, docs, skills; wyklucz pakiety aplikacji). Potwierdź poleceniemnpm pack --dry-run, żedist/OpenClaw.appnie znajduje się na liście. - Pętla uwierzytelniania npm w przeglądarce dla dist-tags: użyj uwierzytelniania legacy, aby uzyskać monit o OTP:
NPM_CONFIG_AUTH_TYPE=legacy npm dist-tag add openclaw@X.Y.Z latest- Weryfikacja
npxnie powodzi się zECOMPROMISED: Lock compromised: spróbuj ponownie z czystą pamięcią podręczną: NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y openclaw@X.Y.Z --version- Tag wymaga przestawienia po późnej poprawce: wymuś aktualizację i wypchnij tag, a następnie upewnij się, że artefakty wydania GitHub nadal się zgadzają:
git tag -f vX.Y.Z && git push -f origin vX.Y.Z
- Wydanie GitHub + appcast
- [ ] Otaguj i wypchnij:
git tag vX.Y.Z && git push origin vX.Y.Z(lubgit push --tags). - [ ] Utwórz/odśwież wydanie GitHub dla
vX.Y.Zz tytułemopenclaw X.Y.Z(nie tylko tag); treść powinna zawierać pełną sekcję changeloga dla tej wersji (Highlights + Changes + Fixes), wstawioną bezpośrednio (bez gołych linków), i nie może powtarzać tytułu wewnątrz treści. - [ ] Dołącz artefakty: tarball
npm pack(opcjonalnie),OpenClaw-X.Y.Z.ziporazOpenClaw-X.Y.Z.dSYM.zip(jeśli wygenerowano). - [ ] Zatwierdź zaktualizowany
appcast.xmli wypchnij go (Sparkle pobiera z gałęzi main). - [ ] Z czystego katalogu tymczasowego (bez
package.json) uruchomnpx -y openclaw@X.Y.Z send --help, aby potwierdzić, że instalacja i punkty wejścia CLI działają. - [ ] Ogłoś/udostępnij informacje o wydaniu.
Zakres publikacji wtyczek (npm)¶
Publikujemy wyłącznie istniejące wtyczki npm w zakresie @openclaw/*. Dołączone
wtyczki, których nie ma na npm, pozostają tylko w drzewie dyskowym (nadal są dostarczane w
extensions/**).
Proces wyprowadzenia listy:
npm search @openclaw --jsoni zapisz nazwy pakietów.- Porównaj z nazwami
extensions/*/package.json. - Opublikuj tylko część wspólną (już obecną na npm).
Aktualna lista wtyczek npm (aktualizuj w razie potrzeby):
- @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
Informacje o wydaniu muszą również wskazywać nowe opcjonalne dołączone wtyczki, które nie są
włączone domyślnie (przykład: tlon).