102 lines
2.2 KiB
Ruby
Executable file
102 lines
2.2 KiB
Ruby
Executable file
#!/usr/bin/env ruby
|
|
# frozen_string_literal: true
|
|
|
|
# In spec/scripts/setup/find_jh_branch_spec.rb we completely stub it
|
|
require 'gitlab' unless Object.const_defined?(:Gitlab)
|
|
|
|
require_relative '../api/default_options'
|
|
|
|
class FindJhBranch
|
|
JH_DEFAULT_BRANCH = 'main-jh'
|
|
JH_PROJECT_PATH = 'gitlab-org/gitlab-jh/gitlab'
|
|
BranchNotFound = Class.new(RuntimeError)
|
|
|
|
def run
|
|
return JH_DEFAULT_BRANCH unless merge_request?
|
|
|
|
jh_merge_request_ref_name ||
|
|
default_branch_merge_request_ref_name ||
|
|
stable_branch_merge_request_ref_name ||
|
|
default_branch_for_non_stable
|
|
end
|
|
|
|
private
|
|
|
|
def merge_request?
|
|
!!merge_request_id
|
|
end
|
|
|
|
def jh_merge_request_ref_name
|
|
branch_exist?(JH_PROJECT_PATH, jh_ref_name) && jh_ref_name
|
|
end
|
|
|
|
def default_branch_merge_request_ref_name
|
|
target_default_branch? && JH_DEFAULT_BRANCH
|
|
end
|
|
|
|
def stable_branch_merge_request_ref_name
|
|
target_stable_branch? && begin
|
|
jh_stable_branch_name = merge_request.target_branch.sub(/\-ee\z/, '-jh')
|
|
|
|
branch_exist?(JH_PROJECT_PATH, jh_stable_branch_name) &&
|
|
jh_stable_branch_name
|
|
end
|
|
end
|
|
|
|
def default_branch_for_non_stable
|
|
if target_stable_branch?
|
|
raise(BranchNotFound, "Cannot find a suitable JH branch")
|
|
else
|
|
JH_DEFAULT_BRANCH
|
|
end
|
|
end
|
|
|
|
def branch_exist?(project_path, branch_name)
|
|
!!gitlab.branch(project_path, branch_name)
|
|
rescue Gitlab::Error::NotFound
|
|
false
|
|
end
|
|
|
|
def target_default_branch?
|
|
merge_request.target_branch == default_branch
|
|
end
|
|
|
|
def target_stable_branch?
|
|
merge_request.target_branch.match?(/\A(?:\d+\-)+\d+\-stable\-ee\z/)
|
|
end
|
|
|
|
def ref_name
|
|
ENV['CI_COMMIT_REF_NAME']
|
|
end
|
|
|
|
def default_branch
|
|
ENV['CI_DEFAULT_BRANCH']
|
|
end
|
|
|
|
def merge_request_project_id
|
|
ENV['CI_MERGE_REQUEST_PROJECT_ID']
|
|
end
|
|
|
|
def merge_request_id
|
|
ENV['CI_MERGE_REQUEST_IID']
|
|
end
|
|
|
|
def jh_ref_name
|
|
"#{ref_name}-jh"
|
|
end
|
|
|
|
def merge_request
|
|
@merge_request ||= gitlab.merge_request(merge_request_project_id, merge_request_id)
|
|
end
|
|
|
|
def gitlab
|
|
@gitlab ||= Gitlab.client(
|
|
endpoint: API::DEFAULT_OPTIONS[:endpoint],
|
|
private_token: API::DEFAULT_OPTIONS[:api_token] || ''
|
|
)
|
|
end
|
|
end
|
|
|
|
if $0 == __FILE__
|
|
puts FindJhBranch.new.run
|
|
end
|