summaryrefslogtreecommitdiff
path: root/app/services/create_deployment_service.rb
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-06-10 23:36:54 +0200
committerKamil Trzcinski <ayufan@ayufan.eu>2016-06-10 23:36:54 +0200
commit907c0e6796b69f9577c147dd489cf55748c749ac (patch)
treec4db6a3d3785fa845be98447eb4303b548ab7809 /app/services/create_deployment_service.rb
parentcf7da039bedcad5163ce9deedccc94206d4c485a (diff)
downloadgitlab-ce-907c0e6796b69f9577c147dd489cf55748c749ac.tar.gz
Added initial version of deployments
Diffstat (limited to 'app/services/create_deployment_service.rb')
-rw-r--r--app/services/create_deployment_service.rb45
1 files changed, 45 insertions, 0 deletions
diff --git a/app/services/create_deployment_service.rb b/app/services/create_deployment_service.rb
new file mode 100644
index 00000000000..f745471913f
--- /dev/null
+++ b/app/services/create_deployment_service.rb
@@ -0,0 +1,45 @@
+require_relative 'base_service'
+
+class CreateDeploymentService < BaseService
+ def execute(deployable)
+ environment = find_or_create_environment(params[:environment])
+
+ deployment = create_deployment(environment, deployable)
+ if deployment.persisted?
+ success(deployment)
+ else
+ error(deployment.errors)
+ end
+ end
+
+ private
+
+ def find_or_create_environment(environment)
+ find_environment(environment) || create_environment(environment)
+ end
+
+ def create_environment(environment)
+ project.environments.create(name: environment)
+ end
+
+ def find_environment(environment)
+ project.environments.find_by(name: environment)
+ end
+
+ def create_deployment(environment, deployable)
+ environment.deployments.create(
+ project: project,
+ ref: build.ref,
+ tag: build.tag,
+ sha: build.sha,
+ user: current_user,
+ deployable: deployable,
+ )
+ end
+
+ def success(deployment)
+ out = super()
+ out[:deployment] = deployment
+ out
+ end
+end