Сообщение об ошибке
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`. Имя провайдера берётся из механизма обнаружения CI в npm (`ci-info`).
npm publish --provenance (npm 9.5+) — libnpmpublish, code EUSAGE
Что это означает
`npm publish --provenance` создаёт подписанное заявление SLSA о происхождении (provenance), в котором указано, каким рабочим процессом CI собран пакет. npm может сделать это только в поддерживаемой системе CI, которая предоставляет удостоверение OIDC (GitHub Actions на раннерах, размещённых GitHub, GitLab CI на общих раннерах); Sigstore записывает именно это удостоверение в сертификат подписи. `provider: null` означает, что npm вообще не обнаружил CI — команда запускалась на машине разработчика или в неподдерживаемой системе CI. Ничего не опубликовано.
Почему это происходит
Публикация с ноутбука
часто`--provenance` (или `provenance=true` в `.npmrc`, или `publishConfig.provenance`) задан для пакета, публикуемого мейнтейнером вручную. Сведения о происхождении должны подтверждать сборку в CI, поэтому создать их локально нельзя.
Задача CI без разрешения на выпуск OIDC-токена
частоGitHub Actions выдаёт токен только при `id-token: write`, а GitLab — только при наличии записи `id_tokens` с аудиторией `sigstore`.
Система CI, для которой npm не умеет создавать сведения о происхождении
иногдаJenkins, CircleCI, собственные (self-hosted) раннеры и другие системы распознаются (имя провайдера есть в сообщении), но автоматическое создание сведений о происхождении для них не поддерживается.
Как исправить
- 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-токен с аудиторией `sigstore` в разделе `id_tokens`; npm берёт его из `SIGSTORE_ID_TOKEN`.
yaml publish: image: node:24 id_tokens: SIGSTORE_ID_TOKEN: aud: sigstore script: - npm publish --provenance --access public