
nomos-release-process
by autonomous-bits
Configuration scripting language that compiles reusable, cascading configs into deterministic, versioned snapshots for IaC
SKILL.md
name: nomos-release-process description: Automates release workflows for the Nomos monorepo per RELEASE.md including version tagging, changelog promotion, GitHub releases, and module-specific versioning. Use this when preparing releases, creating tags, or publishing new versions.
Nomos Release Process
This skill automates release workflows for the Nomos monorepo, handling version tagging, changelog updates, and GitHub releases for independent modules.
When to Use This Skill
- Preparing to release a new version of a Nomos module
- Creating version tags for libs or apps
- Promoting Unreleased changelog entries to versioned sections
- Publishing GitHub Releases
- Troubleshooting release issues
- Verifying release readiness
Nomos Versioning Strategy
Nomos is a monorepo with independent module versioning:
Module Types
Libraries (libs/):
libs/compiler- Tag:libs/compiler/v0.x.xlibs/parser- Tag:libs/parser/v0.x.xlibs/provider-downloader- Tag:libs/provider-downloader/v0.x.xlibs/provider-proto- Tag:libs/provider-proto/v0.x.x
Applications (apps/):
apps/command-line- Tag:apps/command-line/v1.x.x
Versioning Philosophy
- v0.x.x (pre-1.0): API unstable, breaking changes allowed in MINOR versions
- v1.x.x (stable): Breaking changes require MAJOR version bump
- Each module versions independently
- Follow Semantic Versioning (https://semver.org/)
Release Workflow
Step 1: Pre-Release Verification
Before starting, verify readiness:
# 1. Checkout main and sync
git checkout main
git pull origin main
# 2. Run full test suite
make test-all
make test-race
# 3. Verify linting
make lint
# 4. Check for replace directives (should be removed)
grep "replace " libs/compiler/go.mod
grep "replace " libs/parser/go.mod
# If found, see docs/guides/removing-replace-directives.md
# 5. Verify CI is green
# Check: https://github.com/autonomous-bits/nomos/actions
Step 2: Determine Version Bump
SemVer rules:
Pre-1.0 modules (v0.x.x):
- MINOR (0.X.0) - Breaking changes OK (API unstable)
- PATCH (0.0.X) - Bug fixes, performance, non-breaking features
Stable modules (v1.x.x):
- MAJOR (X.0.0) - Breaking changes (API incompatibility)
- MINOR (0.X.0) - New features (backward-compatible)
- PATCH (0.0.X) - Bug fixes (backward-compatible)
Check Unreleased section:
# Look for breaking changes
grep "BREAKING:" libs/compiler/CHANGELOG.md
# If found in pre-1.0: MINOR bump (0.X.0)
# If found in v1.x.x: MAJOR bump (X.0.0)
Examples:
libs/compilercurrently atv0.2.1with breaking changes →v0.3.0apps/command-linecurrently atv1.2.0with new feature →v1.3.0libs/parsercurrently atv0.1.5with bug fix →v0.1.6
Step 3: Update CHANGELOG.md
Move Unreleased entries to new version section:
Before:
## [Unreleased]
### Added
- [Compiler] Add provider caching (#152)
### Fixed
- [Compiler] Fix reference resolution bug (#160)
## [0.2.1] - 2025-11-15
After:
## [Unreleased]
## [0.3.0] - 2025-12-29
### Added
- [Compiler] Add provider caching (#152)
### Fixed
- [Compiler] Fix reference resolution bug (#160)
## [0.2.1] - 2025-11-15
Update compare links at bottom:
[Unreleased]: https://github.com/autonomous-bits/nomos/compare/libs/compiler/v0.3.0...HEAD
[0.3.0]: https://github.com/autonomous-bits/nomos/compare/libs/compiler/v0.2.1...libs/compiler/v0.3.0
[0.2.1]: https://github.com/autonomous-bits/nomos/compare/libs/compiler/v0.2.0...libs/compiler/v0.2.1
Commit changelog:
git add libs/compiler/CHANGELOG.md
git commit -m "📝 docs(compiler): prepare v0.3.0 release"
git push origin main
Step 4: Create Annotated Tag
Format: libs/<module>/v<MAJOR>.<MINOR>.<PATCH>
Use annotated tags (include metadata):
# Basic annotated tag
git tag -a libs/compiler/v0.3.0 -m "libs/compiler v0.3.0"
# With detailed release notes
git tag -a libs/compiler/v0.3.0 -m "libs/compiler v0.3.0
Release highlights:
- Added provider caching for deterministic builds
- Fixed reference resolution for nested paths
- Performance improvements (~30% faster compilation)
See CHANGELOG.md for full details."
For CLI:
git tag -a apps/command-line/v1.3.0 -m "apps/command-line v1.3.0"
Step 5: Push Tag to GitHub
# Push specific tag
git push origin libs/compiler/v0.3.0
# Or push all tags (use carefully)
git push origin --tags
Step 6: Verify Tag Exists
# Check locally
git tag -l "libs/compiler/*"
# Check remotely
git ls-remote --tags origin | grep libs/compiler
# View on GitHub
# https://github.com/autonomous-bits/nomos/tags
Step 7: Create GitHub Release (Recommended)
Via GitHub UI:
- Go to https://github.com/autonomous-bits/nomos/releases/new
- Choose tag: Select
libs/compiler/v0.3.0 - Release title:
libs/compiler v0.3.0 - Description: Copy from CHANGELOG.md:
## Added - Add provider caching for deterministic builds (#152) ## Fixed - Fix reference resolution for nested paths (#160) - Pre-release: Check if version is v0.x.x
- Publish release
Via GitHub CLI:
gh release create libs/compiler/v0.3.0 \
--title "libs/compiler v0.3.0" \
--notes-file libs/compiler/CHANGELOG.md \
--prerelease # For v0.x.x versions
Common Release Scenarios
Scenario 1: Release Compiler Library v0.3.0
Given:
- Current version: v0.2.1
- Unreleased has: 2 Added, 1 Fixed
- No breaking changes (but pre-1.0 allows breaking in MINOR)
Steps:
# 1. Verify
git checkout main && git pull
make test-all && make test-race
# 2. Update CHANGELOG
# Move Unreleased → [0.3.0] - 2025-12-29
# Update compare links
# 3. Commit
git add libs/compiler/CHANGELOG.md
git commit -m "📝 docs(compiler): prepare v0.3.0 release"
git push origin main
# 4. Tag
git tag -a libs/compiler/v0.3.0 -m "libs/compiler v0.3.0"
git push origin libs/compiler/v0.3.0
# 5. Create GitHub Release
gh release create libs/compiler/v0.3.0 \
--title "libs/compiler v0.3.0" \
--notes-from-tag \
--prerelease
Scenario 2: Release CLI v1.3.0
Given:
- Current version: v1.2.0
- New feature:
--allow-missing-providerflag - Bug fix: exit code for strict mode
Steps:
# 1. Update CHANGELOG
# Move to [1.3.0] - 2025-12-29 (MINOR bump for new feature)
# 2. Commit
git add apps/command-line/CHANGELOG.md
git commit -m "📝 docs(cli): prepare v1.3.0 release"
git push origin main
# 3. Tag
git tag -a apps/command-line/v1.3.0 -m "apps/command-line v1.3.0"
git push origin apps/command-line/v1.3.0
# 4. GitHub Release (stable, not pre-release)
gh release create apps/command-line/v1.3.0 \
--title "Nomos CLI v1.3.0" \
--notes-from-tag
Scenario 3: Bug Fix Release (PATCH)
Given:
- Current version: v0.1.5
- Only bug fixes in Unreleased
Steps:
# PATCH bump: v0.1.5 → v0.1.6
# Update CHANGELOG → [0.1.6]
git add libs/parser/CHANGELOG.md
git commit -m "📝 docs(parser): prepare v0.1.6 release"
git push origin main
git tag -a libs/parser/v0.1.6 -m "libs/parser v0.1.6"
git push origin libs/parser/v0.1.6
Scenario 4: Multiple Module Release
Given: Need to release both compiler and parser
Steps:
# Release compiler first
# ... follow normal flow for libs/compiler/v0.3.0
# Then release parser
# ... follow normal flow for libs/parser/v0.2.0
# Each module releases independently
# Tags: libs/compiler/v0.3.0, libs/parser/v0.2.0
Consuming Released Modules
Once tags are pushed, users can install:
# Specific version
go get github.com/autonomous-bits/nomos/libs/compiler@v0.3.0
# Latest version
go get github.com/autonomous-bits/nomos/libs/compiler@latest
# In go.mod
require (
github.com/autonomous-bits/nomos/libs/compiler v0.3.0
)
List available versions:
go list -m -versions github.com/autonomous-bits/nomos/libs/compiler
Troubleshooting
Issue: Tag Already Exists
Solution (if just created and not yet used):
# Delete local tag
git tag -d libs/compiler/v0.3.0
# Delete remote tag (CAUTION: breaks consumers)
git push origin --delete libs/compiler/v0.3.0
# Create correct tag
git tag -a libs/compiler/v0.3.0 -m "libs/compiler v0.3.0"
git push origin libs/compiler/v0.3.0
Warning: Never delete published tags that consumers may be using!
Issue: CI/CD Failure After Tag Push
Cause: Tests failing or lint errors
Solution:
# 1. Delete bad tag
git push origin --delete libs/compiler/v0.3.0
git tag -d libs/compiler/v0.3.0
# 2. Fix issues on main
git checkout main
# ... fix issues
make test-all
git commit -m "fix: resolve CI issues"
git push origin main
# 3. Re-tag
git tag -a libs/compiler/v0.3.0 -m "libs/compiler v0.3.0"
git push origin libs/compiler/v0.3.0
Issue: go get Cannot Fetch Module
Symptoms:
go get github.com/autonomous-bits/nomos/libs/compiler@v0.3.0
# Error: unknown revision
Debug:
# 1. Verify tag exists remotely
git ls-remote --tags origin | grep libs/compiler/v0.3.0
# 2. Check tag format (must be exact)
# Correct: libs/compiler/v0.3.0
# Wrong: libs/compiler/0.3.0 (missing 'v')
# Wrong: compiler/v0.3.0 (missing 'libs/')
# 3. Wait for Go module proxy
# Can take a few minutes to propagate
# Check: https://proxy.golang.org/github.com/autonomous-bits/nomos/libs/compiler/@v/list
Issue: Replace Directives Block Release
Symptoms:
// go.mod contains:
replace github.com/autonomous-bits/nomos/libs/parser => ../parser
Solution:
# 1. Remove replace directive
# See: docs/guides/removing-replace-directives.md
# 2. Test without replace
go mod tidy
go test ./...
# 3. Commit
git commit -m "🔧 chore: remove replace directive for release"
git push origin main
# 4. Then proceed with release
Release Checklist Template
Copy this checklist when preparing releases:
## Release Checklist: libs/compiler v0.3.0
- [ ] Main branch up-to-date: `git pull origin main`
- [ ] All tests pass: `make test-all`
- [ ] Race detector clean: `make test-race`
- [ ] Linting clean: `make lint`
- [ ] No replace directives: `grep replace go.mod`
- [ ] CI green on GitHub
- [ ] CHANGELOG updated with new version section
- [ ] Compare links updated in CHANGELOG
- [ ] Version bump determined (MAJOR.MINOR.PATCH)
- [ ] Changelog committed: `git commit -m "docs: prepare vX.Y.Z"`
- [ ] Tag created: `git tag -a libs/compiler/vX.Y.Z`
- [ ] Tag pushed: `git push origin libs/compiler/vX.Y.Z`
- [ ] Tag verified: `git ls-remote --tags origin | grep vX.Y.Z`
- [ ] GitHub Release created (UI or gh CLI)
- [ ] Module fetchable: `go get @vX.Y.Z`
Reference Documentation
For complete release guidelines, see:
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
1ヶ月以内に更新
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon




