lib/release_tools/patch_release/blog_post/merge_request.rb (97 lines of code) (raw):

# frozen_string_literal: true module ReleaseTools module PatchRelease module BlogPost # This class implements the logic for the Merge Request that adds a # blog post to the gitlab.com (www-gitlab-com) repository. class MergeRequest < ReleaseTools::MergeRequest include ::SemanticLogger::Loggable include ReleaseTools::Security::IssueHelper include ReleaseTools::Security::MergeRequestHelper include Utils def project ReleaseTools::Project::WWWGitlabCom end def labels 'patch release post' end def title "Draft: Adding #{versions_str} blog post" end def assignee_ids return appsec_release_managers&.collect(&:id) if security_fixes? release_managers&.collect(&:id) end def source_branch "create-#{hyphenated_version}-post" end def template_path File.expand_path('../../../../templates/patch_blog_post_merge_request_description.md.erb', __dir__) end def exists? (security_fixes? && security_blog_merge_request.present?) || super end def security_fixes? security_fixes.present? end def create blog_content = generate_blog_content file_commit.execute!(blog_content) return if SharedStatus.dry_run? # Create the MR on the remote repository. super end def patch_issue_url return "test.gitlab.com" if SharedStatus.dry_run? return unless patch_coordinator.single_version? Issue.new(version: versions.first).url end def generate_blog_content generator.execute end private def release_managers schedule.active_release_managers rescue ReleaseManagers::Schedule::VersionNotFoundError logger.fatal('Could not find active release managers') nil end def appsec_release_managers schedule.active_appsec_release_managers rescue ReleaseManagers::Schedule::VersionNotFoundError logger.fatal('Could not find active appsec release managers') nil end def schedule @schedule ||= ReleaseManagers::Schedule.new end def bug_fixes @bug_fixes ||= patch_coordinator.merge_requests(with_patch_version: true) end def versions return [bug_fixes.first[:version]] if patch_coordinator.single_version? if security_fixes? bug_fixes.map { |release| release[:version] } else bug_fixes.filter_map do |release| release[:version] if release[:pressure].positive? end end end def generator @generator ||= ReleaseTools::PatchRelease::BlogPost::MergeRequestContentGenerator.new( bug_fixes: bug_fixes, security_fixes: security_fixes, patch_coordinator: patch_coordinator, versions: versions ) end def file_commit @file_commit ||= ReleaseTools::PatchRelease::BlogPost::FileCommit.new( versions: versions, project_path: project.path, source_branch: source_branch, target_branch: target_branch, security_fixes: security_fixes ) end end end end end