lib/release_tools/public_release/gitlab_pages_release.rb (83 lines of code) (raw):
# frozen_string_literal: true
module ReleaseTools
module PublicRelease
class GitlabPagesRelease
include Release
attr_reader :version, :client, :release_metadata
def initialize(
version,
client: GitlabClient,
release_metadata: ReleaseMetadata.new,
commit: nil
)
@version = version.to_ce
@client = client
@release_metadata = release_metadata
@commit = commit
end
def execute
logger.info("Starting release of #{project.project_name}", version: version)
create_target_branch
return if SharedStatus.dry_run?
compile_changelog
update_versions
tag = create_tag
add_release_metadata(tag)
notify_slack(project, version)
end
def compile_changelog
return if version.rc?
logger.info('Compiling changelog', project: project_path)
ChangelogCompiler
.new(project_path, client: client)
.compile(version, branch: target_branch)
end
def update_versions
logger.info(
'Updating version files',
project: project_path,
version: version
)
commit_version_files(
target_branch,
{ 'VERSION' => version.to_s }
)
end
def create_tag
logger.info('Creating tag', tag: tag_name, project: project_path)
# Gitaly requires tags to be annotated tags, so we must specify a tag
# message.
client.find_or_create_tag(
project_path,
tag_name,
target_branch,
message: "Version #{tag_name}"
)
end
def add_release_metadata(tag)
meta_version = version.to_normalized_version
logger.info(
'Recording release data',
project: project_path,
version: meta_version,
sha: tag.commit.id,
tag: tag.name
)
release_metadata.add_release(
name: project.project_name,
version: meta_version,
sha: tag.commit.id,
ref: tag.name,
tag: true
)
end
def source_for_target_branch
if @commit
logger.info('Using specific commit', project: project_path, commit: @commit)
end
@commit || last_production_commit_metadata
end
private
def project
Project::GitlabPages
end
end
end
end