54 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module Gitlab
 | |
|   module Ci
 | |
|     module Pipeline
 | |
|       module Seed
 | |
|         class Deployment < Seed::Base
 | |
|           attr_reader :job, :environment
 | |
| 
 | |
|           def initialize(job)
 | |
|             @job = job
 | |
|             @environment = Seed::Environment.new(@job)
 | |
|           end
 | |
| 
 | |
|           def to_resource
 | |
|             return job.deployment if job.deployment
 | |
|             return unless job.starts_environment?
 | |
| 
 | |
|             deployment = ::Deployment.new(attributes)
 | |
|             deployment.environment = environment.to_resource
 | |
| 
 | |
|             # If there is a validation error on environment creation, such as
 | |
|             # the name contains invalid character, the job will fall back to a
 | |
|             # non-environment job.
 | |
|             return unless deployment.valid? && deployment.environment.valid?
 | |
| 
 | |
|             deployment.cluster_id =
 | |
|               deployment.environment.deployment_platform&.cluster_id
 | |
| 
 | |
|             # Allocate IID for deployments.
 | |
|             # This operation must be outside of transactions of pipeline creations.
 | |
|             deployment.ensure_project_iid!
 | |
| 
 | |
|             deployment
 | |
|           end
 | |
| 
 | |
|           private
 | |
| 
 | |
|           def attributes
 | |
|             {
 | |
|               project: job.project,
 | |
|               user: job.user,
 | |
|               ref: job.ref,
 | |
|               tag: job.tag,
 | |
|               sha: job.sha,
 | |
|               on_stop: job.on_stop
 | |
|             }
 | |
|           end
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |