lib/release_tools/slack/auto_deploy_notification.rb (75 lines of code) (raw):

# frozen_string_literal: true module ReleaseTools module Slack class AutoDeployNotification < Webhook def self.webhook_url ENV.fetch('AUTO_DEPLOY_NOTIFICATION_URL') end def self.on_create(results) return unless results.any? branch = results.first.branch fallback = "New auto-deploy branch: `#{branch}`" if results.any?(&:notify_branch_too_far_behind) fallback += "\n@release-managers Auto deploy branches with :warning: next to them are too far behind the default branch. " \ "Please check and notify the appropriate groups." end blocks = ::Slack::BlockKit.blocks blocks.section { |section| section.mrkdwn(text: fallback) } blocks.section do |section| results.each do |result| text = "<#{commits_url(result.project, branch)}|#{result.project}>" text.prepend(":warning: ") if result.notify_branch_too_far_behind section.mrkdwn_field(text: text.freeze) end end if results.any?(&:notify_branch_too_far_behind) blocks.divider blocks.context do |context| docs_url = 'https://gitlab.com/gitlab-org/release/docs/-/blob/master/general/deploy/how-to-fix-auto-deploy-branch-behind-master.md' context.mrkdwn(text: "<#{docs_url}|Runbook for handling branch behind master>") end end if ENV['CI_JOB_URL'] blocks.context { |context| context.mrkdwn(text: "Created via <#{ENV['CI_JOB_URL']}|scheduled pipeline>.") } end fire_hook(text: fallback, blocks: blocks.as_json, channel: F_UPCOMING_RELEASE) end def self.on_wait_failure(exception) text = "#{exception.message}." blocks = ::Slack::BlockKit.blocks blocks.section do |block| block.mrkdwn(text: "<!subteam^#{RELEASE_MANAGERS}> #{text}") end blocks.context do |block| block.mrkdwn(text: "Job: <#{ENV.fetch('CI_JOB_URL', nil)}>") if exception.pipeline block.mrkdwn(text: "Pipeline: <#{exception.pipeline.web_url}>") end end fire_hook(text: text, blocks: blocks.as_json, channel: F_UPCOMING_RELEASE) end def self.on_stale_gitaly_merge_request(merge_request) text = "A merge request to update the Gitaly version has been open for too long" attachment = { fallback: text, color: 'warning', title: merge_request.title, title_link: merge_request.url } fire_hook(text: text, attachments: [attachment], channel: GITALY_ALERTS) end def self.on_stale_kas_merge_request(merge_request) text = "A merge request to update the KAS version has been open for too long" attachment = { fallback: text, color: 'warning', title: merge_request.title, title_link: merge_request.url } fire_hook(text: text, attachments: [attachment], channel: F_AGENT_FOR_KUBERNETES) end def self.commits_url(project, branch) "https://gitlab.com/#{project}/-/commits/#{branch}" end end end end