37 lines
1.1 KiB
Ruby
37 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# This class is being used to persist additional artifacts after a pipeline completes, which is a great place to cache a computed result in object storage
|
|
|
|
module Ci
|
|
class PipelineArtifact < ApplicationRecord
|
|
extend Gitlab::Ci::Model
|
|
include Artifactable
|
|
include FileStoreMounter
|
|
|
|
FILE_STORE_SUPPORTED = [
|
|
ObjectStorage::Store::LOCAL,
|
|
ObjectStorage::Store::REMOTE
|
|
].freeze
|
|
|
|
FILE_SIZE_LIMIT = 10.megabytes.freeze
|
|
|
|
belongs_to :project, class_name: "Project", inverse_of: :pipeline_artifacts
|
|
belongs_to :pipeline, class_name: "Ci::Pipeline", inverse_of: :pipeline_artifacts
|
|
|
|
validates :pipeline, :project, :file_format, :file, presence: true
|
|
validates :file_store, presence: true, inclusion: { in: FILE_STORE_SUPPORTED }
|
|
validates :size, presence: true, numericality: { less_than_or_equal_to: FILE_SIZE_LIMIT }
|
|
validates :file_type, presence: true
|
|
|
|
mount_file_store_uploader Ci::PipelineArtifactUploader
|
|
before_save :set_size, if: :file_changed?
|
|
|
|
enum file_type: {
|
|
code_coverage: 1
|
|
}
|
|
|
|
def set_size
|
|
self.size = file.size
|
|
end
|
|
end
|
|
end
|