summaryrefslogtreecommitdiff
path: root/lib/gitlab/ci/trace.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/ci/trace.rb')
-rw-r--r--lib/gitlab/ci/trace.rb34
1 files changed, 22 insertions, 12 deletions
diff --git a/lib/gitlab/ci/trace.rb b/lib/gitlab/ci/trace.rb
index defc8160121..ef5e7fcac23 100644
--- a/lib/gitlab/ci/trace.rb
+++ b/lib/gitlab/ci/trace.rb
@@ -112,18 +112,28 @@ module Gitlab
private
def archive_stream!(stream)
- file = Tempfile.new('trace.log')
- size = IO.copy_stream(file, stream)
- raise 'Not all saved' unless size == stream.size
- file.close
-
- job.create_job_artifacts_trace!(
- project: job.project,
- file_type: :trace,
- file: file)
- ensure
- file&.close
- file&.unlink
+ clone_file!(stream, JobArtifactUploader.workhorse_upload_path) do |clone_path|
+ create_job_trace!(job, clone_path)
+ end
+ end
+
+ def clone_file!(src_stream, temp_dir)
+ FileUtils.mkdir_p(temp_dir)
+ Dir.mktmpdir('tmp-trace', temp_dir) do |dir_path|
+ temp_path = File.join(dir_path, "job.log")
+ size = IO.write(src_stream, temp_path)
+ raise 'Not all saved' unless size == src_stream.size
+ yield(temp_path)
+ end
+ end
+
+ def create_job_trace!(job, path)
+ File.open(path) do |stream|
+ job.create_job_artifacts_trace!(
+ project: job.project,
+ file_type: :trace,
+ file: stream)
+ end
end
def ensure_path