This document describes the release process for the Gaia MCP Server project.
Gaia MCP Server uses semantic-release for automated version management and package publishing. The release process is triggered automatically when commits are pushed to specific branches.
The following branches are configured for releases:
main: Stable releases+([0-9])?(.{+([0-9]),x}).x: Maintenance releasesrelease/rc: Release candidates (withrcprerelease tag)release/dev: Development releases (withdevprerelease tag)
This project follows the Conventional Commits specification for structured commit messages. This format is used to automatically determine version bumps and generate the CHANGELOG.
<type>(<scope>): <subject>
<body>
<footer>
Types that trigger releases:
feat: A new feature (triggers a minor version bump)fix: A bug fix (triggers a patch version bump)
Types that do NOT trigger releases by default:
docs: Documentation changesstyle: Changes that don't affect code functionality (formatting, etc.)refactor: Code changes that neither fix a bug nor add a featureperf: Performance improvementstest: Adding or fixing testschore: Changes to the build process or auxiliary tools
Including BREAKING CHANGE: in the commit footer or appending ! to the type/scope will trigger a major version bump.
Example:
feat(api)!: rename endpoints for better clarity
BREAKING CHANGE: API endpoints have been renamed to follow new naming convention
When commits are pushed to configured branches, the following process happens automatically:
- Commit analysis determines the next version number
- Release notes are generated from commit messages
- CHANGELOG.md is updated
- package.json version is updated
- Changes are committed to Git
- A Git tag is created
- The package is published to npm
For manual releases, use the following npm scripts:
# Standard version bump (determined by commits)
npm run release
# Specific version bumps
npm run release:patch
npm run release:minor
npm run release:majorThe release process uses the following semantic-release plugins:
@semantic-release/commit-analyzer: Analyzes commits to determine version bump@semantic-release/release-notes-generator: Generates release notes from commits@semantic-release/changelog: Updates CHANGELOG.md@semantic-release/npm: Updates package.json and publishes to npm@semantic-release/git: Commits changes to Git and creates tags
package.json: Version number is updatedCHANGELOG.md: Release notes are added
- Ensure all commits follow the Conventional Commits format
- Use appropriate commit types to trigger correct version bumps
- For breaking changes, use the
!syntax or includeBREAKING CHANGE:in commit message - Push to the appropriate branch based on the release type
If you need to trigger a release without making any code changes (for example, when you've already committed all your changes but semantic-release didn't trigger a release), you can create an empty commit with the appropriate semantic commit message:
# For a patch release
git commit --allow-empty -m "fix: trigger release"
# For a minor release
git commit --allow-empty -m "feat: trigger release"
# For a major release
git commit --allow-empty -m "feat!: trigger release"After creating the empty commit, push it to the appropriate branch to trigger the release workflow:
git push origin <branch-name>Note that only commits with feat:, fix:, or those with BREAKING CHANGE: or the ! syntax will trigger a release. Commits with other types like refactor:, chore:, docs:, etc. won't trigger a release by default.