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