Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-10-17 12:24:51 +0300
committerKamil Trzcinski <ayufan@ayufan.eu>2016-10-17 12:24:51 +0300
commit40528a1326208a04f95f18d6dcc7547cdb8ae0c3 (patch)
tree9e3f7ac86edfe03b218e3cd12ed9cae8b2b539f2 /app/services/create_deployment_service.rb
parent0e1f39d8cee3a6d23fccb195f8257178df840805 (diff)
parent052de0600c6b137e6f9df08250b4cf5f38280295 (diff)
Merge remote-tracking branch 'origin/master' into 22191-delete-dynamic-envs-mr
Diffstat (limited to 'app/services/create_deployment_service.rb')
-rw-r--r--app/services/create_deployment_service.rb41
1 files changed, 26 insertions, 15 deletions
diff --git a/app/services/create_deployment_service.rb b/app/services/create_deployment_service.rb
index c87542e57a2..923de58b244 100644
--- a/app/services/create_deployment_service.rb
+++ b/app/services/create_deployment_service.rb
@@ -2,31 +2,42 @@ require_relative 'base_service'
class CreateDeploymentService < BaseService
def execute(deployable = nil)
- environment = find_or_create_environment
+ return unless executable?
- if close?
- environment.close
- return
+ ActiveRecord::Base.transaction do
+ @deployable = deployable
+ @environment = prepare_environment
+
+ if close?
+ @environment.close
+ return
+ end
+
+ @environment.reopen
+
+ deploy.tap do |deployment|
+ deployment.update_merge_request_metrics!
+ end
end
+ end
+
+ private
- environment.reopen
+ def executable?
+ project && name.present?
+ end
- deployment = project.deployments.create(
- environment: environment,
+ def deploy
+ project.deployments.create(
+ environment: @environment,
ref: params[:ref],
tag: params[:tag],
sha: params[:sha],
user: current_user,
- deployable: deployable
- )
-
- deployment.update_merge_request_metrics!
- deployment
+ deployable: @deployable)
end
- private
-
- def find_or_create_environment
+ def prepare_environment
project.environments.find_or_create_by(name: expanded_name) do |environment|
environment.external_url = expanded_url
end