Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,26 +112,30 @@ lefthook install

Releases are managed by project maintainers. See `rakelib/release.rake` for the release process.

**Before releasing**, ensure the CHANGELOG.md is updated:
1. Move items from "Unreleased" to a new version section
2. Add the release date to the new version heading

The release task handles:
- Version bumping
- Version bumping (via `gem-release`, included in dev dependencies)
- Git tagging
- Gem publishing to RubyGems

To create a release (maintainers only):

```bash
# Bump patch version and release
rake release[patch]
bundle exec rake release[patch]

# Bump minor version and release
rake release[minor]
bundle exec rake release[minor]

# Bump major version and release
rake release[major]
bundle exec rake release[major]

# Set explicit version and release
rake release[0.2.0]
bundle exec rake release[0.2.0]

# Dry run (no actual release)
rake release[patch,true]
bundle exec rake release[patch,true]
```
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
source 'https://rubygems.org'

group :development do
gem 'gem-release', '~> 2.2'
gem 'lefthook', '~> 1.6.18'
gem 'rake', '~> 13.0'
gem 'rubocop', '~> 1.21'
Expand Down
26 changes: 6 additions & 20 deletions rakelib/release.rake
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
desc <<~DESC
Release the gem with the given version.

This task depends on the gem-release gem which is installed via `gem install gem-release`.
This task depends on the gem-release gem (included in development dependencies).

Arguments:
version: Can be 'patch', 'minor', 'major', or an explicit version (e.g., '0.2.0' or '0.2.0.beta.1')
Expand Down Expand Up @@ -44,7 +44,7 @@ task :release, %i[version dry_run] do |_t, args|

puts "Command failed (attempt #{retries}/#{max_retries}). Retrying..."
if command.include?('gem push') || command.include?('gem release')
puts 'Enter new RubyGems OTP if needed:'
puts 'If this was an OTP issue, enter new RubyGems OTP:'
end
end
end
Expand All @@ -67,24 +67,11 @@ task :release, %i[version dry_run] do |_t, args|
log 'Pulling latest changes...', force: true
sh_with_retry('git pull --rebase')

# Determine version bump type
bump_type = case version
when 'patch', 'minor', 'major'
version
end

# Bump version using gem-release
log 'Bumping gem version...', force: true
bump_command = if bump_type
"gem bump --version #{bump_type} --no-commit"
else
"gem bump --version #{version} --no-commit"
end
sh_with_retry(bump_command)

# Get the new version
require_relative '../lib/uber_task/version'
# Force reload of version file
sh_with_retry("gem bump --version #{version} --no-commit")

# Get the new version by loading the updated version file
load File.join(gem_root, 'lib', 'uber_task', 'version.rb')
new_version = UberTask::VERSION

Expand Down Expand Up @@ -124,7 +111,6 @@ task :release, %i[version dry_run] do |_t, args|
log '=' * 80, force: true
log '', force: true
log 'Next steps:', force: true
log ' 1. Update CHANGELOG.md with release notes', force: true
github_url = 'https://github.com/shakacode/uber_task/releases/new'
log " 2. Create a GitHub release at #{github_url}", force: true
log " 1. Create a GitHub release at #{github_url}", force: true
end