class Gitlab::QA::Support::GitlabUpgradePath

def fetch

Returns:
  • (Array) -
def fetch
  return [release(latest_patch(previous_version))] unless major_upgrade?
  # get versions between previous major and current version in gitlab upgrade path
  path = full_upgrade_path.each_with_object([]) do |ver, arr|
    next if ver <= previous_version || ver >= current_version
    arr << ver
  end
  [previous_version, *path].map do |ver|
    release(version_info.latest_patch(ver))
  end
end

def full_upgrade_path

Returns:
  • (Array) -
def full_upgrade_path
  @full_upgrade_path ||= ::YAML
    .safe_load(upgrade_path_yml, symbolize_names: true)
    .map { |version| Gem::Version.new("#{version[:major]}.#{version[:minor]}") }
end

def initialize(current_version, semver_component, edition)

Parameters:
  • edition (String) -- GitLab edition - ee or ce
  • semver_component (String) -- version number component for previous version detection - major|minor|patch
  • current_version (String) --
def initialize(current_version, semver_component, edition)
  @version_info = GitlabVersionInfo.new(current_version, edition)
  @current_version = Gem::Version.new(current_version)
  @semver_component = semver_component
  @edition = edition
  @logger = Runtime::Logger.logger
end

def major_upgrade?

Returns:
  • (Boolean) -
def major_upgrade?
  semver_component == "major"
end

def previous_version

Returns:
  • (Gem::Version) -
def previous_version
  @previous_version ||= version_info.previous_version(semver_component)
end

def release(version)

Returns:
  • (QA::Release) -

Parameters:
  • version (String) --
def release(version)
  QA::Release.new("gitlab/gitlab-#{edition}:#{version}-#{edition}.0")
end

def upgrade_path_yml

Returns:
  • (String) -
def upgrade_path_yml
  @upgrade_path_yml ||= begin
    logger.info("Fetching gitlab upgrade path from 'gitlab.com/gitlab-org/gitlab' project")
    HttpRequest.make_http_request(
      url: "https://gitlab.com/gitlab-org/gitlab/-/raw/master/config/upgrade_path.yml"
    ).body
  end
end