Class: Gitlab::QA::Support::GitlabVersionInfo
- Inherits:
-
Object
- Object
- Gitlab::QA::Support::GitlabVersionInfo
- Defined in:
- lib/gitlab/qa/support/gitlab_version_info.rb
Constant Summary collapse
- VERSION_PATTERN =
/^(?<version>\d+\.\d+\.\d+)/- COMPONENT_PATTERN =
/^(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)/- VersionNotFoundError =
Class.new(RuntimeError)
Instance Method Summary collapse
-
#initialize(current_version, edition) ⇒ GitlabVersionInfo
constructor
Get previous gitlab version.
-
#latest_patch(version) ⇒ String
Get latest patch for specific version number.
-
#next_version(version) ⇒ String?
Get next version major.minor from available releases.
-
#previous_version(semver_component) ⇒ Gem::Version
Get N - 1 version number.
-
#version_exists?(version) ⇒ Boolean
Check if specific version exists in GitLab releases.
Constructor Details
#initialize(current_version, edition) ⇒ GitlabVersionInfo
Get previous gitlab version
16 17 18 19 20 |
# File 'lib/gitlab/qa/support/gitlab_version_info.rb', line 16 def initialize(current_version, edition) @current_version = current_version @edition = edition @logger = Runtime::Logger.logger end |
Instance Method Details
#latest_patch(version) ⇒ String
Get latest patch for specific version number
latest_patch(Gem::Version.new(“14.10”)) => “14.10.5” latest_patch(Gem::Version.new(“14.10.5”)) => “14.10.5”
68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/gitlab/qa/support/gitlab_version_info.rb', line 68 def latest_patch(version) # check if version is already a patch version return version if version.to_s.split('.').size == 3 result = versions.find { |ver| ver.to_s.match?(/^#{version}\./) } result ||= handle_latest_patch_prerelease_fallback(version) if current_version.include?('-pre') result.tap do |ver| raise_version_not_found("Latest patch version for version #{version}") unless ver end end |
#next_version(version) ⇒ String?
Get next version major.minor from available releases
next_version(“17.7.4”) => “17.8” next_version(“17.12.5”) => “18.0” next_version(“18.0.3”) => nil # when no next version exists
89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/gitlab/qa/support/gitlab_version_info.rb', line 89 def next_version(version) current_ver = Gem::Version.new(version) # Since versions are already sorted in descending order (newest first), # we need to reverse them to find the next version after current next_ver = versions.reverse.find { |ver| ver > current_ver } return nil unless next_ver [next_ver.segments[0], next_ver.segments[1]].join('.') # major.minor end |
#previous_version(semver_component) ⇒ Gem::Version
Get N - 1 version number
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/gitlab/qa/support/gitlab_version_info.rb', line 26 def previous_version(semver_component) # Check for environment variable override override_key = "QA_PREVIOUS_#{semver_component.upcase}_OVERRIDE" override_value = ENV.fetch(override_key, nil) if override_value && !override_value.empty? logger.info("Using override for previous #{semver_component}: #{override_value}") return Gem::Version.new(override_value) end case semver_component when "major" previous_major when "minor" previous_minor when "patch" previous_patch else raise("Unsupported semver component, must be major|minor|patch") end end |
#version_exists?(version) ⇒ Boolean
Check if specific version exists in GitLab releases
version_exists?(“17.10.5”) => true version_exists?(“17.10.28”) => false
56 57 58 |
# File 'lib/gitlab/qa/support/gitlab_version_info.rb', line 56 def version_exists?(version) !!versions.find { |ver| ver.to_s == version } end |