pnpm-upgrade について
pnpm-upgradeは、pnpmツールチェーンとCIの固定参照を更新するリポジトリ向けスキルです。リリースと整合性の確認を含め、事前検査、設定変更、検証を案内します。
主な機能
- 01pnpmのリリースと整合性の解決
- 02action-setupをコミットSHAに固定
- 03CIのインストール経路を事前検査
- 04packageManagerとワークフローの更新
- 05ツールチェーンと差分の検証
活用シーン
- 01リポジトリ内のpnpm更新
- 02pnpm/action-setupのワークフロー参照更新
- 03アップグレード前のブートストラップ経路確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ openai/ openai-agents-js --skill pnpm-upgradeインストール後、Claude Code で/pnpm-upgradeを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yamlscripts/preflight.mjs
詳細
pnpm のアップグレード
以下の手順に従い、無差別な検索と置換を行わずに pnpm と CI の固定バージョンを更新します。
手順(リポジトリのルートから実行)
-
対象の pnpm リリースを特定する
- ローカルのツールチェーンを変更する前に、npm レジストリに問い合わせます:
PNPM_VERSION=$(curl -fsSL https://registry.npmjs.org/pnpm/latest | jq -r .version)。 - バージョンが取得できない場合は中止します。
- パッケージの正確なインテグリティを特定します:
curl -fsSL "https://registry.npmjs.org/pnpm/${PNPM_VERSION}" | jq -r .dist.integrity。 - 結果を
PNPM_INTEGRITYに保存します。 - インテグリティが取得できない場合、または
sha512-で始まらない場合は中止します。 sha512-の後に続く Base64 ダイジェストを小文字の 16 進数に変換します。例:printf '%s' "${PNPM_INTEGRITY#sha512-}" | base64 -d | xxd -p -c 256- 結果を
PNPM_SHA512_HEXに保存します。
- ローカルのツールチェーンを変更する前に、npm レジストリに問い合わせます:
-
対象の pnpm/action-setup リリースを特定する
- GitHub API に問い合わせます:
curl -fsSL https://api.github.com/repos/pnpm/action-setup/releases/latest | jq -r .tag_name。 - 利用できる場合は、より高いレート制限を得るために
GITHUB_TOKEN/GH_TOKENを使用します。 ACTION_TAGとして保存します(例:v4.2.0)。取得できない場合は中止します。
- GitHub API に問い合わせます:
-
アクションのタグを不変のコミット SHA に解決する
git ls-remote https://github.com/pnpm/action-setup "refs/tags/${ACTION_TAG}^{}"を実行し、SHA をACTION_SHAとして取得します。- 参照先のタグが見つからない場合は、
git ls-remote https://github.com/pnpm/action-setup "refs/tags/${ACTION_TAG}"にフォールバックします。 ACTION_SHAが空の場合は中止します。
-
リリースと CI のインストール経路を事前検証する
node .agents/skills/pnpm-upgrade/scripts/preflight.mjs --version "${PNPM_VERSION}" --action-ref "${ACTION_SHA}"を実行します。- このスクリプトはまず、
dependenciesまたはdevDependenciesが空でない公開済み pnpm マニフェストを拒否します。pnpm はランタイム依存関係をバンドルしているため、これらのフィールドは[email protected]のような公開物の不備を示します。 - 次に、一時ディレクトリを分けて
pnpm/action-setupの両方のインストール経路を再現します。pnpm-lock.jsonから通常のpnpmブートストラップを、exe-lock.jsonからスタンドアロンの@pnpm/exeブートストラップをインストールし、分離されたPNPM_HOMEディレクトリを設定して、それぞれのブートストラップをPNPM_VERSIONにセルフアップデートします。 - 失敗した場合はアップグレードを中止します。ローカルに直接インストールしてこのチェックを回避しないでください。この事前検証は、CI でのみ使用されるブートストラップ経路を実行するためのものです。
-
pnpm をローカルで更新する
pnpm self-update "${PNPM_VERSION}"を実行します。- pnpm が見つからない場合、または現在のインストール自体を更新できないことだけが原因でセルフアップデートに失敗した場合は、
corepack prepare "pnpm@${PNPM_VERSION}" --activateを実行します。事前検証の失敗を回避するために、このフォールバックを使用しないでください。 pnpm -vがPNPM_VERSIONと完全に一致することを確認します。
-
package.json を更新する
package.jsonを開き、packageManagerをpnpm@${PNPM_VERSION}+sha512.${PNPM_SHA512_HEX}に設定します(末尾の改行と書式は維持してください)。
-
ワークフローを慎重に更新する(広範な正規表現は使わない)
- 対象ファイル:
pnpm/action-setupを使用している.github/workflows/以下のすべてのファイル。 - 各ファイルを手作業で編集します。
uses: pnpm/action-setup@${ACTION_SHA}に設定します。with: version:フィールドがある場合は、${PNPM_VERSION}に設定します(引用符のスタイルとインデントは維持してください)。
- 無関係なステップには手を加えないでください。複数行の sed/perl ワンライナーは避けてください。
- 対象ファイル:
-
検証する
pnpm -vを実行し、packageManagerのバージョン部分と一致することを確認します。packageManagerに正確な+sha512.${PNPM_SHA512_HEX}のサフィックスが保持されていることを確認します。git diffを実行し、意図したワークフローと package.json の変更のみであることを確認します。
-
仕上げ
- ランタイムコード/ビルド/テストの設定を変更した場合(通常は該当しません)は、
$code-change-verificationを実行します。それ以外の場合は、簡易チェックで十分です。 chore: upgrade pnpm toolchainというメッセージでコミットし、PR を作成します(自動化によって実行される場合があります)。
- ランタイムコード/ビルド/テストの設定を変更した場合(通常は該当しません)は、
注意事項
- 必要なツール:
curl、jq、base64、xxd、node、npm、pnpm/corepack。見つからない場合はインストールしてください。 - 編集は最小限に抑え、読みやすさを保ってください。グローバルな置換より、対象ファイルを明示して編集する方法を優先してください。
- GitHub Actions はタグではなく、コミット SHA に固定する必要があります。固定するコミット SHA を調べるためにのみ、最新のリリースタグを使用してください。
- GitHub API のレート制限に達した場合は、トークンを使って再試行するか、タグを推測せずに中止してください。
コメント
Markdown 対応