summaryrefslogtreecommitdiff
path: root/app/models/concerns/security/latest_pipeline_information.rb
blob: 87eae3cac682cefeff972f67dccccad2f4c49ded (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# frozen_string_literal: true

module Security
  module LatestPipelineInformation
    private

    def scanner_enabled?(scan_type)
      latest_builds_reports.include?(scan_type)
    end

    def latest_builds_reports(only_successful_builds: false)
      strong_memoize("latest_builds_reports_#{only_successful_builds}") do
        builds = latest_security_builds
        builds = builds.select { |build| build.status == 'success' } if only_successful_builds
        builds.flat_map do |build|
          build.options[:artifacts][:reports].keys
        end
      end
    end

    def latest_security_builds
      return [] unless latest_default_branch_pipeline

      ::Security::SecurityJobsFinder.new(pipeline: latest_default_branch_pipeline).execute +
        ::Security::LicenseComplianceJobsFinder.new(pipeline: latest_default_branch_pipeline).execute
    end

    def latest_default_branch_pipeline
      strong_memoize(:pipeline) { latest_pipeline }
    end

    def auto_devops_source?
      latest_default_branch_pipeline&.auto_devops_source?
    end
  end
end