[[Trusted Publishing]]で[[GitHub Actions]]にパッケージをアップロードする。 ## 前提 | 対象 | サポートバージョン | | ----------- | ---------- | | [[Node.js]] | 22.14.0 以上 | | [[npm]] | 11.5.1 以上 | ## npmの設定 https://www.npmjs.com/ にログインし、対象の[[パッケージ (npm)|パッケージ]]ページを開く。 ![[2026-05-24-19-14-34.avif|frame]] *[[🦉Owlelia]]の場合* 設定から `Trusted Publishing` の `GitHub Actions` を選択。 ![[2026-05-24-19-15-14.avif]] 必要な情報を入力して `Set up connection` を押す。 ![[2026-05-24-19-16-47.avif]] 成功すると[[Trusted Publisher]]に追加される。 ![[2026-05-24-19-17-45.avif]] ## [[GitHub Actions]]の設定 対象の[[YAML]]ファイルに `permissions.id-token: write` を追加する。 ```yaml permissions: id-token: write ``` `NPM_TOKEN` を使っている部分は削除する。 ```diff - name: "Release" uses: cycjimmy/semantic-release-action@v5 with: semantic_version: 24.1.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} ``` ## 記録 ### トラブルシューティング #### NPM_TOKEN を指定しないと `@semantic-release-npm` がエラーになる ```error Error: AggregateError: SemanticReleaseError: No npm token specified. ``` [[semantic-release]]の v25.0.2 以上でないとインストールされる上記プラグインの対象バージョンが[[OIDC]]の[[Trusted Publishing]]に対応していないらしい。(未確認) ```diff - name: "Release" - uses: cycjimmy/semantic-release-action@v5 + uses: cycjimmy/semantic-release-action@v6 with: - semantic_version: 24.1.1 + semantic_version: 25.0.3 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` #### ExecaErrorになる ```error Error: ExecaError: Command failed with exit code 1: npm publish /home/runner/work/owlelia/owlelia --userconfig /tmp/384fee1b6e9f79e907edb8b3fbc7da6c/.npmrc --tag latest --registry 'https://registry.npmjs.org/' ``` [[npm]]のバージョンが古い。 | 対象 | サポートバージョン | 実行時のバージョン | | ----------- | ---------- | --------- | | [[Node.js]] | 22.14.0 以上 | 22.22.3 | | [[npm]] | 11.5.1 以上 | 10.9.8 | [[setup-node (GitHub Actions)|setup-node]]で[[Node.js]] v24をインストールしておく。結果的に[[npm]]もサポートバージョン以上になる。 ```diff jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 + with: + node-version: "24" + package-manager-cache: false ``` ### 切り替えの経緯 以下のようにone-time passwordに関するエラーが出たのもあり、せっかくなので最近の推奨方式に切り替えた。 ```error npm notice Publishing to https://registry.npmjs.org/ with tag latest and default access npm error code EOTP npm error This operation requires a one-time password from your authenticator. npm error You can provide a one-time password by passing --otp=<code> to the command you ran. ```