This project uses Changesets for automated version management and publishing to npm and crates.io.
The release process is fully automated via GitHub Actions. All you need to do is:
When you make changes that should be included in the next release, add a changeset:
pnpm changeset
This will prompt you to:
patch (bug fix), minor (feature), or major (breaking change)This creates a markdown file in .changeset/ that describes the change.
Example changeset:
---
"@ifc-lite/parser": minor
"@ifc-lite/renderer": minor
---
Add support for IFC4X3 entities
package.json and Cargo.toml filesCHANGELOG.md with all accumulated changesPR with changeset → Merge to main → "Version Packages" PR created
↓
Review & Merge
↓
Build → Publish npm → Publish Rust → Create GitHub Release
If you need to manually release:
# 1. Add changeset if you haven't
pnpm changeset
# 2. Bump versions
pnpm version
# 3. Commit changes
git add .
git commit -m "chore: version packages"
# 4. Build and publish
pnpm release
All packages (npm and Rust) are kept at the same version via:
@ifc-lite/* packages bump togetherscripts/sync-versions.js syncs Cargo.toml after npm version bumpsThe GitHub Actions workflow needs these secrets:
NPM_TOKEN: npm access token with publish permissionsCARGO_TOKEN: crates.io API tokenGITHUB_TOKEN: Automatically provided by GitHub ActionsA: No! Changesets handles all version bumps automatically.
A: Only when the “Version Packages” PR is merged to main.
A: Yes! Review the “Version Packages” PR to see all version bumps and CHANGELOG entries.
A: The “Version Packages” PR won’t include your changes. Add a changeset and push to main - the bot will update the PR.
A: No. All packages are linked and release together with the same version for consistency.
A: The workflow has built-in retry logic. Rust crates publish with 30s delays between each. If a version is already published, it’s skipped safely.
patch: Bug fixes, docs, testsminor: New features (backwards compatible)major: Breaking changes.changeset/ (not just README.md and config.json)@ifc-lite/* scopepnpm version locally to syncThis project migrated from manual versioning to Changesets. The old workflow:
The new workflow: