summaryrefslogtreecommitdiff
path: root/app/services/ci/create_trace_artifact_service.rb
blob: ffde824972c7a820e1e90fdb7552781f68d23860 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
module Ci
  class CreateTraceArtifactService < BaseService
    def execute(job)
      return if job.job_artifacts_trace

      job.trace.read do |stream|
        break unless stream.file?

        clone_file!(stream.path, JobArtifactUploader.workhorse_upload_path) do |clone_path|
          create_job_trace!(job, clone_path)
          FileUtils.rm(stream.path)
        end
      end
    end

    private

    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 clone_file!(src_path, temp_dir)
      FileUtils.mkdir_p(temp_dir)
      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