The easiest way to release new versions is through automatic semantic releases. Just commit with the right message format and push and everything else happens automatically.
Use these prefixes to control what type of release happens:
fix: resolve CLI argument parsing bug # → patch release (4.1.0 → 4.1.1)
feat: add new agent orchestration mode # → minor release (4.1.0 → 4.2.0)
feat!: redesign CLI interface # → major release (4.1.0 → 5.0.0)When you push commits with fix: or feat:, GitHub Actions will:
- ✅ Analyze your commit messages
- ✅ Bump version in
package.json - ✅ Generate changelog
- ✅ Create git tag
- ✅ Publish to NPM automatically
- ✅ Create GitHub release with notes
# Make your changes
git add .
git commit -m "feat: add team collaboration mode"
git push
# That's it! Release happens automatically 🎉
# Users can now run: npx aiox-core (and get the new version)These commit types won't create releases (use them for maintenance):
chore: update dependencies # No release
docs: fix typo in readme # No release
style: format code # No release
test: add unit tests # No releasenpm run release:test # Safe to run locally - tests the confignpm run version:patch # 4.1.0 → 4.1.1 (bug fixes)
npm run version:minor # 4.1.0 → 4.2.0 (new features)
npm run version:major # 4.1.0 → 5.0.0 (breaking changes)
# Then manually publish:
npm publish
git push && git push --tagsYou can also trigger releases manually through GitHub Actions workflow dispatch if needed.
If your merge to main didn't trigger a release:
- Check commit messages - Only
fix:andfeat:prefixes trigger releases - Verify CI passed - Release only runs if lint, typecheck, and test pass
- Check workflow logs - Go to Actions → Semantic Release to see details
Common issues and solutions:
| Error | Solution |
|---|---|
ENOGHTOKEN |
GITHUB_TOKEN secret missing or expired |
ENOPKGAUTH |
NPM_TOKEN secret missing or invalid |
ENOTINHISTORY |
Branch doesn't have proper history (use fetch-depth: 0) |
EINVALIDNPMTOKEN |
Regenerate NPM token with publish permissions |
To merge without triggering a release, use one of these:
# Method 1: Use non-release prefix
git commit -m "chore: update dependencies"
# Method 2: Add [skip ci] to commit message
git commit -m "feat: new feature [skip ci]"If automatic release fails, you can manually release:
npm run version:patch # or minor/major
git push && git push --tags
npm publish| File | Purpose |
|---|---|
.releaserc.json |
Semantic release configuration |
.github/workflows/semantic-release.yml |
GitHub Actions workflow |
package.json |
Version source, npm scripts |
Last updated: Story 6.17 - Semantic Release Automation