diff --git a/app/services/ci/create_trace_artifact_service.rb b/app/services/ci/create_trace_artifact_service.rb index dae741a371c..ffde824972c 100644 --- a/app/services/ci/create_trace_artifact_service.rb +++ b/app/services/ci/create_trace_artifact_service.rb @@ -6,9 +6,8 @@ module Ci job.trace.read do |stream| break unless stream.file? - temp_file!(JobArtifactUploader.workhorse_upload_path) do |temp_path| - FileUtils.copy(stream.path, temp_path) - create_job_trace!(job, temp_path) + clone_file!(stream.path, JobArtifactUploader.workhorse_upload_path) do |clone_path| + create_job_trace!(job, clone_path) FileUtils.rm(stream.path) end end @@ -17,21 +16,21 @@ module Ci private def create_job_trace!(job, path) - job.create_job_artifacts_trace!( - project: job.project, - file_type: :trace, - file: UploadedFile.new(path, 'job.log', 'application/octet-stream') - ) + File.open(path) do |stream| + job.create_job_artifacts_trace!( + project: job.project, + file_type: :trace, + file: stream) + end end - def temp_file!(temp_dir) + def clone_file!(src_path, temp_dir) FileUtils.mkdir_p(temp_dir) - temp_file = Tempfile.new('trace-tmp-', temp_dir) - temp_file&.close - yield(temp_file.path) - ensure - temp_file&.close - temp_file&.unlink + Dir.mktmpdir('tmp-trace', temp_dir) do |dir_path| + temp_path = File.join(dir_path, "job.log") + FileUtils.copy(src_path, temp_path) + yield(temp_path) + end end end end