diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-16 21:08:01 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-16 21:08:01 +0300 |
commit | 8e45d25f7dde6508839ffee719c0ddc2cf6b12d3 (patch) | |
tree | 9839e7fe63b36904d40995ebf519124c9a8f7681 /app/services/deployments | |
parent | 00c78fb814d7ce00989ac04edd6cdaa3239da284 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/deployments')
-rw-r--r-- | app/services/deployments/after_create_service.rb | 60 | ||||
-rw-r--r-- | app/services/deployments/create_service.rb | 39 | ||||
-rw-r--r-- | app/services/deployments/update_service.rb | 16 |
3 files changed, 115 insertions, 0 deletions
diff --git a/app/services/deployments/after_create_service.rb b/app/services/deployments/after_create_service.rb new file mode 100644 index 00000000000..2572802e6a1 --- /dev/null +++ b/app/services/deployments/after_create_service.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +module Deployments + class AfterCreateService + attr_reader :deployment + attr_reader :deployable + + delegate :environment, to: :deployment + delegate :variables, to: :deployable + delegate :options, to: :deployable, allow_nil: true + + def initialize(deployment) + @deployment = deployment + @deployable = deployment.deployable + end + + def execute + deployment.create_ref + deployment.invalidate_cache + + update_environment(deployment) + + deployment + end + + def update_environment(deployment) + ActiveRecord::Base.transaction do + if (url = expanded_environment_url) + environment.external_url = url + end + + environment.fire_state_event(action) + + if environment.save && !environment.stopped? + deployment.update_merge_request_metrics! + end + end + end + + private + + def environment_options + options&.dig(:environment) || {} + end + + def expanded_environment_url + ExpandVariables.expand(environment_url, -> { variables }) if environment_url + end + + def environment_url + environment_options[:url] + end + + def action + environment_options[:action] || 'start' + end + end +end + +Deployments::AfterCreateService.prepend_if_ee('EE::Deployments::AfterCreateService') diff --git a/app/services/deployments/create_service.rb b/app/services/deployments/create_service.rb new file mode 100644 index 00000000000..89e3f7c8b83 --- /dev/null +++ b/app/services/deployments/create_service.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module Deployments + class CreateService + attr_reader :environment, :current_user, :params + + def initialize(environment, current_user, params) + @environment = environment + @current_user = current_user + @params = params + end + + def execute + create_deployment.tap do |deployment| + AfterCreateService.new(deployment).execute if deployment.persisted? + end + end + + def create_deployment + environment.deployments.create(deployment_attributes) + end + + def deployment_attributes + # We use explicit parameters here so we never by accident allow parameters + # to be set that one should not be able to set (e.g. the row ID). + { + cluster_id: environment.deployment_platform&.cluster_id, + project_id: environment.project_id, + environment_id: environment.id, + ref: params[:ref], + tag: params[:tag], + sha: params[:sha], + user: current_user, + on_stop: params[:on_stop], + status: params[:status] + } + end + end +end diff --git a/app/services/deployments/update_service.rb b/app/services/deployments/update_service.rb new file mode 100644 index 00000000000..7c8215d28f2 --- /dev/null +++ b/app/services/deployments/update_service.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module Deployments + class UpdateService + attr_reader :deployment, :params + + def initialize(deployment, params) + @deployment = deployment + @params = params + end + + def execute + deployment.update(status: params[:status]) + end + end +end |