diff options
Diffstat (limited to 'app/services/ci/pipeline_artifacts/coverage_report_service.rb')
-rw-r--r-- | app/services/ci/pipeline_artifacts/coverage_report_service.rb | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/app/services/ci/pipeline_artifacts/coverage_report_service.rb b/app/services/ci/pipeline_artifacts/coverage_report_service.rb new file mode 100644 index 00000000000..9f5c445c91a --- /dev/null +++ b/app/services/ci/pipeline_artifacts/coverage_report_service.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true +module Ci + module PipelineArtifacts + class CoverageReportService + def execute(pipeline) + return unless pipeline.can_generate_coverage_reports? + return if pipeline.has_coverage_reports? + + file = build_carrierwave_file(pipeline) + + pipeline.pipeline_artifacts.create!( + project_id: pipeline.project_id, + file_type: :code_coverage, + file_format: :raw, + size: file["tempfile"].size, + file: file, + expire_at: Ci::PipelineArtifact::EXPIRATION_DATE.from_now + ) + end + + private + + def build_carrierwave_file(pipeline) + CarrierWaveStringFile.new_file( + file_content: pipeline.coverage_reports.to_json, + filename: Ci::PipelineArtifact::DEFAULT_FILE_NAMES.fetch(:code_coverage), + content_type: 'application/json' + ) + end + end + end +end |