Commit 50469645 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Add hotfix that allows to access build artifacts created before 8.3

This is a temporary hotfix that allows to access build artifacts created
before 8.3. See #5257.

This needs to be changed after migrating CI build files.

Note that `ArtifactUploader` uses `artifacts_path` to create a storage
directory before and after parsisting `Ci::Build` instance, before and
after moving a file to store (save and fetch a file).
parent 42592201
...@@ -196,7 +196,7 @@ module Ci ...@@ -196,7 +196,7 @@ module Ci
def raw_trace def raw_trace
if File.file?(path_to_trace) if File.file?(path_to_trace)
File.read(path_to_trace) File.read(path_to_trace)
elsif File.file?(old_path_to_trace) elsif project.ci_id && File.file?(old_path_to_trace)
# Temporary fix for build trace data integrity # Temporary fix for build trace data integrity
File.read(old_path_to_trace) File.read(old_path_to_trace)
else else
...@@ -215,8 +215,8 @@ module Ci ...@@ -215,8 +215,8 @@ module Ci
end end
def trace=(trace) def trace=(trace)
unless Dir.exists? dir_to_trace unless Dir.exists?(dir_to_trace)
FileUtils.mkdir_p dir_to_trace FileUtils.mkdir_p(dir_to_trace)
end end
File.write(path_to_trace, trace) File.write(path_to_trace, trace)
...@@ -237,6 +237,9 @@ module Ci ...@@ -237,6 +237,9 @@ module Ci
## ##
# Deprecated # Deprecated
# #
# This is a hotfix for CI build data integrity, see #4246
# Should be removed in 8.4, after CI files migration has been done.
#
def old_dir_to_trace def old_dir_to_trace
File.join( File.join(
Settings.gitlab_ci.builds_path, Settings.gitlab_ci.builds_path,
...@@ -248,10 +251,38 @@ module Ci ...@@ -248,10 +251,38 @@ module Ci
## ##
# Deprecated # Deprecated
# #
# This is a hotfix for CI build data integrity, see #4246
# Should be removed in 8.4, after CI files migration has been done.
#
def old_path_to_trace def old_path_to_trace
"#{old_dir_to_trace}/#{id}.log" "#{old_dir_to_trace}/#{id}.log"
end end
##
# Deprecated
#
# This contains a hotfix for CI build data integrity, see #4246
#
# This method is used by `ArtifactUploader` to create a store_dir.
# Warning: Uploader uses it after AND before file has been stored.
#
# This method returns old path to artifacts only if it already exists.
#
def artifacts_path
old = File.join(created_at.utc.strftime('%Y_%m'),
project.ci_id.to_s,
id.to_s)
old_store = File.join(ArtifactUploader.artifacts_path, old)
return old if project.ci_id && File.directory?(old_store)
File.join(
created_at.utc.strftime('%Y_%m'),
project.id.to_s,
id.to_s
)
end
def token def token
project.runners_token project.runners_token
end end
......
...@@ -20,16 +20,12 @@ class ArtifactUploader < CarrierWave::Uploader::Base ...@@ -20,16 +20,12 @@ class ArtifactUploader < CarrierWave::Uploader::Base
@build, @field = build, field @build, @field = build, field
end end
def artifacts_path
File.join(build.created_at.utc.strftime('%Y_%m'), build.project.id.to_s, build.id.to_s)
end
def store_dir def store_dir
File.join(ArtifactUploader.artifacts_path, artifacts_path) File.join(self.class.artifacts_path, @build.artifacts_path)
end end
def cache_dir def cache_dir
File.join(ArtifactUploader.artifacts_cache_path, artifacts_path) File.join(self.class.artifacts_cache_path, @build.artifacts_path)
end end
def file_storage? def file_storage?
......
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