lib/release_tools/public_release/kas_release.rb (115 lines of code) (raw):

# frozen_string_literal: true module ReleaseTools module PublicRelease class KasRelease include Release attr_reader :version, :client, :release_metadata def initialize( version, client: GitlabClient, release_metadata: ReleaseMetadata.new ) @version = version.to_ce @client = client @release_metadata = release_metadata end def execute if Feature.disabled?(:release_the_kas) logger.info(':release_the_kas feature is disabled') return end logger.info( 'Starting KAS release', version: version ) create_target_branch if SharedStatus.dry_run? logger.info('This is a dry run, tags and release metadata will not be created') return end update_versions compile_changelog tag = create_tag if Feature.enabled?(:tag_kas_after_monthly_release) update_version_for_default_branch create_tag_for_default_branch end add_release_metadata(tag) notify_slack(project, version) end private def update_versions logger.info( 'Updating version files', project: project_path, version: version ) commit_version_files( target_branch, { 'VERSION' => version.to_s } ) end # Update the version file for the default branch only for the monthly releases. # This will ensure that the default branch is always up-to-date with the latest RC version. def update_version_for_default_branch return unless version.monthly? logger.info( 'Updating a version file for the default branch for a monthly release', project: project_path, version: next_rc_version ) commit_version_files( project.default_branch, { 'VERSION' => next_rc_version } ) end def next_rc_version @next_rc_version ||= ReleaseTools::Version.new(version.next_milestone).to_rc end def create_tag_for_default_branch return unless version.monthly? tag_name = ReleaseTools::Version.new(next_rc_version).tag logger.info('Creating tag', tag: tag_name, project: project_path) client.find_or_create_tag( project_path, tag_name, project.default_branch, message: "Version #{tag_name}" ) end def compile_changelog return if version.rc? logger.info('Compiling changelog', project: project_path) # NOTE: we do not want to skip ci for changelog commits for KAS # because the KAS repository also contains agentk which is built # in the canonical gitlab-agent repository. The changelog commit # is often the commit that is tagged for a release for which we # require the pipeline to run so that agentk is properly released. ChangelogCompiler .new(project_path, client: client) .compile(version, branch: target_branch, skip_ci: false) end def create_tag logger.info('Creating tag', tag: tag_name, project: project_path) 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: true ) release_metadata.add_release( name: project.metadata_project_name, version: meta_version, sha: tag.commit.id, ref: tag.name, tag: true ) end def project Project::Kas end end end end