diff options
author | Kamil Trzcinski <ayufan@ayufan.eu> | 2016-06-11 00:36:54 +0300 |
---|---|---|
committer | Kamil Trzcinski <ayufan@ayufan.eu> | 2016-06-11 00:36:54 +0300 |
commit | 907c0e6796b69f9577c147dd489cf55748c749ac (patch) | |
tree | c4db6a3d3785fa845be98447eb4303b548ab7809 /app/services/create_deployment_service.rb | |
parent | cf7da039bedcad5163ce9deedccc94206d4c485a (diff) |
Added initial version of deployments
Diffstat (limited to 'app/services/create_deployment_service.rb')
-rw-r--r-- | app/services/create_deployment_service.rb | 45 |
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 |