OpenClaw Macリリース は何をしますか?
このスキルは、安定版macOSアセット、リリース-ops macプレフライト、公証、アプリキャストプロモーション、またはmacリリース復旧が関わる場合に、$release-openclaw-maintainer、$release-openclaw-ci、$one-password、および(存在する場合)$release-privateと共に使用します。
これは通常の安定版リリーススキルです。拡張安定版(extended-stable)では起動しないでください。 そのトラックのGitHubリリースは共有検証証拠を保持しますが、macOSアセットやアプリキャストプロモーションは継承しません。
リリース承認
明示的な安定版またはフルリリース要求には、オペレーターがその範囲を制限しない限り、macOS公開が含まれます。個別のmacOS同意を求めることなく、検証、署名、公証、プロモーション、確認を進めてください。正確なリリースIDとすべてのアーティファクトチェックを維持してください。macOS公開はnpmと並行して実行され、決してブロックしません。macOSの障害はnpm/ClawHubリリース、GitHubリリースファイナライズ、メインクローズアウトを停止しません。並行して修正してください。
現在のオーナー設定の環境ポリシーに従ってください。追加のレビューア要件を発明したり、廃止された要件を再作成したりしないでください。GitHubが依然として承認を強制する場合は、実際のルールを報告し、そのオーナーを通じて解決してください。ポリシー変更には、明示的な組織オーナーの指示と確認済みのアクティブな管理者メンバーシップが必要です。レビューアを偽装したり、承認を捏造したり、別の署名パスを使用して強制ルールを回避したりしないでください。
認証情報
- Peter所有のASCアイテム参照、キーID、発行者ID、サービスートークンの出所は
$release-privateから解決します。 - フィールド:
private_key_p8、key_id、issuer_id。 - 期限切れ/失効キーの症状:
xcrun notarytool submitがHTTP status code: 401. Unauthenticatedで失敗します。 - GitHub Secretsを設定する前に、
xcrun notarytool historyで候補のASC認証情報を検証します。
1Password
$one-passwordを使用します。すべてのop作業は1つの永続的なtmuxセッション内で行い、シークレットを出力しないでください。$release-privateからのサービスートークンガイダンスが利用可能な場合はそれに従ってください。- サービスートークンが失敗した場合、ステータスのみのチェック(トークンの存在/長さと
op whoami)を実行し、トークン値を絶対に印刷しないでください。 - デスクトップアプリ認証が必要だがTouch IDが利用できない場合は、手動の
op account add --signinパスのためにOP_BIOMETRIC_UNLOCK_ENABLED=falseを設定します。
GitHub Secrets
ターゲットリリース-opsリポジトリ環境: openclaw/releases、env mac-release。
ローカルの公証認証検証後にのみ設定:
APP_STORE_CONNECT_API_KEY_P8APP_STORE_CONNECT_KEY_IDAPP_STORE_CONNECT_ISSUER_ID
混在したソースからこれらを更新しないでください。3つのASCフィールドはすべて同じ1Passwordアイテムから取得する必要があります。
ワークフロー形状
openclaw/openclawは公開製品リポジトリです。そのGitHubリリースページは、macOSアセットが最終的に添付される場所です。openclaw/openclawのmacos-release.ymlは公開ハンドオフ検証のみです。preflight_onlyの値に関係なく、macOSアセットへの署名、公証、アップロードは決して行いません。openclaw/releasesは制限付きリリース-opsリポジトリです。そのmacOSワークフローは、openclaw/openclawのGitHubリリースに対するアセットの署名、公証、検証、プロモーションを行います。- 公開リリースブランチは、安定版タグ/npmが既にライブになった後でも、mac専用のパッケージ修正を運ぶ場合があります。
- そのブランチバリエーションをビルドする場合、リリース-ops macプレフライト/検証には
source_ref=release/YYYY.M.PATCHを使用します。 tag=vYYYY.M.PATCHを元の安定版リリースコミットを指したままにします。- 実際のmac公開は以下を再利用する必要があります:
- 同じタグ/ソースSHAに対する成功したリリース-ops macプレフライトランの実行
- 同じタグ/ソースSHAに対する成功したリリース-ops mac検証ランの実行
- リリース-opsプレフライトと実際の公開は、署名とプロモーションのシークレット、およびそのmainのみのデプロイポリシーに
mac-release環境を使用します。承認されたリリースオペレーターは、その環境の現在のルールの下で継続します。 - プレフライトのソースSHAがタグSHAと異なる場合、検証も同じ
source_refを使用する必要があります。プロモーションは一致しない証明を拒否します。
公証
- OpenClawは
scripts/notarize-mac-artifact.shを使用します。 xcrun notarytool submitは--no-s3-accelerationを使用する必要があります。高速化アップロードは、notarytool historyが成功しても誤解を招く401を表面化させる可能性があります。- 署名は成功したが公証が直ちに401で失敗した場合、最初にASCキーの鮮度を確認します。
- キーファイル書き込み後、公証が数分間進行中のままの場合、それは通常のApple待機時間です。盲目的に編集しないでください。
ディスパッチ
公開ハンドオフワークフローは、公開前にタグ、ソース、ビルド、パッケージメタデータを検証します。アセットをアップロードしないため、GitHubリリースページを必要としません。この検証を実際の公開ワークフローの前に維持します。コアパブリッシャーはGitHubリリースのファイナライズを所有します。macOSプロモーションは、その検証済みアセットを、それがまだドラフトであろうと既に公開済みであろうと、そのリリースに添付するため、npmフリップを待つことはありません。
公開ハンドオフ検証:
gh workflow run macos-release.yml --repo openclaw/openclaw \
--ref release/YYYY.M.PATCH \
-f tag=vYYYY.M.PATCH \
-f preflight_only=true \
-f public_release_branch=release/YYYY.M.PATCH
- ワークフローrefとして公開リリースブランチを使用して、Actionsリストが
release/YYYY.M.PATCHを表示し、以前の安定版macOSハンドオフランと一致するようにします。 - この公開ハンドオフ検証には
--ref mainまたは--ref vYYYY.M.PATCHを使用しないでください。ワークフローは内部的にtag入力からタグをチェックアウトします。
リリース-opsプレフライト:
gh workflow run openclaw-macos-publish.yml --repo openclaw/releases --ref main \
-f tag=vYYYY.M.PATCH \
-f source_ref=release/YYYY.M.PATCH \
-f preflight_only=true \
-f smoke_test_only=false \
-f allow_late_calver_recovery=false \
-f public_release_branch=release/YYYY.M.PATCH
設定された環境ポリシーの下で、署名と公証を通じて実行を追跡します。成功したプレフライトランのIDを記録します。承認一時停止は成功したプレフライトではありません。
再開がデフォルトです。障害(公証停止、DMGパッケージング、コレクター)の後に同じプレフライトコマンドを再ディスパッチすると、同じタグとソースSHAに対する失敗またはキャンセルされたmainディスパッチによって残された最新のチェックポイントからすべてのバリアントを再開します。チェックポイントのないバリアントのみが再ビルドされます。実行ログには、Resuming <variant> from run <id> attempt <n>またはBuilding <variant>と表示されます。ignore_checkpoints=trueは新鮮なビルドを強制します。resume_notarization_run_id、resume_notarization_run_attempt、resume_notarization_variantは、1つの特定のランをピン留めする場合、または再開インデックスが存在する前のチェックポイント(macos-resume-<tag>-<variant>-<sha>アーティファクト)の場合にのみ渡します。現在のラン内に失敗したジョブがまだある場合は、gh run rerun <run-id> --failed --repo openclaw/releasesを優先します。
ブランチバリエーションプレフライトのリリース-ops検証:
gh workflow run openclaw-macos-validate.yml --repo openclaw/releases --ref main \
-f tag=vYYYY.M.PATCH \
-f source_ref=release/YYYY.M.PATCH
成功した検証ランIDを記録します。
実際の公開:
gh workflow run openclaw-macos-publish.yml --repo openclaw/releases --ref main \
-f tag=vYYYY.M.PATCH \
-f preflight_only=false \
-f smoke_test_only=false \
-f preflight_run_id=<successful-preflight-run> \
-f validate_run_id=<successful-validation-run> \
-f allow_late_calver_recovery=false \
-f public_release_branch=release/YYYY.M.PATCH
同じリリース承認と現在の環境ポリシーの下で、アセットアップロードとアプリキャスト公開を通じてプロモーションを追跡します。
- リリース-ops
openclaw/releasesの公開/検証ワークフローは、自身の信頼されたmainワークフローrefから実行されます。実際の公開には、他のワークフローrefを拒否するガードがあります。表示されるmainrefは期待通りです。公開されたOpenClawソースはtagとオプションのsource_refによって選択されます。
確認
gh release view vYYYY.M.PATCH --repo openclaw/openclawはzip、dmg、dSYM zipを表示します。npmパブリッシャーがそれをフリップした後: ドラフトではなく、プレリリースでもありません。- 公開
mainのappcast.xmlがOpenClaw-YYYY.M.PATCH.zipを指しています。 - アプリキャストエントリには
sparkle:version、sparkle:shortVersionString、長さ、sparkle:edSignatureがあります。