エラーメッセージ
Automatic provenance generation not supported for provider: null
別の表記
- Provenance generation in GitHub Actions requires "write" access to the "id-token" permission
- Provenance generation in GitLab CI requires "SIGSTORE_ID_TOKEN" with "sigstore" audience to be present in "id_tokens".
GitHub Actions で `permissions: id-token: write` がない場合、メッセージは「Provenance generation in GitHub Actions requires "write" access to the "id-token" permission」となります(どちらも npm 11.19.1 で再現)。GitLab で `id_tokens` のエントリがない場合は、メッセージに `SIGSTORE_ID_TOKEN` が示されます(libnpmpublish のソースにある文言)。いずれも `EUSAGE` エラーです。プロバイダー名は、npm の CI 検出(`ci-info`)によって決まります。
npm publish --provenance (npm 9.5+) — libnpmpublish, code EUSAGE
このエラーの意味
`npm publish --provenance` は、どの CI ワークフローがパッケージをビルドしたかを示す、署名付きの SLSA 来歴ステートメントを作成します。npm がこれを行えるのは、OIDC アイデンティティを提供するサポート対象の CI システム(GitHub ホステッドランナー上の GitHub Actions、共有ランナー上の GitLab CI)の中だけです。Sigstore が署名用証明書に記載するのは、このアイデンティティです。`provider: null` は、npm が CI をまったく検出しなかったこと、つまりコマンドが開発者のマシンか、サポート対象外の CI で実行されたことを意味します。何も公開されていません。
発生する理由
ノートパソコンから公開している
よくあるメンテナーが手動で公開するパッケージに `--provenance`(または `.npmrc` の `provenance=true`、`publishConfig.provenance`)が設定されています。来歴は CI でのビルドを証明するためのものなので、ローカルでは生成できません。
OIDC トークンを発行する権限のない CI ジョブ
よくあるGitHub Actions がトークンを提供するのは、`id-token: write` がある場合だけです。GitLab では、オーディエンスが `sigstore` の `id_tokens` エントリがある場合に限られます。
npm が来歴を生成できない CI システム
ときどきJenkins、CircleCI、セルフホストランナーなどは検出されます(メッセージにプロバイダー名が表示されます)が、来歴の自動生成には対応していません。
修正方法
- 1.
GitHub Actions のワークフローから公開する
`id-token: write` を付与し、GitHub ホステッドランナー上で実行して、`--provenance` を付けて公開してください。npm の信頼できる公開(trusted publishing、OIDC)を使えば、npm トークンを完全に置き換えられます。
yaml name: release on: { release: { types: [published] } } permissions: contents: read id-token: write # lets npm obtain the OIDC token Sigstore needs jobs: publish: runs-on: ubuntu-latest # GitHub-hosted runner steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: 24, registry-url: "https://registry.npmjs.org" } - run: npm ci - run: npm publish --provenance --access public env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" } - 2.
または GitLab CI から公開する
`id_tokens` の下で、オーディエンスが `sigstore` の ID トークンを要求してください。npm は `SIGSTORE_ID_TOKEN` からそのトークンを読み取ります。
yaml publish: image: node:24 id_tokens: SIGSTORE_ID_TOKEN: aud: sigstore script: - npm publish --provenance --access public