This monorepo uses Changesets to manage independent versioning and releases across all language ecosystems.
- Each package has its own version (
package.json,Cargo.toml,pyproject.toml, etc.) - Only changed packages get new versions
- Changesets generates a PR that bumps versions and updates changelogs
- Publishing happens automatically when the version PR is merged
Make your changes in a feature branch. Follow CONTRIBUTING.md for code quality standards.
pnpm changesetThis interactive command creates a .md file in .changeset/:
---
'@monorepo/example-package': minor
---
Add new feature for processing stringsPush your branch and open a PR:
- Add the changeset file
- Your changes must pass all CI checks
- Maintainers review and approve
When the PR is merged to main, Changesets:
- Bumps versions of changed packages
- Generates/updates
CHANGELOG.mdper package - Opens an automatic PR with all version changes
When the version PR is merged:
- CI automatically publishes each package to its registry
- npm packages → npmjs.com
- PHP packages → Packagist
- Python packages → PyPI
- Go modules → pkg.go.dev
- Rust crates → crates.io
We follow Semantic Versioning:
| Change Type | Example | Version Bump |
|---|---|---|
| Major | Breaking API change | 1.0.0 → 2.0.0 |
| Minor | New backward-compatible feature | 1.0.0 → 1.1.0 |
| Patch | Backward-compatible fix | 1.0.0 → 1.0.1 |
pnpm changeset statuspnpm changeset remove @monorepo/package-namepnpm changeset versionpnpm turbo run build
pnpm changeset publishFor packages that shouldn't be published to public registries:
- Set
"private": trueinpackage.json(JS) - Add to
.changeset/config.jsonignorearray - Skip CI publish jobs for that package path
For emergency releases or registry issues:
# 1. Tag manually
git tag v1.0.0 packages/js/example-package
# 2. Build and publish
cd packages/js/example-package
npm publish --access public
# 3. Push tag
git push origin v1.0.0Run pnpm changeset before merging to main if you want a version bump.
Check the CI logs for specific errors. Common issues:
NPM_TOKENnot set or expired- Package name already taken
- Version already published
Use pnpm changeset version to interactively adjust versions before the version PR.
| Registry | Token Secret | Variable |
|---|---|---|
| npm | NPM_TOKEN |
registry in .npmrc |
| Packagist | PACKAGIST_TOKEN |
Configured in workflow |
| PyPI | PYPI_TOKEN |
uv publish --token |
| crates.io | CARGO_REGISTRY_TOKEN |
~/.cargo/credentials |
| Go | GitHub Actions auto-publish | GITHUB_TOKEN |