mcpField
R
release

release

github.com/different-aiクラウド・DevOps24.3k121 回インストール今日更新
リポジトリ

release について

`release` スキルは、OpenWork デスクトップアプリのリリースを作成、監視、検証するための手順をメンテナーに示します。タグによるバージョン管理、タグ付け前の未対応修正の確認、公開と復旧、公開アセットの検証を扱います。

主な機能

  1. 01リリース前の未対応修正確認
  2. 02タグによるバージョン管理
  3. 03リリースワークフローの実行
  4. 04実行状況の監視と復旧
  5. 05公開アセットの検証

活用シーン

  1. 01タグ付け前に未対応修正を確認
  2. 02デスクトップアプリのリリース公開
  3. 03ワークフロー失敗後のリリース復旧
  4. 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.dmg
  • openwork-mac-x64-X.Y.Z.dmg
  • openwork-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 を参照してください)。

コメント