Skip to content

Release Process

Back to main README

This document provides a checklist for releasing new versions of cov-loupe.

Pre-Release Checklist

1. Documentation Review

  • [ ] RELEASE_NOTES.md: Update version header
  • Update the version section header to final version (e.g., ## v#{version})
  • For major releases: Ensure all breaking changes are documented with migration examples
  • Verify new features and bug fixes are listed

  • [ ] README.md: Verify examples and feature list are current

  • [ ] Documentation: Ensure all docs in docs/ are up to date

2. Code Quality

  • [ ] Tests: All tests passing (bundle exec rspec)
  • Verify via git hooks or run manually
  • Check coverage is still excellent (>95%)

  • [ ] Linting: No Rubocop violations (bundle exec rubocop)

  • Verify via git hooks or run manually

  • [ ] Version: Update lib/cov_loupe/version.rb to release version

  • Remove .pre.X suffix for stable releases

3. Cleanup

  • [ ] Untracked files: Review git status for files that should be:
  • Added to .gitignore (temp files, local experiments, AI reports)
  • Committed (valuable documentation or examples)
  • Deleted (obsolete files)

  • [ ] Temporary files: Remove or ignore:

  • *.txt files (r.txt, rubocop.txt, todo.txt, etc.)
  • Experimental config files (.rubocop.yml.new, etc.)
  • Local notes (CODING_AGENT_NOTES.md, architecture_insights.md, etc.)
  • Work-in-progress directories (screencast/, untracked-ai-reports/, etc.)

4. Build Verification

  • [ ] Build gem: Verify gem builds without errors

    gem build cov-loupe.gemspec
    

  • [ ] Test installation: Install and test locally

    gem install cov-loupe-*.gem
    cov-loupe --version
    cov-loupe --help
    # Test on actual project
    cd /path/to/test/project
    cov-loupe list
    

5. Git Release

  • [ ] Commit changes: Commit version bump and RELEASE_NOTES.md updates

    git add lib/cov_loupe/version.rb RELEASE_NOTES.md
    git commit -m "Release version #{version}"
    

  • [ ] Create tag: Tag the release

    git tag -a v#{version} -m "Version #{version}"
    

  • [ ] Push: Push commits and tags

    git push origin main --follow-tags
    

6. Publish Gem

  • [ ] Build final gem: Build from tagged version

    gem build cov-loupe.gemspec
    

  • [ ] Push to RubyGems: Publish the gem

    gem push cov-loupe-#{version}.gem
    

  • [ ] Verify publication: Check gem appears on RubyGems.org

  • Visit https://rubygems.org/gems/cov-loupe
  • Verify new version is listed
  • Check that documentation links work

7. GitHub Release

  • [ ] Create GitHub release: Go to https://github.com/keithrbennett/cov-loupe/releases/new
  • Select the tag you just pushed
  • Title: Version #{version}
  • Description: Copy relevant sections from RELEASE_NOTES.md
  • Attach the .gem file (optional)

8. Post-Release

  • [ ] Announcement: Consider announcing on:
  • Ruby Weekly
  • Reddit (r/ruby)
  • Slack/Discord communities
  • Social media

  • [ ] Update dependencies: For projects using this gem

  • Update your own projects to use new version
  • Test integration

  • [ ] Prepare for next release:

  • Optionally create a new section in RELEASE_NOTES.md for next version
  • Consider bumping to next pre-release version if starting new development cycle

Version Numbering

Follow Semantic Versioning:

  • Major (X.0.0): Breaking changes
  • Minor (0.X.0): New features, backward compatible
  • Patch (0.0.X): Bug fixes, backward compatible
  • Pre-release (X.Y.Z.pre.N): Development versions

Rollback Procedure

If a critical issue is discovered after release:

  1. Yank the gem (removes from RubyGems but preserves install history):

    gem yank cov-loupe -v #{version}
    

  2. Fix the issue in a new patch version

  3. Release the fixed version following this checklist

  4. Communicate: Update GitHub release notes and announce the issue + fix

Notes

  • GitHub Actions runs tests and Rubocop on every commit (via hooks)
  • Pre-commit hooks ensure code quality before commits