lib/release_tools/security/publish/verify_blog_post.rb (46 lines of code) (raw):
# frozen_string_literal: true
module ReleaseTools
module Security
module Publish
# Verifies that the blog post merge request has been successfully merged
# Only should be called after DeployBlogPost has been called
class VerifyBlogPost
include ReleaseTools::Security::MergeRequestHelper
include ::SemanticLogger::Loggable
PendingMergeError = Class.new(StandardError)
# canonical_blog_merge_request returns opened/pending merge requests with label "patch release post"
# if there are no pending mrs, it means that the blog post mr has been merged already
def initialize
@pending_blog_post_mr = canonical_blog_merge_request
end
def execute
verify_blog_post_mr
send_slack_notification(:success)
rescue StandardError => ex
logger.fatal(error_message, error: ex) if ex.is_a?(PendingMergeError)
send_slack_notification(:failed)
raise
end
private
attr_reader :pending_blog_post_mr
def verify_blog_post_mr
if pending_blog_post_mr.nil?
logger.info('Blog post has been merged')
else
logger.info('Blog post has not been merged', pending_blog_post_mr: pending_blog_post_mr.web_url)
raise PendingMergeError
end
end
def send_slack_notification(status)
ReleaseTools::Slack::ReleaseJobEndNotifier.new(
job_type: 'Verify blog post',
status: status,
release_type: :patch
).send_notification
end
def error_message
<<~MSG
The blog post merge request was not merged successfully, check the merge pipeline associated with:
#{pending_blog_post_mr.web_url}
If the pipeline is still running, retry this job later.
If the pipeline failed, retry the failing job, or manually merge the merge request, then retry this job.
MSG
end
end
end
end
end