summaryrefslogtreecommitdiff
path: root/app/services/create_deployment_service.rb
blob: f745471913f4c5c76c2d7d7410ec266674c418ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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