lib/release_tools/slack/release_pipeline_start_notifier.rb (108 lines of code) (raw):

# frozen_string_literal: true module ReleaseTools module Slack class ReleasePipelineStartNotifier include ::SemanticLogger::Loggable include ReleaseTools::Slack::Utilities include ::ReleaseTools::Slack::ReleasePipelineHelpers # stage - the stage of the security pipeline, start and finalize are supported # release_type - :internal, :patch and :monthly are supported def initialize(stage:, release_type:) @stage = stage @release_type = release_type end def execute logger.info("Notifying the stage of a #{release_type} pipeline", stage: stage, release_manager: user_name, pipeline_url: pipeline_url) ReleaseTools::Slack::Message.post( channel: ReleaseTools::Slack::F_UPCOMING_RELEASE, message: slack_message, blocks: slack_blocks ) end private attr_reader :stage, :release_type def slack_message "Release manager #{user_name} #{fallback_message[stage]}" end def fallback_message { backport_merge: backport_merge_message, disable_issue_processor_schedule: disable_issue_processor_schedule_message, early_merge: early_merge_message, finalize: finalize_message, initial_rc: initial_rc_message, publish: publish_message, release: release_message, release_day: release_day_message, release_preparation: release_preparation_message, start: start_message, tag: tag_message, tag_day: tag_day_message, update_paths: update_paths_message, verify: verify_message, version_creation: version_creation_message } end def backport_merge_message "has started the backport merging steps for stable branches security MRs, these jobs will be executed as part of #{pipeline_url}." end def disable_issue_processor_schedule_message "has started the disable issue processor schedule steps, these jobs will be executed as part of #{pipeline_url}." end def early_merge_message "has started the early merging steps for default branch security MRs, these jobs will be executed as part of #{pipeline_url}." end def finalize_message "has started the final steps for the #{release_type} release, these jobs will be executed as part of #{pipeline_url}." end def initial_rc_message "has started the initial RC steps for the #{release_type} release, these jobs will be executed as part of #{pipeline_url}." end def publish_message "has started the publishing steps of a #{release_type} release, these jobs will be executed as part of #{pipeline_url}." end def release_message "has started the #{release_type} release package creation, this will be executed as part of #{pipeline_url}." end def release_day_message "has started the release day steps for the #{release_type} release, these jobs will be executed as part of #{pipeline_url}." end def release_preparation_message "has started the release preparation steps, these jobs will be executed as part of #{pipeline_url}." end def start_message "has started the #{release_type} release, initial steps will now be run in #{pipeline_url}." end def tag_message "has started the tagging steps for the #{release_type} release, these jobs will be executed as part of #{pipeline_url}." end def tag_day_message "has started the tag day steps for the #{release_type} release, these jobs will be executed as part of #{pipeline_url}." end def update_paths_message "has started the update path validation steps for the #{release_type} release, these jobs will be executed as part of #{pipeline_url}." end def verify_message "has started the verification steps for the #{release_type} release, these jobs will be executed as part of #{pipeline_url}." end def version_creation_message "has started the version creation steps of a #{release_type} release, these jobs will be executed as part of #{pipeline_url}." end def slack_blocks [ { type: 'section', text: ReleaseTools::Slack::Webhook.mrkdwn(section_block) }, { type: 'context', elements: [clock_context_element] } ] end def section_block [].tap do |text| text << EMOJI[release_type] text << slack_message end.join(' ') end end end end