diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-10-14 10:19:16 +0200 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-10-14 10:19:16 +0200 |
commit | 3726dc4bb73647123ebef5c97f401f5537d3ae16 (patch) | |
tree | e26c4735f2f42132d7cbd125ae968280be185b9b | |
parent | 4e9342599b472a28928a95fd43efc4df851f8e33 (diff) | |
download | gitlab-ce-3726dc4bb73647123ebef5c97f401f5537d3ae16.tar.gz |
Check if project exists before creating deployment
-rw-r--r-- | app/services/create_deployment_service.rb | 6 | ||||
-rw-r--r-- | app/workers/build_success_worker.rb | 2 | ||||
-rw-r--r-- | spec/services/create_deployment_service_spec.rb | 17 |
3 files changed, 20 insertions, 5 deletions
diff --git a/app/services/create_deployment_service.rb b/app/services/create_deployment_service.rb index c6dc2148c11..ff9a8310a8c 100644 --- a/app/services/create_deployment_service.rb +++ b/app/services/create_deployment_service.rb @@ -2,6 +2,8 @@ require_relative 'base_service' class CreateDeploymentService < BaseService def execute(deployable = nil) + return unless executable? + ActiveRecord::Base.transaction do @deployable = deployable @environment = prepare_environment @@ -14,6 +16,10 @@ class CreateDeploymentService < BaseService private + def executable? + project && name.present? + end + def deploy project.deployments.create( environment: @environment, diff --git a/app/workers/build_success_worker.rb b/app/workers/build_success_worker.rb index a9dc34166a1..500d357ce31 100644 --- a/app/workers/build_success_worker.rb +++ b/app/workers/build_success_worker.rb @@ -4,8 +4,6 @@ class BuildSuccessWorker def perform(build_id) Ci::Build.find_by(id: build_id).try do |build| - return unless build.project - create_deployment(build) end end diff --git a/spec/services/create_deployment_service_spec.rb b/spec/services/create_deployment_service_spec.rb index 343b4385bf2..5fe56e7725f 100644 --- a/spec/services/create_deployment_service_spec.rb +++ b/spec/services/create_deployment_service_spec.rb @@ -84,11 +84,22 @@ describe CreateDeploymentService, services: true do expect(subject).to be_persisted end end + + context 'when project was removed' do + let(:project) { nil } + + it 'does not create deployment or environment' do + expect { subject }.not_to raise_error + + expect(Environment.count).to be_zero + expect(Deployment.count).to be_zero + end + end end describe 'processing of builds' do let(:environment) { nil } - + shared_examples 'does not create environment and deployment' do it 'does not create a new environment' do expect { subject }.not_to change { Environment.count } @@ -133,12 +144,12 @@ describe CreateDeploymentService, services: true do context 'without environment specified' do let(:build) { create(:ci_build, project: project) } - + it_behaves_like 'does not create environment and deployment' do subject { build.success } end end - + context 'when environment is specified' do let(:pipeline) { create(:ci_pipeline, project: project) } let(:build) { create(:ci_build, pipeline: pipeline, environment: 'production', options: options) } |