summaryrefslogtreecommitdiff
path: root/app/models/ci/job_artifact.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/ci/job_artifact.rb')
-rw-r--r--app/models/ci/job_artifact.rb22
1 files changed, 19 insertions, 3 deletions
diff --git a/app/models/ci/job_artifact.rb b/app/models/ci/job_artifact.rb
index ad3e867f9d5..ec1137920ef 100644
--- a/app/models/ci/job_artifact.rb
+++ b/app/models/ci/job_artifact.rb
@@ -10,9 +10,7 @@ module Ci
include Artifactable
include FileStoreMounter
include EachBatch
- include IgnorableColumns
-
- ignore_columns %i[id_convert_to_bigint job_id_convert_to_bigint], remove_with: '14.5', remove_after: '2021-11-22'
+ include Gitlab::Utils::StrongMemoize
TEST_REPORT_FILE_TYPES = %w[junit].freeze
COVERAGE_REPORT_FILE_TYPES = %w[cobertura].freeze
@@ -124,6 +122,9 @@ module Ci
mount_file_store_uploader JobArtifactUploader
+ skip_callback :save, :after, :store_file!, if: :store_after_commit?
+ after_commit :store_file_after_commit!, on: [:create, :update], if: :store_after_commit?
+
validates :file_format, presence: true, unless: :trace?, on: :create
validate :validate_file_format!, unless: :trace?, on: :create
before_save :set_size, if: :file_changed?
@@ -338,8 +339,23 @@ module Ci
}
end
+ def store_after_commit?
+ strong_memoize(:store_after_commit) do
+ trace? &&
+ JobArtifactUploader.direct_upload_enabled? &&
+ Feature.enabled?(:ci_store_trace_outside_transaction, project, default_enabled: :yaml)
+ end
+ end
+
private
+ def store_file_after_commit!
+ return unless previous_changes.key?(:file)
+
+ store_file!
+ update_file_store
+ end
+
def set_size
self.size = file.size
end