[[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.
```