diff options
author | Kamil Trzcinski <ayufan@ayufan.eu> | 2016-10-17 12:24:51 +0300 |
---|---|---|
committer | Kamil Trzcinski <ayufan@ayufan.eu> | 2016-10-17 12:24:51 +0300 |
commit | 40528a1326208a04f95f18d6dcc7547cdb8ae0c3 (patch) | |
tree | 9e3f7ac86edfe03b218e3cd12ed9cae8b2b539f2 /app/services/create_deployment_service.rb | |
parent | 0e1f39d8cee3a6d23fccb195f8257178df840805 (diff) | |
parent | 052de0600c6b137e6f9df08250b4cf5f38280295 (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.rb | 41 |
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 |