Commit 58fb23cc authored by Marius Bobin's avatar Marius Bobin

Move the archive logic back into the lib/ directory

Move the archive logic back into the lib/ directory
parent 7ee5860a
# frozen_string_literal: true
module Ci
class ArchiveBuildTraceService
include ::Gitlab::Utils::StrongMemoize
include Checksummable
def initialize(job, trace_metadata)
@job = job
@trace_metadata = trace_metadata
end
def execute!(stream)
clone_file!(stream, JobArtifactUploader.workhorse_upload_path) do |clone_path|
md5_checksum = self.class.md5_hexdigest(clone_path)
sha256_checksum = self.class.sha256_hexdigest(clone_path)
job.transaction do
trace_artifact = create_build_trace!(clone_path, sha256_checksum)
trace_metadata.track_archival!(trace_artifact.id, md5_checksum)
end
end
end
private
attr_reader :job, :trace_metadata
def clone_file!(src_stream, temp_dir)
FileUtils.mkdir_p(temp_dir)
Dir.mktmpdir("tmp-trace-#{job.id}", temp_dir) do |dir_path|
temp_path = File.join(dir_path, "job.log")
FileUtils.touch(temp_path)
size = IO.copy_stream(src_stream, temp_path)
raise ::Gitlab::Ci::Trace::ArchiveError, 'Failed to copy stream' unless size == src_stream.size
yield(temp_path)
end
end
def create_build_trace!(path, file_sha256)
File.open(path) do |stream|
# TODO: Set `file_format: :raw` after we've cleaned up legacy traces migration
# https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/20307
job.create_job_artifacts_trace!(
project: job.project,
file_type: :trace,
file: stream,
file_sha256: file_sha256)
end
end
end
end
...@@ -236,7 +236,7 @@ module Gitlab ...@@ -236,7 +236,7 @@ module Gitlab
end end
def archive_stream!(stream) def archive_stream!(stream)
::Ci::ArchiveBuildTraceService.new(job, trace_metadata).execute!(stream) ::Gitlab::Ci::Trace::Archive.new(job, trace_metadata).execute!(stream)
end end
def trace_metadata def trace_metadata
......
# frozen_string_literal: true
module Gitlab
module Ci
class Trace
class Archive
include ::Gitlab::Utils::StrongMemoize
include Checksummable
def initialize(job, trace_metadata)
@job = job
@trace_metadata = trace_metadata
end
def execute!(stream)
clone_file!(stream, JobArtifactUploader.workhorse_upload_path) do |clone_path|
md5_checksum = self.class.md5_hexdigest(clone_path)
sha256_checksum = self.class.sha256_hexdigest(clone_path)
job.transaction do
trace_artifact = create_build_trace!(clone_path, sha256_checksum)
trace_metadata.track_archival!(trace_artifact.id, md5_checksum)
end
end
end
private
attr_reader :job, :trace_metadata
def clone_file!(src_stream, temp_dir)
FileUtils.mkdir_p(temp_dir)
Dir.mktmpdir("tmp-trace-#{job.id}", temp_dir) do |dir_path|
temp_path = File.join(dir_path, "job.log")
FileUtils.touch(temp_path)
size = IO.copy_stream(src_stream, temp_path)
raise ::Gitlab::Ci::Trace::ArchiveError, 'Failed to copy stream' unless size == src_stream.size
yield(temp_path)
end
end
def create_build_trace!(path, file_sha256)
File.open(path) do |stream|
# TODO: Set `file_format: :raw` after we've cleaned up legacy traces migration
# https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/20307
job.create_job_artifacts_trace!(
project: job.project,
file_type: :trace,
file: stream,
file_sha256: file_sha256)
end
end
end
end
end
end
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe Ci::ArchiveBuildTraceService do RSpec.describe Gitlab::Ci::Trace::Archive do
let_it_be(:job) { create(:ci_build, :success, :trace_live) } let_it_be(:job) { create(:ci_build, :success, :trace_live) }
let_it_be(:trace_metadata) { create(:ci_build_trace_metadata, build: job) } let_it_be(:trace_metadata) { create(:ci_build_trace_metadata, build: job) }
let_it_be(:src_checksum) do let_it_be(:src_checksum) do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment