lib/release_tools/security/pending_issues_notification_service.rb (52 lines of code) (raw):
# frozen_string_literal: true
module ReleaseTools
module Security
class PendingIssuesNotificationService
include ::SemanticLogger::Loggable
include ReleaseTools::Security::IssueHelper
PendingIssuesError = Class.new(StandardError)
def initialize
issue_crawler = Security::IssueCrawler.new
@linked_security_issues = issue_crawler.related_security_issues
end
def execute
if pending_issues.empty?
logger.info("All the issues linked to the security tracking issue are ready.")
send_slack_notification(:success)
else
logger.info(log_failure_message)
raise PendingIssuesError
end
rescue StandardError => ex
error_message = "Pending issues check failed. If this job continues to fail, manually check that the issues linked to the tracking issue (#{security_tracking_issue.web_url}) are ready to be processed (labeled with `security-target`), and unlink them if they are not ready."
logger.fatal(error_message, error: ex)
send_slack_notification(:failed)
raise
end
private
attr_reader :linked_security_issues
## Returns a list of ReleaseTools::Security::ImplementationIssue that are linked, but not ready to be processed.
def pending_issues
pending_issues = []
linked_security_issues.each do |security_issue|
unless security_issue.ready_to_be_processed?
pending_issues << security_issue
end
end
pending_issues
end
def send_slack_notification(status)
::ReleaseTools::Slack::ReleaseJobEndNotifier.new(
job_type: 'Pending issues',
status: status,
release_type: :patch
).send_notification
end
def log_failure_message
message = "\n\n\u{274C} Some linked issues for the tracking issue #{security_tracking_issue.web_url} are not ready to be processed:\n\n"
pending_issues_message = pending_issues.map do |issue|
"- #{issue.web_url}"
end
message + pending_issues_message.join("\n")
end
end
end
end