npm publish を OIDC にする

NODE_AUTH_TOKEN を消し、id-token: write を付ける。npm 11.5.1 以上。

  • #GitHub Actions
  • #npm

Classic token は廃止済み。CI では Granular Access Token より Trusted publishing。Secret が無く、短命トークンだけなのでローテーションも要らない。

#npm 側

パッケージ Settings の Trusted Publisher に、Organization or user、Repository、Workflow filename、使うなら Environment name を入れる。指定したリポジトリの、指定したワークフローファイルだけが publish できる。

#ワークフロー

NODE_AUTH_TOKEN を消し、id-token: write を付ける。npm は 11.5.1 以上。Node 20 / 22 や古い 24 では npm を上げる。

yaml
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: "24.x"
          registry-url: "https://registry.npmjs.org"
      - run: npm publish

#制約

  • Trusted publisher は 1 つ。リリース用とアルファ用でワークフローを分けられない
  • プライベートリポジトリでは provenance を作れない。--provenance すると失敗する
  • package.jsonrepository が GitHub のリポジトリと一致していること。未記入や不一致は 422。provenance 無しでも発生する
  • npm 11.5.1 未満だと失敗する。分かりやすいエラーは出ず、404 になることがある

npm 公式はトークンより Trusted publishing を推奨している。

Prefer trusted publishing over tokens

編集