diff options
author | Grzegorz Bizon <grzegorz@gitlab.com> | 2017-12-05 17:31:33 +0300 |
---|---|---|
committer | Kamil TrzciĆski <ayufan@ayufan.eu> | 2018-02-28 22:44:09 +0300 |
commit | 6ca02a41500790b3e9061dd8836540955b9aaf7c (patch) | |
tree | 5c66c4826cafa2657fe25d85eb9e189b5f290f32 /app | |
parent | ec72abf53fd82ca3e7f126536a83b27b368696ec (diff) |
Merge branch 'zj-multiple-artifacts-ee' into 'master'
Multiple artifacts ee
See merge request gitlab-org/gitlab-ee!3276
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/projects/artifacts_controller.rb | 5 | ||||
-rw-r--r-- | app/models/ci/build.rb | 14 | ||||
-rw-r--r-- | app/uploaders/job_artifact_uploader.rb | 20 | ||||
-rw-r--r-- | app/uploaders/legacy_artifact_uploader.rb | 20 | ||||
-rw-r--r-- | app/uploaders/lfs_object_uploader.rb | 4 | ||||
-rw-r--r-- | app/uploaders/object_store_uploader.rb | 27 |
6 files changed, 29 insertions, 61 deletions
diff --git a/app/controllers/projects/artifacts_controller.rb b/app/controllers/projects/artifacts_controller.rb index 3995a2fc37a..abc283d7aa9 100644 --- a/app/controllers/projects/artifacts_controller.rb +++ b/app/controllers/projects/artifacts_controller.rb @@ -42,8 +42,7 @@ class Projects::ArtifactsController < Projects::ApplicationController end def raw - path = Gitlab::Ci::Build::Artifacts::Path - .new(params[:path]) + path = Gitlab::Ci::Build::Artifacts::Path.new(params[:path]) send_artifacts_entry(build, path) end @@ -72,7 +71,7 @@ class Projects::ArtifactsController < Projects::ApplicationController end def validate_artifacts! - render_404 unless build && build.artifacts? + render_404 unless build&.artifacts? end def build diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index ddd075e1fcb..7cf8bdd968b 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -45,7 +45,7 @@ module Ci end scope :with_artifacts_not_expired, ->() { with_artifacts.where('artifacts_expire_at IS NULL OR artifacts_expire_at > ?', Time.now) } scope :with_expired_artifacts, ->() { with_artifacts.where('artifacts_expire_at < ?', Time.now) } - scope :with_artifacts_stored_locally, ->() { with_artifacts.where(artifacts_file_store: [nil, ArtifactUploader::LOCAL_STORE]) } + scope :with_artifacts_stored_locally, ->() { with_artifacts.where(artifacts_file_store: [nil, LegacyArtifactUploader::LOCAL_STORE]) } scope :last_month, ->() { where('created_at > ?', Date.today - 1.month) } scope :manual_actions, ->() { where(when: :manual, status: COMPLETED_STATUSES + [:manual]) } scope :ref_protected, -> { where(protected: true) } @@ -361,22 +361,10 @@ module Ci project.running_or_pending_build_count(force: true) end - def artifacts? - !artifacts_expired? && artifacts_file.exists? - end - def browsable_artifacts? artifacts_metadata? end - def downloadable_single_artifacts_file? - artifacts_metadata? && artifacts_file.file_storage? - end - - def artifacts_metadata? - artifacts? && artifacts_metadata.exists? - end - def artifacts_metadata_entry(path, **options) artifacts_metadata.use_file do |metadata_path| metadata = Gitlab::Ci::Build::Artifacts::Metadata.new( diff --git a/app/uploaders/job_artifact_uploader.rb b/app/uploaders/job_artifact_uploader.rb index 15dfb5a5763..a0757dbe6b2 100644 --- a/app/uploaders/job_artifact_uploader.rb +++ b/app/uploaders/job_artifact_uploader.rb @@ -1,5 +1,5 @@ -class JobArtifactUploader < GitlabUploader - storage :file +class JobArtifactUploader < ObjectStoreUploader + storage_options Gitlab.config.artifacts def self.local_store_path Gitlab.config.artifacts.path @@ -15,24 +15,8 @@ class JobArtifactUploader < GitlabUploader model.size end - def store_dir - default_local_path - end - - def cache_dir - File.join(self.class.local_store_path, 'tmp/cache') - end - - def work_dir - File.join(self.class.local_store_path, 'tmp/work') - end - private - def default_local_path - File.join(self.class.local_store_path, default_path) - end - def default_path creation_date = model.created_at.utc.strftime('%Y_%m_%d') diff --git a/app/uploaders/legacy_artifact_uploader.rb b/app/uploaders/legacy_artifact_uploader.rb index 4f7f8a63108..476a46c1754 100644 --- a/app/uploaders/legacy_artifact_uploader.rb +++ b/app/uploaders/legacy_artifact_uploader.rb @@ -1,5 +1,5 @@ -class LegacyArtifactUploader < GitlabUploader - storage :file +class LegacyArtifactUploader < ObjectStoreUploader + storage_options Gitlab.config.artifacts def self.local_store_path Gitlab.config.artifacts.path @@ -9,24 +9,8 @@ class LegacyArtifactUploader < GitlabUploader File.join(self.local_store_path, 'tmp/uploads/') end - def store_dir - default_local_path - end - - def cache_dir - File.join(self.class.local_store_path, 'tmp/cache') - end - - def work_dir - File.join(self.class.local_store_path, 'tmp/work') - end - private - def default_local_path - File.join(self.class.local_store_path, default_path) - end - def default_path File.join(model.created_at.utc.strftime('%Y_%m'), model.project_id.to_s, model.id.to_s) end diff --git a/app/uploaders/lfs_object_uploader.rb b/app/uploaders/lfs_object_uploader.rb index 8a5f599c1d3..88cf0450dcd 100644 --- a/app/uploaders/lfs_object_uploader.rb +++ b/app/uploaders/lfs_object_uploader.rb @@ -7,12 +7,12 @@ class LfsObjectUploader < ObjectStoreUploader end def filename - subject.oid[4..-1] + model.oid[4..-1] end private def default_path - "#{subject.oid[0, 2]}/#{subject.oid[2, 2]}" + "#{model.oid[0, 2]}/#{model.oid[2, 2]}" end end diff --git a/app/uploaders/object_store_uploader.rb b/app/uploaders/object_store_uploader.rb index 9b9f47d5943..b5de0357a5f 100644 --- a/app/uploaders/object_store_uploader.rb +++ b/app/uploaders/object_store_uploader.rb @@ -38,11 +38,16 @@ class ObjectStoreUploader < GitlabUploader end end - attr_reader :subject, :field + def file_storage? + storage.is_a?(CarrierWave::Storage::File) + end + + def file_cache_storage? + cache_storage.is_a?(CarrierWave::Storage::File) + end - def initialize(subject, field) - @subject = subject - @field = field + def real_object_store + model.public_send(store_serialization_column) # rubocop:disable GitlabSecurity/PublicSend end def object_store @@ -51,7 +56,7 @@ class ObjectStoreUploader < GitlabUploader def object_store=(value) @storage = nil - subject.public_send(:"#{field}_store=", value) + model.public_send(:"#{store_serialization_column}=", value) # rubocop:disable GitlabSecurity/PublicSend end def store_dir @@ -99,7 +104,7 @@ class ObjectStoreUploader < GitlabUploader # since we change storage store the new storage # in case of failure delete new file begin - subject.save! + model.save! rescue => e new_file.delete self.object_store = old_store @@ -113,7 +118,7 @@ class ObjectStoreUploader < GitlabUploader def schedule_migration_to_object_storage(new_file) if self.class.object_store_enabled? && licensed? && file_storage? - ObjectStorageUploadWorker.perform_async(self.class.name, subject.class.name, field, subject.id) + ObjectStorageUploadWorker.perform_async(self.class.name, model.class.name, mounted_as, model.id) end end @@ -178,6 +183,14 @@ class ObjectStoreUploader < GitlabUploader raise NotImplementedError end + def serialization_column + model.class.uploader_option(mounted_as, :mount_on) || mounted_as + end + + def store_serialization_column + :"#{serialization_column}_store" + end + def storage @storage ||= if object_store == REMOTE_STORE |