release について
`release` スキルは、OpenWork デスクトップアプリのリリースを作成、監視、検証するための手順をメンテナーに示します。タグによるバージョン管理、タグ付け前の未対応修正の確認、公開と復旧、公開アセットの検証を扱います。
主な機能
- 01リリース前の未対応修正確認
- 02タグによるバージョン管理
- 03リリースワークフローの実行
- 04実行状況の監視と復旧
- 05公開アセットの検証
活用シーン
- 01タグ付け前に未対応修正を確認
- 02デスクトップアプリのリリース公開
- 03ワークフロー失敗後のリリース復旧
- 04展開前に公開アセットを検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ different-ai/ openwork --skill releaseインストール後、Claude Code で/releaseを入力して読み込まれたか確認します。
詳細
スキル:リリース
OpenWork のリリースを作成します。「Release App」ワークフロー
(.github/workflows/release-macos-aarch64.yml)は、デスクトップアプリのアセットをビルド、署名し、GitHub リリースに公開します。完全な手順書:
docs/RELEASING.md。
バージョンは git タグのみで管理します。 コミット済みの package.json はすべて、永続的な 0.0.0-dev のプレースホルダーを保持します。CI はビルド時にタグから取得したバージョンをワークスペースに設定します(scripts/release/stamp-version.mjs)。リリース時にこのリポジトリへのコミットは一切ありません。バージョン更新コミット、バックフィル PR、パッケージング PR はありません。
リリースの完了条件は、ワークフローが成功し、GitHub リリースが公開済み(ドラフトではない)であることです。タグを作成した時点ではありません。
タグを付ける前に:修正 PR とフォーク PR を確認する
release:cut または手動でタグを付ける前に、これを実行します。これは、起動時にウィンドウが空白になる回帰の修正を含むフォーク PR が、対象バージョンのタグ付け前に1日間オープンのままになっていたためです(インシデント 2026-09-09)。フォーク PR は Warden のクリアランスを受けません(warden.yml はフォーク PR をスキップし、warden-clearance.yml は head_repository == repository を必須とします)。そのため、人が確認するまで表面化しません。
前回の安定版タグ以降に作成され、タイトルまたは本文に fix(app)|crash|blank|white screen|regression|first launch が含まれる、dev に対するオープン PR をすべて列挙します。また、その期間に作成または更新されたフォーク PR もすべて列挙します。
export R=different-ai/openwork
PREV=$(gh release list -R $R --exclude-drafts --exclude-pre-releases --limit 1 --json tagName --jq '.[0].tagName')
SINCE=$(gh release view "$PREV" -R $R --json createdAt --jq '.createdAt')
echo "previous tag $PREV created $SINCE"
gh pr list -R $R --state open --base dev --limit 300 --search "sort:created-asc" \
--json number,title,body,isCrossRepository,createdAt,updatedAt,url \
| jq -r --arg since "$SINCE" '.[]
| select((.createdAt >= $since
and ((.title + " " + .body) | test("fix\\(app\\)|crash|blank|white screen|regression|first launch"; "i")))
or (.isCrossRepository and .updatedAt >= $since))
| "#\(.number)\(if .isCrossRepository then " [FORK]" else "" end) \(.title) \(.url)"'
次に、フォーク PR の未対応分を確認します。クラッシュまたは起動失敗を説明している、作成時期を問わないオープンなフォーク PR を列挙します。タイトルを確認し、リリースする不具合の種類に一致するもの(または空白画面/白画面/初回起動に関する修正)は、同様にリリースをブロックします。
gh pr list -R $R --state open --base dev --limit 300 \
--json number,title,body,isCrossRepository,url \
| jq -r '.[] | select(.isCrossRepository
and ((.title + " " + .body) | test("crash|blank|white screen|first launch|regression"; "i")))
| "#\(.number) \(.title) \(.url)"'
列挙した PR ごとに、次のいずれかを決定します。
- 先に取り込む — レビューし(フォーク PR の場合は
review-a-contributor-prスキルを使用)、devにマージしてからタグを付けます。 - そのままリリースする — その PR を含めずにリリースします。これは明示的に記録した場合に限り認められます。PR 番号の一覧、決定者、1行の理由を、公開後に
changelog.ymlが作成するリリースノート PR(docs(changelog): release notes for vX.Y.Z、ブランチautomation/changelog-vX.Y.Z-*)のKnown open fixes見出しの下に記載します。リリースノート PR がまだ作成されていない場合は、同じ内容を GitHub リリース本文(gh release edit vX.Y.Z -R $R --notes-file ...)に記載し、PR が作成されたら移します。 - 修正ではない/関連しない — 同じ一覧にその旨を記載します。誤検出でも1行記録し、次回のリリースで気付かれないまま再トリアージされることがないようにします。
該当なしの場合も記録します(Known open fixes: none matched)。一覧が空でないのに判断の記録がないままタグを付けるのが、この手順で防ぐべき失敗です。先に進まないでください。
リリースを作成する(標準手順)
pnpm release:cut # dispatches Release App with bump=patch
pnpm release:cut minor # or major
pnpm release:cut --version 0.19.0
pnpm release:cut:watch # same as release:cut, then tails the run
手動で同等の操作を行う場合:
gh workflow run "Release App" --repo different-ai/openwork -f bump=patch
このワークフローは、既存の v* タグから次のバージョンを決定し、origin/dev の HEAD にタグを作成して検証します(scripts/release/verify-tag.mjs:安定版の形式であること、および他のすべての安定版タグより厳密に大きいこと)。次に CI ワークスペースにバージョンを設定し、18 個すべての Electron マトリックスジョブをビルドして、npm、Daytona、AUR に公開し、ドラフトリリースを公開状態に切り替えます。
タグ参照は、組織が所有する diff-warden アプリのトークンを使って REST 経由で作成されます(v* ルールセットのバイパスアクター。warden-clearance 環境の WARDEN_APP_ID と WARDEN_PRIVATE_KEY)。このアプリによるタグ付けでワークフローが再実行されますが、アクターガードにより重複実行はスキップされます。タグのプッシュが拒否された場合、実行は手順を表示して失敗します。ルールセットのバイパスを修正するか、手動で管理者によるタグのプッシュを行ってください。
タグを先に付ける(迅速対応、管理者のみ)
まだレビューされていないコミットを dev に入れずにリリースする場合(インシデント対応)、タグを手動でプッシュします。タグはリリースされるコードと正確に一致させてください。
git tag vX.Y.Z <sha>
git push origin vX.Y.Z # v* ruleset grants admins bypass
Expedited Release Audit ワークフローは、タグ付けされたコミットが dev 上にない場合、事後レビュー用の Issue を作成します。dev を直接プッシュしたり、そのブランチのルールを回避したりしないでください。
監視
gh run list --repo different-ai/openwork --workflow "Release App" --limit 1
gh run watch <run-id> --repo different-ai/openwork --exit-status --interval 90
公開は、electron のマトリックス、electron アセット、npm publish が成功することを条件とします。
Publish AUR(continue-on-error)と Build + Push Daytona Snapshot は
ブロックしないチャネルです。これらが失敗してもリリースは停止しません。チャネルが復旧したら、同じタグでワークフローを再実行してください。
既存のタグを再実行する(復旧) — 一時的な失敗や、 ブロックしないチャネルの再実行の場合:
gh workflow run "Release App" --repo different-ai/openwork -f tag=vX.Y.Z
リリースがすでに公開済みの場合、復旧実行ではすべてのデスクトップビルド工程とアップデーターマニフェストのマージをスキップし、npm、AUR、Daytona のみを再実行します。再ビルドするとインストーラーに再署名され、publish-release より前に失敗した場合、latest*.yml が存在しなくなったバイト列を指すことになります。以降の自動更新はすべて sha512 checksum mismatch(v0.18.52)で失敗します。新しいデスクトップ用バイト列は、次のパッチとしてリリースしてください。
復旧実行ではタグの作成と単調性のチェックをスキップし、タグに固定されたソースをビルドします。また、ワークフローファイルの修正は dev から自動的に取り込みます(ワークフロー定義はディスパッチされた ref から実行され、チェックアウトされるソースのみがタグに固定されます)。
リリース公開前に実行が失敗した場合: 通常の保護ブランチ PR で修正を dev に取り込み、次のパッチを作成してください(pnpm release:cut)。GitHub リリースがまだドラフトのみであることを確認してから、タグを削除して再作成してください。
git push --delete origin vX.Y.Z
検証
gh release view vX.Y.Z --repo different-ai/openwork --json assets --jq '.assets[].name'
アプリのアセット(openwork-<platform>-X.Y.Z.*、latest*.yml アップデーターマニフェストなど)が含まれていることを確認してください。対象は次のとおりです。
openwork-mac-arm64-X.Y.Z.dmgopenwork-mac-x64-X.Y.Z.dmgopenwork-win-x64-X.Y.Z.exe
リリースが公開されるまで、デスクトップアップデーターは latest*.yml に対して 404 を返します。ビルド中に実行中のアプリでこのエラーが発生するのは想定どおりで、自動的に解消されます。ダウンロード URL が解決されることを抜き取り確認してください(リリースアセット CDN への 302):
curl -sI "https://github.com/different-ai/openwork/releases/download/vX.Y.Z/openwork-mac-arm64-X.Y.Z.dmg" | head -2
npm view openwork-server version と一致することを確認してください。
公開済みリリースの検証
アセットの公開後、バージョンを安全に展開できると周知する前に、公開された mac-arm64 の zip ファイルに対して validate-a-release スキル(.opencode/skills/validate-a-release/SKILL.md)を実行してください。このスキルはアップデーターマニフェストの sha512 を確認し、署名と公証を検証します。
注記
- デスクトップインストーラーの修正がユーザーに届くのは、新しいリリースを通じてのみです。組織向けインストールエンドポイント(
/v1/install/:platform)は、バージョン付きアセットに 302 リダイレクトします。 - den-api は、実行時に GitHub Releases API から公開済みバージョンを検出します(
ee/apps/den-api/src/desktop-releases.ts)。リリースが公開されると、デプロイなしで新しいバージョンが組織で利用可能になります。コミット済みのgenerated/desktop-versions.tsは、コールドスタート時やオフライン時のフォールバックとしてのみ使用されます。 - AUR は、コミット済みの
packaging/aurテンプレート(pkgver=0.0.0)を CI ワークスペース内でレンダリングし、aur.archlinux.org にプッシュして公開します。AUR 側のコミットがそのチャネルの公開プロトコルであり、このリポジトリには変更を加えません。 - ネイティブのワークスペース依存関係は、すべてのアプリで同じメジャーバージョンに揃えてください。electron-builder は検出したすべてのコピーをリビルドします(これが原因となった3リリースにわたる障害については #3561/#3563 を参照してください)。