lib/release_tools/slack/internal_release/dedicated_start_notifier.rb (67 lines of code) (raw):
# frozen_string_literal: true
module ReleaseTools
module Slack
module InternalRelease
class DedicatedStartNotifier
include ::SemanticLogger::Loggable
include ReleaseTools::InternalRelease::IssueHelper
def initialize(internal_versions)
@internal_versions = internal_versions
end
def execute
logger.info("Notifying Dedicated about start of internal releases", internal_versions: internal_versions)
send_notification
end
private
attr_reader :internal_versions
def send_notification
message = <<~BODY
:mega: :security-tanuki: Hello, the internal release has started targeting #{due_date} as the due date.
We are preparing the following versions: #{internal_versions_message}.
A message will be posted to this channel when the internal release is complete and the package is available in the `pre-release` channel.
There is a Dedicated tracker issue that has been created: #{dedicated_issue_url}
Notifying Dedicated managers: #{dedicated_managers}
BODY
slack_channels = [
ReleaseTools::Slack::G_DEDICATED_TEAM,
ReleaseTools::Slack::G_DEDICATED_ENVIRONMENT_AUTOMATION_TEAM,
ReleaseTools::Slack::G_DEDICATED_US_PUBSEC
]
return if SharedStatus.dry_run?
slack_channels.each do |channel|
Retriable.retriable do
ReleaseTools::Slack::ChatopsNotification.fire_hook(
text: "Internal release is starting.",
channel: channel,
blocks: [
{
type: 'section',
text: {
type: 'mrkdwn',
text: message
}
}
]
)
end
end
end
def dedicated_managers
[
'@oriol', # Dedicated EA manager
'@denham', # Dedicated EA manager
'@mkirkevold' # Dedicated US PubSec manager
].join(', ')
end
def internal_versions_message
internal_versions.map(&:to_s).join(', ')
end
def due_date
internal_release_dedicated_issue.due_date
end
def dedicated_issue_url
internal_release_dedicated_issue.web_url
end
end
end
end
end