Ever find yourself copying the same GitHub Actions workflow across multiple npm packages? I got tired of maintaining duplicate publishing workflows, so I built a reusable action that handles it all.
The Problem π€
I was copy-pasting this same workflow across 10+ repositories:
- Setup Node.js and PNPM
- Run tests (if they exist)
- Update package.json version
- Build the package
- Publish to NPM
- Commit changes back
Every time I wanted to improve the workflow, I had to update it in multiple repos. Not fun!
The Solution β¨
I created Publish NPM Action - a single reusable action that handles the entire npm publishing pipeline.
What it does:
- π§ͺ Smart testing - Automatically detects and runs tests
- π¦ Version sync - Updates package.json with your release tag
- ποΈ Flexible building - Works with any build system
- π Git integration - Commits build files back to your repo
- π‘οΈ Secure publishing - Handles NPM authentication safely
Usage - Dead Simple π«
Just create .github/workflows/publish.yml
:
name: Publish on Release
on:
release:
types: [published]
permissions:
contents: write
packages: write
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: main
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0
- name: Publish NPM Package
uses: phucbm/publish-npm-action@v1
with:
npm-token: ${{ secrets.NPM_TOKEN }}
That's it! Create a release, and your package automatically publishes to NPM.
Advanced Configuration π οΈ
Need customization? The action is highly configurable:
- name: Publish NPM Package
uses: phucbm/publish-npm-action@v1
with:
npm-token: ${{ secrets.NPM_TOKEN }}
# node-version: '20' # Node.js version, default is '18'
# build-command: 'npm run build:prod' # Build command, default is 'pnpm build'
# output-dir: 'build/' # Output directory, default is 'dist/'
# target-branch: 'develop' # Target branch, default is 'main'
# skip-tests: 'true' # Skip tests, default is 'false'
# commit-files: 'CHANGELOG.md docs/ types/' # Additional files to commit, default is ''
Perfect for different project setups:
-
React apps:
output-dir: 'build/'
-
TypeScript libs:
commit-files: 'types/'
- Monorepos: Custom build commands and paths
Real-World Benefits π―
Since switching to this action:
- β 15-line workflows instead of 80+ lines
- β Centralized updates - improve once, benefits everywhere
- β Zero maintenance per repository
- β Consistent publishing across all projects
- β Less copy-paste errors
Quick Setup Guide π
-
Add NPM token to GitHub Secrets as
NPM_TOKEN
-
Copy the workflow above to
.github/workflows/publish.yml
-
Create a release with semantic versioning (e.g.,
v1.2.3
) - Watch the magic happen! πͺ
The action handles everything: tests, builds, version updates, and publishing.
Try It Out! π
The action is available on the GitHub Marketplace.
Have feedback or feature requests? Drop them in the GitHub repo!
What's your npm publishing workflow like? Have you automated it? Drop a comment below! π
Top comments (0)