リリースプロセス
npm + macOS アプリの段階的なリリースチェックリスト
リポジトリのルートから pnpm(Node 22+)を使用します。タグ付け/公開の前に作業ツリーをクリーンに保ちます。
オペレータートリガー
オペレーターが「リリース」と言ったとき、すぐにこの事前チェックを行います(ブロックされている場合を除き、追加の質問はありません):
- このドキュメントと docs/platforms/mac/release.md を読みます。
- ~/.profile から環境変数をロードし、SPARKLE_PRIVATE_KEY_FILE + App Store Connect 変数が設定されていることを確認します(SPARKLE_PRIVATE_KEY_FILE は ~/.profile にある必要があります)。
- 必要に応じて、~/Library/CloudStorage/Dropbox/Backup/Sparkle の Sparkle キーを使用します。
1. バージョンとメタデータ
- [ ] package.json のバージョンを増やします(例:2026.1.29)。
- [ ] pnpm plugins:sync を実行して、拡張パッケージのバージョンと変更ログを合わせます。
- [ ] CLI/バージョン文字列を更新します:src/cli/program.ts と src/provider-web.ts の Baileys ユーザーエージェント。
- [ ] Confirm package metadata (name, description, repository, keywords, license) and bin map points to openclaw.mjs for openclaw.
- [ ] 依存関係が変更された場合、pnpm install を実行して pnpm-lock.yaml を最新にします。
2. ビルドとアーティファクト
- [ ] A2UI 入力が変更された場合、pnpm canvas:a2ui:bundle を実行し、更新された src/canvas-host/a2ui/a2ui.bundle.js をコミットします。
- [ ] pnpm run build(dist/ を再生成します)。
- [ ] npm パッケージ files にすべての必要な dist/* フォルダが含まれていることを確認します(特にヘッドレスノード + ACP CLI 用の dist/node-host/** と dist/acp/**)。
- [ ] dist/build-info.json が存在し、期待される commit ハッシュが含まれていることを確認します(CLI バナーはこれを npm インストールに使用します)。
- [ ] オプション:ビルド後に npm pack --pack-destination /tmp を実行します。tarball の内容を検査し、GitHub リリース用に手元に置いておきます(コミットしないでください)。
3. 変更ログとドキュメント
- [ ] ユーザー向けのハイライトで CHANGELOG.md を更新します(ファイルがない場合は作成します)。エントリをバージョンごとに厳密に降順に保ちます。
- [ ] README の例/フラグが現在の CLI の動作と一致していることを確認します(特に新しいコマンドやオプション)。
4. Validation
- [ ] pnpm build
- [ ] pnpm check
- [ ] pnpm test(カバレッジ出力が必要な場合は pnpm test:coverage)
- [ ] pnpm release:check(npm pack の内容を検証します)
- [ ] OPENCLAW_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke(Docker インストールスモークテスト、高速パス;リリース前に必須)
- If the immediate previous npm release is known broken, set OPENCLAW_INSTALL_SMOKE_PREVIOUS=<last-good-version> or OPENCLAW_INSTALL_SMOKE_SKIP_PREVIOUS=1 for the preinstall step.
- [ ] (オプション)完全なインストーラースモークテスト(非 root + CLI カバレッジを追加):pnpm test:install:smoke
- [ ] (オプション)インストーラー E2E(Docker、curl -fsSL https://openclaw.ai/install.sh | bash を実行し、オンボードし、実際のツール呼び出しを実行します):
- pnpm test:install:e2e:openai(OPENAI_API_KEY が必要)
- pnpm test:install:e2e:anthropic(ANTHROPIC_API_KEY が必要)
- pnpm test:install:e2e(両方のキーが必要;両方のプロバイダーを実行します)
- [ ] (オプション)変更が送信/受信パスに影響する場合、Web ゲートウェイをスポットチェックします。
5. macOS アプリ(Sparkle)
- [ ] macOS アプリをビルド + 署名し、配布用に zip します。
- [ ] Sparkle appcast を生成し(scripts/make_appcast.sh 経由の HTML ノート)、appcast.xml を更新します。
- [ ] アプリ zip(およびオプションの dSYM zip)を GitHub リリースに添付する準備をしておきます。
- [ ] macOS リリースに従って、正確なコマンドと必要な環境変数を確認します。
- APP_BUILD は数値 + 単調でなければなりません(-beta なし)、Sparkle がバージョンを正しく比較できるようにします。
- 公証する場合、App Store Connect API 環境変数から作成された openclaw-notary キーチェーンプロファイルを使用します(macOS リリースを参照)。
6. Publish (npm)
- [ ] git ステータスがクリーンであることを確認します。必要に応じてコミットしてプッシュします。
- [ ] 必要に応じて npm login(2FA を確認)。
- [ ] npm publish --access public(プレリリースには --tag beta を使用)。
- [ ] レジストリを確認します:npm view openclaw version、npm view openclaw dist-tags、および npx -y [email protected] --version(または --help)。
#
7. GitHub リリース + appcast
- [ ] タグ付けとプッシュ:git tag vX.Y.Z && git push origin vX.Y.Z(または git push --tags)。
- [ ] vX.Y.Z の GitHub リリースを作成/更新し、タイトル openclaw X.Y.Z を使用します(タグだけではありません)。本文には、そのバージョンの完全な変更ログセクション(ハイライト + 変更 + 修正)を含める必要があります。インライン(裸のリンクなし)で、本文内でタイトルを繰り返してはいけません。
- [ ] アーティファクトを添付します:npm pack tarball(オプション)、OpenClaw-X.Y.Z.zip、および OpenClaw-X.Y.Z.dSYM.zip(生成された場合)。
- [ ] 更新された appcast.xml をコミットしてプッシュします(Sparkle は main からフィードします)。
- [ ] クリーンな一時ディレクトリ(package.json なし)から、npx -y [email protected] send --help を実行して、インストール/CLI エントリポイントが機能することを確認します。
- [ ] リリースノートを発表/共有します。
トラブルシューティング(2.0.0-beta2 リリースからのメモ)
- npm pack/publish がハングするか、巨大な tarball を生成する:dist/OpenClaw.app(およびリリース zip)の macOS アプリバンドルがパッケージに取り込まれます。package.json files 経由で公開コンテンツをホワイトリストに登録して修正します(dist サブディレクトリ、ドキュメント、スキルを含め、アプリバンドルを除外します)。npm pack --dry-run で dist/OpenClaw.app がリストされていないことを確認します。
- dist-tags の npm auth Web ループ:OTP プロンプトを取得するために従来の認証を使用します:
- NPM_CONFIG_AUTH_TYPE=legacy npm dist-tag add [email protected] latest
- npx 検証が ECOMPROMISED: Lock compromised で失敗する:新しいキャッシュで再試行します:
- NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y [email protected] --version
- 後期修正後にタグの再ポイントが必要:タグを強制更新してプッシュし、GitHub リリースアセットがまだ一致していることを確認します:
- git tag -f vX.Y.Z && git push -f origin vX.Y.Z
プラグイン公開スコープ(npm)
私たちは @openclaw/* スコープの下の既存の npm プラグインのみを公開します。npm にないバンドルプラグインはディスクツリーのみのままです(extensions/** にまだ提供されています)。
リストを派生するプロセス:
1. npm search @openclaw --json を実行し、パッケージ名をキャプチャします。
2. extensions/*/package.json 名前と比較します。
3. 共通部分(既に npm 上)のみを公開します。
現在の npm プラグインリスト(必要に応じて更新):
- @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 must also call out new optional bundled plugins that are **not on by default** (example: tlon).