Lista kontrolna wydania (npm + macOS)
Użyjpnpm (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.
- Jeśli bezpośrednio poprzednie wydanie npm jest znane jako uszkodzone, ustaw
- (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 [email protected] --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 [email protected] 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 [email protected] --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 [email protected] 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).
- @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).