Pular para o conteúdo
ecdsa.com
npm publish --provenance (npm 9.5+)Gerenciadores de pacotes

Mensagem de erro

Automatic provenance generation not supported for provider: null

Também aparece como

  • 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".

No GitHub Actions sem `permissions: id-token: write`, a mensagem é “Provenance generation in GitHub Actions requires "write" access to the "id-token" permission” (ambas reproduzidas com o npm 11.19.1); no GitLab sem a entrada `id_tokens`, ela cita `SIGSTORE_ID_TOKEN` (texto do código-fonte da libnpmpublish). Todos são erros `EUSAGE`. O nome do provedor vem da detecção de CI do npm (`ci-info`).

npm publish --provenance (npm 9.5+) — libnpmpublish, code EUSAGE

O que significa

O comando `npm publish --provenance` cria uma declaração de proveniência SLSA assinada que informa qual fluxo de trabalho de CI fez o build do pacote. O npm só consegue fazer isso dentro de um sistema de CI compatível que forneça uma identidade OIDC (GitHub Actions em runners hospedados pelo GitHub, GitLab CI em runners compartilhados); essa identidade é o que o Sigstore coloca no certificado de assinatura. `provider: null` significa que o npm não detectou nenhum CI — o comando rodou na máquina de um desenvolvedor ou em um CI sem suporte. Nada foi publicado.

Por que acontece

Como corrigir

  1. 1.

    Publicar a partir de um fluxo de trabalho do GitHub Actions

    Conceda `id-token: write`, rode em um runner hospedado pelo GitHub e publique com `--provenance`. A publicação confiável (trusted publishing) do npm, via OIDC, pode substituir totalmente o token do 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.

    Ou a partir do GitLab CI

    Solicite um token de ID com o público-alvo `sigstore` em `id_tokens`; o npm o lê de `SIGSTORE_ID_TOKEN`.

    yaml
    publish:
      image: node:24
      id_tokens:
        SIGSTORE_ID_TOKEN:
          aud: sigstore
      script:
        - npm publish --provenance --access public

Erros relacionados

Ver toda a base de erros de assinatura