Skip to main content
← Back to workflows

How to Automatically Publish Packages to NPM with GitHub Actions

JS-DevTools-npm-publish -
GitHub Action
v3.1.1
GitHub Org's stars
Contributors
Categories
CICube banner
The GitHub Actions dashboard helps you spot bottlenecks and optimize your CI pipeline with actionable insights.
Usage
name: Publish to NPM
on:
push:
branches: main

jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
with:
node-version: "20"
- run: npm ci
- run: npm test
- uses: JS-DevTools/npm-publish@v3
with:
token: ${{ secrets.NPM_TOKEN }}

npm-publish logo

npm-publish

This action automatically publishes your package to NPM using GitHub Actions.


What is npm-publish?

The npm-publish action allows you to automatically publish your NPM packages from a GitHub repository. It ensures that packages are published only if the version in package.json differs from the latest on NPM.

How to Use token

The token input is required to authenticate with NPM or any other registry. Here's how to configure it:

with:
token: ${{ secrets.NPM_TOKEN }}

You can also publish to GitHub Package Registry by using secrets.GITHUB_TOKEN:

with:
token: ${{ secrets.GITHUB_TOKEN }}
registry: "https://npm.pkg.github.com"

How to Set the Registry URL

You can publish to any registry by setting the registry input:

with:
registry: 'https://npm.pkg.github.com'

How to Specify a Custom Package Directory

If your package is not in the root directory, you can specify the path:

with:
package: './path/to/package'

How to Use Distribution Tags

To control which tag the package will be published under (e.g., latest, beta), use the tag input:

with:
tag: 'beta'

How to Set Access Control

By default, packages are published publicly. If you want to restrict access, set the access input:

with:
access: 'restricted'

How to Run in Dry-Run Mode

You can test the publication without actually publishing anything by enabling the dry-run flag:

with:
dry-run: true

Outputs

The npm-publish action exposes several output variables that you can use in subsequent steps of your workflow. Make sure to set an ID for the action to access these outputs.

steps:
- uses: JS-DevTools/npm-publish@v3
id: publish
with:
token: ${{ secrets.NPM_TOKEN }}

- if: ${{ steps.publish.outputs.type }}
run: echo "Version changed!"

Available outputs:

  • new_tag: The newly calculated tag.
  • new_version: The new version of the package.
  • previous_version: The previously published version.
  • release_type: The type of release (major, minor, patch, etc.).

Monitoring GitHub Actions Workflows

CICube is a GitHub Actions monitoring tool that provides you with detailed insights into your workflows to further optimize your CI/CD pipeline. With CICube, you will be able to track your workflow runs, understand where the bottlenecks are, and tease out the best from your build times. Go to cicube.io now and create a free account to better optimize your GitHub Actions workflows!

CICube GitHub Actions Workflow Duration Monitoring