Skip to content
Snippets Groups Projects
Unverified Commit 1c7f1052 authored by Z.J. van de Weg's avatar Z.J. van de Weg Committed by Kamil Trzcinski
Browse files

Move object store to a concern

parent a830614f
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -38,7 +38,8 @@ module Projects
rescue => e
error(e.message)
ensure
job.erase_artifacts! unless job.has_expiring_artifacts?
job.erase_artifacts! unless job.has_expiring_artifacts?
FileUtils.rm_rf(artifacts) if Gitlab.config.artifacts.object_store.enabled
end
 
private
Loading
Loading
class ArtifactUploader < GitlabUploader
attr_accessor :job, :field
include ObjectStoreable
storage_options Gitlab.config.artifacts
 
def self.artifacts_path
Gitlab.config.artifacts.path
@storage_options.path
end
 
def self.artifacts_upload_path
Loading
Loading
@@ -13,11 +15,7 @@ class ArtifactUploader < GitlabUploader
File.join(self.artifacts_path, 'tmp/cache/')
end
 
def self.object_store_options
Gitlab.config.artifacts.object_store
end
storage object_store_options.enabled ? :fog : :file
attr_accessor :job, :field
 
def initialize(job, field)
@job, @field = job, field
Loading
Loading
@@ -31,25 +29,6 @@ class ArtifactUploader < GitlabUploader
File.join(self.class.artifacts_cache_path, job.artifacts_path)
end
 
def fog_directory
return super unless use_object_store?
self.class.object_store_options.bucket
end
# Override the credentials
def fog_credentials
return super unless use_object_store?
{
provider: object_store_options.provider,
aws_access_key_id: object_store_options.access_key_id,
aws_secret_access_key: object_store_options.secret_access_key,
region: object_store_options.region,
path_style: true
}
end
def filename
file.try(:filename)
end
Loading
Loading
@@ -57,14 +36,4 @@ class ArtifactUploader < GitlabUploader
def exists?
file.try(:exists?)
end
private
def object_store_options
self.class.object_store_options
end
def use_object_store?
object_store_options.enabled
end
end
module ObjectStoreable
extend ActiveSupport::Concern
module ClassMethods
def use_object_store?
@storage_options.object_store.enabled
end
def storage_options(options)
@storage_options = options
class_eval do
storage @storage_options.object_store.enabled ? :fog : :file
end
end
end
def fog_directory
return super unless use_object_store?
@storage_options.bucket
end
# Override the credentials
def fog_credentials
return super unless use_object_store?
{
provider: @storage_options.provider,
aws_access_key_id: @storage_options.access_key_id,
aws_secret_access_key: @storage_options.secret_access_key,
region: @storage_options.region,
path_style: true
}
end
def fog_public
false
end
def use_object_store?
@storage_options.object_stor.enabled
end
end
Loading
Loading
@@ -27,7 +27,8 @@ module Gitlab
#{config.root}/app/models/members
#{config.root}/app/models/project_services
#{config.root}/app/workers/concerns
#{config.root}/app/services/concerns))
#{config.root}/app/services/concerns
#{config.root}/app/uploaders/concerns))
 
config.generators.templates.push("#{config.root}/generator_templates")
 
Loading
Loading
File deleted
Loading
Loading
@@ -12,72 +12,70 @@ describe Projects::UpdatePagesService do
project.remove_pages
end
 
%w(tar.gz zip).each do |format|
context "for valid #{format}" do
let(:file) { fixture_file_upload(Rails.root + "spec/fixtures/pages.#{format}") }
let(:empty_file) { fixture_file_upload(Rails.root + "spec/fixtures/pages_empty.#{format}") }
let(:metadata) do
filename = Rails.root + "spec/fixtures/pages.#{format}.meta"
fixture_file_upload(filename) if File.exist?(filename)
end
context "for valid zip" do
let(:file) { fixture_file_upload(Rails.root + "spec/fixtures/pages.zip") }
let(:empty_file) { fixture_file_upload(Rails.root + "spec/fixtures/pages_empty.zip") }
let(:metadata) do
filename = Rails.root + "spec/fixtures/pages.zip.meta"
fixture_file_upload(filename) if File.exist?(filename)
end
 
before do
build.update_attributes(artifacts_file: file)
build.update_attributes(artifacts_metadata: metadata)
end
before do
build.update_attributes(artifacts_file: file)
build.update_attributes(artifacts_metadata: metadata)
end
 
describe 'pages artifacts' do
context 'with expiry date' do
before do
build.artifacts_expire_in = "2 days"
end
describe 'pages artifacts' do
context 'with expiry date' do
before do
build.artifacts_expire_in = "2 days"
end
 
it "doesn't delete artifacts" do
expect(execute).to eq(:success)
it "doesn't delete artifacts" do
expect(execute).to eq(:success)
 
expect(build.reload.artifacts_file?).to eq(true)
end
expect(build.reload.artifacts_file?).to eq(true)
end
end
 
context 'without expiry date' do
it "does delete artifacts" do
expect(execute).to eq(:success)
context 'without expiry date' do
it "does delete artifacts" do
expect(execute).to eq(:success)
 
expect(build.reload.artifacts_file?).to eq(false)
end
expect(build.reload.artifacts_file?).to eq(false)
end
end
end
 
it 'succeeds' do
expect(project.pages_deployed?).to be_falsey
expect(execute).to eq(:success)
expect(project.pages_deployed?).to be_truthy
end
it 'succeeds' do
expect(project.pages_deployed?).to be_falsey
expect(execute).to eq(:success)
expect(project.pages_deployed?).to be_truthy
end
 
it 'limits pages size' do
stub_application_setting(max_pages_size: 1)
expect(execute).not_to eq(:success)
end
it 'limits pages size' do
stub_application_setting(max_pages_size: 1)
expect(execute).not_to eq(:success)
end
 
it 'removes pages after destroy' do
expect(PagesWorker).to receive(:perform_in)
expect(project.pages_deployed?).to be_falsey
expect(execute).to eq(:success)
expect(project.pages_deployed?).to be_truthy
project.destroy
expect(project.pages_deployed?).to be_falsey
end
it 'removes pages after destroy' do
expect(PagesWorker).to receive(:perform_in)
expect(project.pages_deployed?).to be_falsey
expect(execute).to eq(:success)
expect(project.pages_deployed?).to be_truthy
project.destroy
expect(project.pages_deployed?).to be_falsey
end
 
it 'fails if sha on branch is not latest' do
pipeline.update_attributes(sha: 'old_sha')
build.update_attributes(artifacts_file: file)
expect(execute).not_to eq(:success)
end
it 'fails if sha on branch is not latest' do
pipeline.update_attributes(sha: 'old_sha')
build.update_attributes(artifacts_file: file)
expect(execute).not_to eq(:success)
end
 
it 'fails for empty file fails' do
build.update_attributes(artifacts_file: empty_file)
expect(execute).not_to eq(:success)
end
it 'fails for empty file fails' do
build.update_attributes(artifacts_file: empty_file)
expect(execute).not_to eq(:success)
end
end
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment