diff --git a/app/services/ci/create_trace_artifact_service.rb b/app/services/ci/create_trace_artifact_service.rb index 280a2c3afa4c91fefcf2deeb93b5492a094567a0..bfc5c1c0732ad8a11026495c3baf0aad2a29561f 100644 --- a/app/services/ci/create_trace_artifact_service.rb +++ b/app/services/ci/create_trace_artifact_service.rb @@ -4,13 +4,34 @@ module Ci return if job.job_artifacts_trace job.trace.read do |stream| - if stream.file? - job.create_job_artifacts_trace!( - project: job.project, - file_type: :trace, - file: stream) + return unless stream.file? + + temp_file!(JobArtifactUploader.workhorse_upload_path) do |temp_path| + FileUtils.cp(stream.path, temp_path) + create_job_trace!(temp_path) + FileUtils.rm(stream.path) end end end + + private + + def create_job_trace!(path) + job.create_job_artifacts_trace!( + project: job.project, + file_type: :trace, + file: UploadedFile.new(path, 'build.log', 'application/octet-stream') + ) + end + + def temp_file!(temp_dir) + FileUtils.mkdir_p(temp_dir) + temp_file = Tempfile.new('file', temp_dir) + temp_file&.close + yield(temp_file.path) + ensure + temp_file&.close + temp_file&.unlink + end end end