class Gitlab::QA::Scenario::Test::Omnibus::UpdateFromPrevious

def perform(release, current_version, semver_component, from_edition = nil, *rspec_args)

Returns:
  • (void) -

Parameters:
  • *rspec_args (Array) -- rspec arguments
  • from_edition (String) -- gitlab edition to update from
  • semver_component (String) -- semver component for N - 1 version detection, major|minor|patch
  • current_version (String) -- current gitlab version associated with docker image
  • release (String) -- current release docker image
def perform(release, current_version, semver_component, from_edition = nil, *rspec_args)
  # When from_edition isn't actually passed but RSpec args arg passed with `-- rspec_args...`,
  # from_edition is wrongly set to `--`, so we fix that here.
  if from_edition == "--"
    rspec_args.prepend('--')
    from_edition = nil
  end
  @current_release = QA::Release.new(release)
  @upgrade_path = Support::GitlabUpgradePath.new(
    current_version,
    semver_component,
    from_edition || @current_release.edition
  ).fetch
  upgrade_info = "#{[*upgrade_path, current_release].join(' => ')} (#{current_version})".bright
  Runtime::Logger.info("Performing gitlab update: #{upgrade_info}")
  update(rspec_args)
end

def run_gitlab(release, volumes, rspec_args = [], skip_setup: false)

Returns:
  • (void) -

Parameters:
  • volumes (Hash) --
  • release (Gitlab::QA::Release) --
def run_gitlab(release, volumes, rspec_args = [], skip_setup: false)
  Runtime::Logger.info("Deploying release: #{release.to_s.bright}")
  Component::Gitlab.perform do |gitlab|
    gitlab.release = release
    gitlab.volumes = volumes
    gitlab.network = 'test'
    if skip_setup
      gitlab.skip_server_hooks = true
      gitlab.seed_db = false
      gitlab.seed_admin_token = false
    end
    next gitlab.launch_and_teardown_instance unless run_specs?(release)
    gitlab.instance { run_specs(gitlab, release, rspec_args) }
  end
end

def run_specs(gitlab, release, rspec_args)

Returns:
  • (void) -

Parameters:
  • rspec_args (Array) --
  • release (Gitlab::QA::Release) --
  • gitlab (Gitlab::QA::Component::Gitlab) --
def run_specs(gitlab, release, rspec_args)
  Component::Specs.perform do |specs|
    specs.release = release
    specs.suite = 'Test::Instance::All'
    specs.hostname = "qa-e2e-specs.#{gitlab.network}"
    specs.network = gitlab.network
    specs.args = [gitlab.address, *rspec_args]
    # do not generate reports for non release runs
    specs.env = { 'QA_GENERATE_ALLURE_REPORT' => false } unless release == current_release
  end
rescue Support::ShellCommand::StatusError => e
  raise e if release == current_release # only fail on current release
  Runtime::Logger.warn("Test run for release '#{gitlab.release}' finished with errors!")
end

def run_specs?(release)

Returns:
  • (Boolean) -

Parameters:
  • release (Gitlab::QA::Release) --
def run_specs?(release)
  [upgrade_path.first, current_release].any?(release)
end

def update(rspec_args)

Returns:
  • (void) -

Parameters:
  • rspec_args (Array) --
def update(rspec_args)
  Docker::Volumes.new.with_temporary_volumes do |volumes|
    # deploy first release in upgrade path and run specs to populate db
    run_gitlab(upgrade_path.first, volumes, ["--", "--tag", "smoke"])
    # deploy releases in upgrade path
    upgrade_path[1..].each { |release| run_gitlab(release, volumes, skip_setup: true) }
    # deploy current release and run tests
    run_gitlab(current_release, volumes, rspec_args, skip_setup: true)
  end
end