summaryrefslogtreecommitdiff
path: root/app/models/concerns/security
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/concerns/security')
-rw-r--r--app/models/concerns/security/latest_pipeline_information.rb36
1 files changed, 36 insertions, 0 deletions
diff --git a/app/models/concerns/security/latest_pipeline_information.rb b/app/models/concerns/security/latest_pipeline_information.rb
new file mode 100644
index 00000000000..87eae3cac68
--- /dev/null
+++ b/app/models/concerns/security/latest_pipeline_information.rb
@@ -0,0 +1,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