/gaia-release
user-facing* --modules is documented in SKILL.md but not yet implemented in scripts/version-bump.js — see Arguments section.
What it does
/gaia-release executes the GAIA framework release procedure: version bump, commit, tag, push, and GitHub Release creation. It wraps the version-bump script and enforces the main-only release branch policy. Always run with --dry-run first to preview changes.
When to use it
- You are explicitly cutting a manual release after merging a sprint PR to main.
- You are performing a hotfix release via the
hotfix/{ticket-id}branch convention and need the tag+publish ceremony. - You need to promote a release candidate to its final stable version (
--strip-prerelease).
Scope clarification
The primary release path is automated via release.yml (GitHub Actions). When code merges to main, the workflow detects qualifying commits under plugins/gaia/, computes the semver bump, opens a release PR, and -- on merge of that PR -- creates the tag and GitHub Release automatically. As of PR #771, the commit-classification range uses a tag-based anchor (git describe --tags --abbrev=0 --match 'v*') instead of the previous github.event.before SHA, which resolves the symptom where the version-bump PR sometimes never opened after squash-merge.
/gaia-release remains in the Phase-5 deployment catalog for explicit manual invocation only. Typical uses: hotfix releases, RC promotions, and resolving version drift between package.json and the config. The framework does not auto-suggest /gaia-release after staging-to-main merges.
Prerequisites
- You must be on the main branch with a clean working tree.
- The sprint PR must already be merged. Releases happen only after sprint merge.
Arguments
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| Bump specifier | patch | minor | major | none | X.Y.Z |
Yes | -- | Standard semver bump, or none to increment only the RC counter (requires existing -rc.N suffix), or an explicit version string. |
--prerelease rc |
Flag | No | Off | Turn the bump into an RC prerelease (e.g., 1.127.2 becomes 1.128.0-rc.1 for a minor bump). |
--strip-prerelease |
Flag | No | Off | Drop the -rc.N suffix without changing version numbers. Promotes an RC to its final stable cut. |
--modules mod1,mod2 |
Comma-separated list | No | -- | Also bump per-module config.yaml and manifest entries. Valid modules: core, lifecycle, dev, creative, testing, or all. |
|
Implementation note: Currently documented in SKILL.md but not implemented in |
||||
--dry-run |
Flag | No | Off | Print the planned changes and exit without writing. Use this first on every release. |
How to invoke
/gaia-release patch --dry-run
/gaia-release minor --prerelease rc
/gaia-release --strip-prerelease
What it does step by step
- Verify main branch Confirms you are on main with a clean working tree. Halts if not.
- Dry-run the bump Runs the version bump in preview mode showing the current version, new version, and files that would change.
- Execute the bump Updates package.json and the framework version config key.
- Commit Creates a conventional commit with the version bump.
- Tag Creates an annotated git tag for the new version.
- Push Pushes the commit and tag to the remote.
- Create GitHub Release Creates a GitHub Release from the changelog, flagging RC builds as prerelease.
- Post-release verification Confirms the release is published and the tag is visible.
Inputs
| Input | Source | Description |
|---|---|---|
| Bump specifier | Command argument | patch, minor, major, none (RC increment only), or an explicit version. |
--prerelease rc | Command argument (optional) | Create an RC prerelease version. |
--strip-prerelease | Command argument (optional) | Promote an RC to its final release. |
--modules mod1,mod2 | Command argument (optional) | Also bump per-module config and manifest entries. Valid: core, lifecycle, dev, creative, testing, all. Implementation note: Currently documented in SKILL.md but not implemented in scripts/version-bump.js. Passing --modules has no effect on the bump. |
--dry-run | Command argument (optional) | Preview changes without writing. |
Outputs
| Output | Location | Description |
|---|---|---|
| Version bump | package.json + config | Updated version number in both locations. |
| Git tag | Git | Annotated tag for the release version. |
| GitHub Release | GitHub | Published release with changelog notes. |
Examples
Note: No example demonstrates --modules because the flag is currently a no-op — see Arguments section for context.
1. Explicit manual patch release
> /gaia-release patch --dry-run
Current version: 1.127.1
New version: 1.127.2
Files to update:
- package.json
- .gaia/config/project-config.yaml (framework_version)
Dry run complete. No files changed.
> /gaia-release patch
Bumping version to 1.127.2...
Committing: chore(release): bump version to v1.127.2
Tagging: v1.127.2
Pushing to origin/main...
Creating GitHub Release v1.127.2...
Release v1.127.2 published.
2. Minor release with --dry-run preview
> /gaia-release minor --dry-run
Current version: 1.127.2
New version: 1.128.0
Files to update:
- package.json
- .gaia/config/project-config.yaml (framework_version)
Dry run complete. No files changed.
> /gaia-release minor
Bumping version to 1.128.0...
Committing: chore(release): bump version to v1.128.0
Tagging: v1.128.0
Pushing to origin/main...
Creating GitHub Release v1.128.0...
Release v1.128.0 published.
3. RC prerelease workflow
Create a release candidate, then increment the RC counter with none.
> /gaia-release minor --prerelease rc
Current version: 1.128.0
New version: 1.129.0-rc.1
Bumping version to 1.129.0-rc.1...
Committing: chore(release): bump version to v1.129.0-rc.1
Tagging: v1.129.0-rc.1
Creating GitHub Release v1.129.0-rc.1 (prerelease)...
Release v1.129.0-rc.1 published (marked prerelease).
> /gaia-release none
Current version: 1.129.0-rc.1
New version: 1.129.0-rc.2
Bumping version to 1.129.0-rc.2...
Tagging: v1.129.0-rc.2
Creating GitHub Release v1.129.0-rc.2 (prerelease)...
Release v1.129.0-rc.2 published (marked prerelease).
4. Hotfix release lane
After a hotfix is developed on a hotfix/{ticket-id} branch targeting main, the release ceremony composes /gaia-deploy and /gaia-release:
# Development (on hotfix/E12-S4 branch targeting main):
> /gaia-dev-story E12-S4
> /gaia-review-all # full reviews including wire-verification
# Release ceremony (on main after PR merge):
> /gaia-release patch
Current version: 1.128.0
New version: 1.128.1
Bumping version to 1.128.1...
Committing: chore(release): bump version to v1.128.1
Tagging: v1.128.1
Creating GitHub Release v1.128.1...
Release v1.128.1 published.
# Deploy:
> /gaia-deploy --env production
> /gaia-post-deploy
5. Promote an RC to stable with --strip-prerelease
> /gaia-release --strip-prerelease
Current version: 1.129.0-rc.2
New version: 1.129.0
Bumping version to 1.129.0...
Committing: chore(release): bump version to v1.129.0
Tagging: v1.129.0
Pushing to origin/main...
Creating GitHub Release v1.129.0...
Release v1.129.0 published (stable).
What to run next
- Verify the release on GitHub with
gh release view v1.127.2.
Troubleshooting
Not on main branch
Releases can only be cut from main. Merge your sprint PR first.
Working tree is dirty
Commit or stash your changes before releasing.
Version targets disagree
The script detected version drift between package.json and the config. Supply an explicit version to resolve: /gaia-release 1.127.2.