From e103a9c3e94f984c87d3ed385695d7d9d00de084 Mon Sep 17 00:00:00 2001 From: Gio Lodi Date: Wed, 25 Sep 2024 16:19:30 +1000 Subject: [PATCH] Consolidate backmerge methods and move annotation there --- fastlane/Fastfile | 1 + fastlane/lanes/release.rb | 39 ++-------------- fastlane/lib/release_helpers.rb | 83 +++++++++++++++++++-------------- 3 files changed, 52 insertions(+), 71 deletions(-) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 0a3c61ca1..2eb459989 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -63,6 +63,7 @@ VERSION_FILE = Fastlane::Wpmreleasetoolkit::Versioning::AndroidVersionFile.new(v import 'lanes/build.rb' import 'lanes/localization.rb' import 'lanes/release.rb' +import 'lib/release_helpers.rb' platform :android do ENV['PROJECT_ROOT_FOLDER'] = "#{File.dirname(File.expand_path(__dir__))}/" diff --git a/fastlane/lanes/release.rb b/fastlane/lanes/release.rb index 848276060..ebeb331ff 100644 --- a/fastlane/lanes/release.rb +++ b/fastlane/lanes/release.rb @@ -2,8 +2,6 @@ # Lanes related to the Release Process (Code Freeze, Betas, Final Build, App Store Submission…) -require_relative '../lib/release_helpers' - platform :android do desc 'Creates a new release branch from the current default branch' lane :start_code_freeze do |skip_prechecks: false, skip_confirm: false| @@ -110,13 +108,7 @@ trigger_beta_build(branch_to_build: release_branch_name(release_version: version)) - pr_url = create_backmerge_pr! - - message = <<~MESSAGE - Code freeze completed successfully. Next, review and merge the [integration PR](#{pr_url}). - MESSAGE - buildkite_annotate(context: 'code-freeze-completed', style: 'success', message: message) if is_ci - UI.success(message) + create_backmerge_prs! end desc 'Updates store metadata and runs the release checks' @@ -155,13 +147,7 @@ build_and_upload_release(create_release: true) - pr_url = create_backmerge_pr! - - message = <<~MESSAGE - Release finalized successfully. Next, review and merge the [integration PR](#{pr_url}). - MESSAGE - buildkite_annotate(context: 'finalize-release-completed', style: 'success', message: message) if is_ci - UI.success(message) + create_backmerge_prs! UI.message('Attempting to remove release branch protection in GitHub...') @@ -206,26 +192,7 @@ name: version_number ) - pr_urls = create_backmerge_prs! - - # It's possible that no backmerge was created when: - # - # - there are no hotfixes in development and the next release code freeze has not been started - # - nothing changes in the current release branch since release finalization - # - # As a matter of fact, in the context of Simplenote Android, the above is the most likely scenario. - style, message = if pr_urls.empty? - ['info', 'No backmerge PR was required'] - else - [ - 'success', <<~MESSAGE - The following backmerge PR#{pr_urls.length > 1 ? '(s) were' : ' was'} created: - #{pr_urls.map { |url| "- #{url}" }} - MESSAGE - ] - end - buildkite_annotate(style: style, context: 'backmerge-prs-outcome', message: message) if is_ci - UI.success(message) + create_backmerge_prs! # At this point, an intermediate branch has been created by creating a backmerge PR to a hotfix or the next version release branch. # This allows us to safely delete the `release/*` branch. diff --git a/fastlane/lib/release_helpers.rb b/fastlane/lib/release_helpers.rb index 2b548c018..5490e03ea 100644 --- a/fastlane/lib/release_helpers.rb +++ b/fastlane/lib/release_helpers.rb @@ -1,40 +1,53 @@ # frozen_string_literal: true -def create_backmerge_pr! - pr_urls = create_backmerge_prs! - - return pr_urls unless pr_urls.length > 1 - - backmerge_error_message = UI.user_error! <<~ERROR - Unexpectedly opened more than one backmerge pull request. URLs: - #{pr_urls.map { |url| "- #{url}" }.join("\n")} - ERROR - buildkite_annotate(style: 'error', context: 'error-creating-backmerge', message: backmerge_error_message) if is_ci - UI.user_error!(backmerge_error_message) -end - # Notice the plural in the name. # The action this method calls may create multiple backmerge PRs, depending on how many release branches with version greater than the source are in the remote. -def create_backmerge_prs! - version = release_version_current - - create_release_backmerge_pull_request( - repository: GITHUB_REPO, - source_branch: release_branch_name(release_version: version), - labels: ['Releases'], - milestone_title: release_version_next - ) -rescue StandardError => e - error_message = <<-MESSAGE - Error creating backmerge pull request(s): - - #{e.message} - - If this is not the first time you are running the release task, the backmerge PR(s) for the version `#{version}` might have already been previously created. - Please close any pre-existing backmerge PR for `#{version}`, delete the previous merge branch, then run the release task again. - MESSAGE - - buildkite_annotate(style: 'error', context: 'error-creating-backmerge', message: error_message) if is_ci - - UI.user_error!(error_message) +def create_backmerge_prs!( + version: release_version_current, + source_branch: release_branch_name(release_version: version), + labels: ['Releases'], + milestone_title: release_version_next +) + begin + pr_urls = create_release_backmerge_pull_request( + repository: GITHUB_REPO, + source_branch: source_branch, + labels: labels, + milestone_title: milestone_title + ) + rescue StandardError => e + error_message = <<~MESSAGE + Error creating backmerge pull request(s): + + #{e.message} + + If this is not the first time you are running the release task, the backmerge PR(s) for the version `#{version}` might have already been previously created. + Please close any pre-existing backmerge PR for `#{version}`, delete the previous merge branch, then run the release task again. + MESSAGE + + buildkite_annotate(style: 'error', context: 'error-creating-backmerge', message: error_message) if is_ci + + UI.user_error!(error_message) + end + + # It's possible that no backmerge was created when: + # + # - there are no hotfixes in development and the next release code freeze has not been started + # - nothing changes in the current release branch since release finalization + # + # As a matter of fact, in the context of Simplenote Android, the above is the most likely scenario. + style, message = if pr_urls.empty? + ['info', 'No backmerge PR was required.'] + else + [ + 'success', <<~MESSAGE + The following backmerge PR#{pr_urls.length > 1 ? '(s) were' : ' was'} created: + #{pr_urls.map { |url| "- #{url}" }.join("\n")} + MESSAGE + ] + end + buildkite_annotate(style: style, context: 'backmerge-prs-outcome', message: message) if is_ci + UI.success(message) + + pr_urls end