lib/release_tools/patch_release/blog_post/file_commit.rb (58 lines of code) (raw):

# frozen_string_literal: true module ReleaseTools module PatchRelease module BlogPost # This class is responsible for generating the content for a blog merge request. class FileCommit include ::SemanticLogger::Loggable include Utils def initialize(**options) @versions = options[:versions] @project_path = options[:project_path] @source_branch = options[:source_branch] @target_branch = options[:target_branch] @security_fixes = options[:security_fixes] end def execute!(blog_content) find_or_create_branch! create_commit!(blog_content) end private # Indirectly needed for blog_post_filename and create_commit! (see Utils module) attr_reader :versions # Used to check for the presence of security fixes attr_reader :security_fixes # Other necessary fields attr_reader :project_path, :source_branch, :target_branch def find_or_create_branch! return if SharedStatus.dry_run? Retriable.with_context(:api) do GitlabClient.find_or_create_branch(source_branch, target_branch, project_path) end end def create_commit!(blog_content) logger.info('Committing blog content', project: project_path, branch: source_branch) return if SharedStatus.dry_run? message = "Adding #{versions_str} blog post" actions = [{ action: 'create', file_path: generate_file_path, content: blog_content }] Retriable.with_context(:api) do GitlabClient.create_commit( project_path, source_branch, message, actions ) end end def generate_file_path blog_post_filepath = "sites/uncategorized/source/releases/posts" [blog_post_filepath, blog_post_filename].join('/') end def blog_post_filename suffix = "gitlab-#{hyphenated_version}-released.html.md" return "#{1.day.from_now.to_date}-patch-release-#{suffix}" if security_fixes.present? "#{Date.current}-#{suffix}" end end end end end