Перейти к содержимому
ecdsa.com
npm publish --provenance (npm 9.5+)Менеджеры пакетов

Сообщение об ошибке

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. Ничего не опубликовано.

Почему это происходит

Как исправить

  1. 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. 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

Связанные ошибки

Открыть всю базу ошибок подписей