diff options
-rw-r--r-- | doc/playbooks/RELEASING.md | 29 | ||||
-rw-r--r-- | task/release.rake | 26 |
2 files changed, 41 insertions, 14 deletions
diff --git a/doc/playbooks/RELEASING.md b/doc/playbooks/RELEASING.md index 475a748dcc..8178f2f925 100644 --- a/doc/playbooks/RELEASING.md +++ b/doc/playbooks/RELEASING.md @@ -48,7 +48,8 @@ using: $ git cherry-pick -m 1 dd6aef9 ``` -The `rake release:patch` command will automatically handle cherry-picking, and is further detailed below. +The `rake release:prepare_patch` command will automatically handle +cherry-picking, and is further detailed below. ## Changelog @@ -128,16 +129,22 @@ per bug fixed. Then run `rake release` from the `-stable` branch, and pour yourself a tasty drink! PRs containing regression fixes for a patch release of the current minor version -are merged to master. These commits are then cherry-picked from master onto the -minor branch (`1-12-stable`). - -There is a `rake release:patch` rake task that automates creating a patch release. -It takes a single argument, the _exact_ patch release being made (e.g. `1.12.3`), -and checks out the appropriate stable branch (`1-12-stable`), grabs the `1.12.3` -milestone from GitHub, ensures all PRs are closed, and then cherry-picks those changes -(and only those changes) to the stable branch. The task then bumps the version in the -version file, prompts you to update the `CHANGELOG.md`, then will commit those changes -and run `rake release`! +are merged to master. These commits need to be cherry-picked from master onto +the minor branch (`1-12-stable`). + +There is a `rake release:prepare_patch` rake task that helps with creating a patch +release. It takes a single argument, the _exact_ patch release being made (e.g. +`1.12.3`), but if not given it will bump the tiny version number by one. This +task checks out the appropriate stable branch (`1-12-stable`), grabs the +`1.12.3` milestone from GitHub, ensures all PRs are closed, and then +cherry-picks those changes (and only those changes) to a new branch based off +the stable branch. Then bumps the version in the version file and commits that +change on top of the cherry-picks. + +Now you have a release branch ready to be merged into the stable branch. You'll +want to open a PR from this branch into the stable branch and provided CI is +green, you can go ahead, merge the PR and run `rake release` from the updated +stable branch. ## Beta testing diff --git a/task/release.rake b/task/release.rake index 65283f0750..be0241bffb 100644 --- a/task/release.rake +++ b/task/release.rake @@ -144,10 +144,21 @@ namespace :release do end desc "Prepare a patch release with the PRs from master in the patch milestone" - task :prepare_patch do - version = bundler_spec.version.to_s + task :prepare_patch, :version do |_t, args| + version = args.version + + version ||= begin + version = bundler_spec.version + segments = version.segments + if segments.last.is_a?(String) + segments << "1" + else + segments[-1] += 1 + end + segments.join(".") + end - puts "Cherry-picking PRs milestoned for #{version} into the stable branch..." + puts "Cherry-picking PRs milestoned for #{version} (currently #{bundler_spec.version}) into the stable branch..." milestones = gh_api_request(:path => "repos/bundler/bundler/milestones?state=open") unless patch_milestone = milestones.find {|m| m["title"] == version } @@ -173,6 +184,15 @@ namespace :release do warn "Opening a new shell to fix the cherry-pick errors" abort unless system("zsh") end + + version_file = "lib/bundler/version.rb" + version_contents = File.read(version_file) + unless version_contents.sub!(/^(\s*VERSION = )"#{Gem::Version::VERSION_PATTERN}"/, "\\1#{version.to_s.dump}") + abort "failed to update #{version_file}, is it in the expected format?" + end + File.open(version_file, "w") {|f| f.write(version_contents) } + + sh("git", "commit", "-am", "Version #{version}") end desc "Open all PRs that have not been included in a stable release" |