lib/release_tools/component_versions.rb (51 lines of code) (raw):
# frozen_string_literal: true
module ReleaseTools
class ComponentVersions
include ::SemanticLogger::Loggable
# The project that defines the component versions we're working with
SOURCE_PROJECT = ReleaseTools::Project::GitlabEe
FILES = [
Project::Gitaly.version_file,
Project::GitlabElasticsearchIndexer.version_file,
Project::GitlabPages.version_file,
Project::GitlabShell.version_file,
Project::Kas.version_file
].freeze
def self.get_component(commit_id, file)
ReleaseTools::GitlabClient
.file_contents(SOURCE_PROJECT.auto_deploy_path, file, commit_id)
.chomp
end
def self.for_omnibus(commit_id)
versions = { 'VERSION' => commit_id }
FILES.each_with_object(versions) do |file, memo|
memo[file] = get_component(commit_id, file)
end
logger.info('Omnibus Versions', versions)
versions
end
def self.for_cng(commit_id)
versions = for_omnibus(commit_id)
versions = normalize_cng_versions(versions)
gemfile = GemfileParser.new(
ReleaseTools::GitlabClient.file_contents(
SOURCE_PROJECT.auto_deploy_path,
'Gemfile.lock',
commit_id
)
)
SOURCE_PROJECT.gems.each do |gem_name, variable|
versions[variable] = gemfile.gem_version(gem_name)
end
logger.info('CNG Versions', versions)
versions
end
def self.normalize_cng_versions(versions)
versions['GITLAB_VERSION'] = versions['GITLAB_ASSETS_TAG'] = versions.delete('VERSION')
versions.each_pair do |component, version|
# If it looks like SemVer, assume it's a tag, which we prepend with `v`
if version.match?(/\A\d+\.\d+\.\d+(-rc\d+)?(-ee)?\z/)
versions[component] = "v#{version}"
end
end
versions
end
end
end