@medyll/monorepo-pnpm-release
v1.0.22
Published
Minimalist monorepo release tool for pnpm workspaces
Maintainers
Readme
@medyll/monorepo-pnpm-release 🤖
A lightweight, automated release manager for pnpm workspaces. It handles versioning, changelog generation, and publishing directly from GitHub Actions, for monorepos or standalone projects.
✨ Features
- Directory-based Detection: Only bumps packages that have actual changes in their folder.
- Independent Versioning: Each package follows its own lifecycle.
- Smart Changelogs: Injects updates into existing
CHANGELOG.mdwhile preserving history. - Conventional Commits: Automatically calculates
patch,minor, ormajorbumps. - Zero-Config CI: Automatically handles Git identity (bot) if not configured.
- Hybrid Support: Works perfectly for both large monorepos and single-package projects.
🚀 Installation & Usage
CLI Options
--build
Execute the build script in each changed package before releasing. If a package does not define a build script, it is skipped with a neutral info message.
# Build changed packages only
npx @medyll/monorepo-pnpm-release --build--package
Execute the package script in each changed package before releasing. If a package does not define a package script, it is skipped with a neutral info message.
# Package changed packages only
npx @medyll/monorepo-pnpm-release --package
# Combine both flags
npx @medyll/monorepo-pnpm-release --build --package--regenerate-changelog
Regenerate the entire CHANGELOG.md file from Git history. This rewrites the file with standardized formatting (Date + Conventional Commit), grouping commits by Release/Tag.
- Monorepo: Only includes commits touching the package directory.
- Single Package: Includes all commits in the repository.
# Regenerate changelog without publishing or versioning
npx @medyll/monorepo-pnpm-release --regenerate-changelog--verbose
Enable verbose logging with detailed output during the release process. Useful for debugging or understanding command execution.
npx @medyll/monorepo-pnpm-release --build all --verbose--dry-run
Analyze and simulate the release without making any changes.
npx @medyll/monorepo-pnpm-release --dry-runOption A: One-time execution (npx)
Useful to avoid polluting your dependencies.
npx @medyll/monorepo-pnpm-release
Option B: Integrated dependency
Recommended to lock the tool version for the whole team.
pnpm add -D @medyll/monorepo-pnpm-release
Then add the following script to package.json :
"scripts": {
"release": "monorepo-pnpm-release"
}
Usage: pnpm release
⚙️ Configuration
You can configure the tool using CLI arguments or a configuration file.
The tool looks for a .idae.pnpm-release file (JSON) in the project root.
Precedence Rule
- CLI Arguments (Highest priority, overrides config)
- Configuration File (
.idae.pnpm-release) - Defaults
Example .idae.pnpm-release
{
"dry-run": false,
"verbose": true,
"pre-id": "beta",
"build": true,
"generate-readme-root": true
}🛠 Workflow Integration
Create the file .github/workflows/release.yml :
name: Release
on:
push:
branches: [main, develop]
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 20
registry-url: 'https://registry.npmjs.org'
- run: pnpm install --frozen-lockfile
- run: npx @medyll/monorepo-pnpm-release
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
📖 CLI Options
| Option | Alias | Description | Default |
| --- | --- | --- | --- |
| --dry-run | -d | Simulates the release without modifying Git or NPM | false |
| --pre-id | -p | Pre-release identifier (alpha, beta, next) | alpha |
| --verbose | -v | Shows detailed logs of internal steps | false |
| --package | -k | Runs package script in each changed package | false |
| --build | -b | Runs build script in each changed package | false |
📝 Commit Convention
The tool analyzes your commit messages to decide the next bump:
fix: ...→ patchfeat: ...→ minorfeat!: ...orBREAKING CHANGE:→ major
🛠 Troubleshooting
NPM Authentication Issues
If the CI fails at the publish step:
- Token Type: Use an Automation token (not Fine-grained without write permissions).
- GitHub Secret: Make sure the secret is named
NPM_TOKEN. - Access: For
@scope/packages, ensure they are public:
"publishConfig": { "access": "public" }
Git Identity Error
If you see Author identity unknown:
The tool automatically configures github-actions[bot]. If you use your own identity, make sure it is set before running the tool.
📄 License
MIT
