lib/release_tools/security/related_issues_finder.rb (47 lines of code) (raw):

# frozen_string_literal: true module ReleaseTools module Security class RelatedIssuesFinder def initialize(issue) @security_issue = issue end def cves_issue issues.each do |issue| cve_issue = fetch_cve_issue(issue) return cve_issue if cve_issue.present? end nil end def canonical_issue canonical_path = security_issue.reference.sub('security/', '').split('#').first issue_links(project_id: security_issue.project_id, issue_iid: security_issue.iid) .find { |linked_issue| full_reference(linked_issue).include?(canonical_path) } end private attr_reader :security_issue def issues [security_issue, canonical_issue].compact end def fetch_cve_issue(issue) issue_links(project_id: issue.project_id, issue_iid: issue.iid) .find { |linked_issue| full_reference(linked_issue).include?(cve_path) } end def issue_links(project_id:, issue_iid:) Retriable.with_context(:api) do client.issue_links( project_id, issue_iid ) end end def full_reference(issue) issue.references.full end def cve_path ReleaseTools::Project::Cves.to_s end def client ReleaseTools::GitlabClient end end end end