Back to Skills

npm-trusted-publishing

pr-pm
Updated Today
198 views
62
9
62
View on GitHub
Testingtesting

About

This Claude Skill helps developers set up secure npm publishing from GitHub Actions using OIDC trusted publishing, eliminating the need for long-lived NPM_TOKEN secrets. It provides configuration for provenance attestations and supports monorepo publishing workflows. Use this skill when creating or migrating a GitHub Actions workflow to publish npm packages with enhanced security.

Quick Install

Claude Code

Recommended
Plugin CommandRecommended
/plugin add https://github.com/pr-pm/prpm
Git CloneAlternative
git clone https://github.com/pr-pm/prpm.git ~/.claude/skills/npm-trusted-publishing

Copy and paste this command in Claude Code to install this skill

Documentation

NPM Trusted Publishing

Overview

Set up secure npm publishing from GitHub Actions using OIDC trusted publishing instead of long-lived NPM_TOKEN secrets.

When to Use

  • Setting up npm publish workflow in GitHub Actions
  • Migrating from NPM_TOKEN to trusted publishing
  • Adding provenance attestations to packages
  • Publishing monorepo packages

Quick Reference

RequirementImplementation
GitHub Actions permissionid-token: write
package.json fieldrepository.url matching GitHub repo
npm publish flag--provenance
npmjs.com setupConfigure trusted publisher per package

Implementation

1. GitHub Actions Workflow

permissions:
  contents: write
  id-token: write  # Required for OIDC

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: "20"
          registry-url: "https://registry.npmjs.org"

      - run: npm ci
      - run: npm run build

      # No NODE_AUTH_TOKEN needed - uses OIDC
      - run: npm publish --access public --provenance

2. package.json Repository Field

{
  "name": "@scope/package",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/owner/repo.git",
    "directory": "packages/subpackage"
  }
}

Monorepo note: Include directory field for packages not at repo root.

3. npmjs.com Configuration

For each package, go to Settings > Publishing access and add:

  • Repository: owner/repo
  • Workflow: publish.yml (or your workflow filename)
  • Environment: (optional)

Common Mistakes

MistakeFix
Missing --provenance flagAdd to npm publish command
Wrong URL formatUse git+https://github.com/...
Missing id-token: writeAdd to workflow permissions
Forgot npmjs.com setupConfigure trusted publisher in package settings
Using NODE_AUTH_TOKENRemove - OIDC handles auth
Outdated npm versionAdd npm install -g npm@latest step (see below)

npm Version Requirement

GitHub Actions runners may have an outdated npm version that doesn't properly support OIDC trusted publishing. This causes a confusing error:

npm notice Access token expired or revoked. Please try logging in again.
npm error code E404
npm error 404 Not Found - PUT https://registry.npmjs.org/@scope%2fpackage - Not found

Solution: Update npm to latest before publishing:

- uses: actions/setup-node@v4
  with:
    node-version: "20"
    registry-url: "https://registry.npmjs.org"

- name: Update npm to latest
  run: npm install -g npm@latest

- run: npm publish --access public --provenance

See GitHub Community Discussion #173102 for details.

Reference

GitHub Repository

pr-pm/prpm
Path: .claude/skills/npm-trusted-publishing
claudeclaude-codecursorcursor-ai-editcursorrulespackage-manager

Related Skills