918e589c2b
- Don't use `TableReferences` - using `.arel_table` is shorter! - Move some database-related code to `Gitlab::Database` - Remove the `MergeRequest#issues_closed` and `Issue#closed_by_merge_requests` associations. They were either shadowing or were too similar to existing methods. They are not being used anywhere, so it's better to remove them to reduce confusion. - Use Rails 3-style validations - Index for `MergeRequest::Metrics#first_deployed_to_production_at` - Only include `CycleAnalyticsHelpers::TestGeneration` for specs that need it. - Other minor refactorings.
54 lines
985 B
Ruby
54 lines
985 B
Ruby
require_relative 'base_service'
|
|
|
|
class CreateDeploymentService < BaseService
|
|
def execute(deployable = nil)
|
|
environment = find_or_create_environment
|
|
|
|
deployment = project.deployments.create(
|
|
environment: environment,
|
|
ref: params[:ref],
|
|
tag: params[:tag],
|
|
sha: params[:sha],
|
|
user: current_user,
|
|
deployable: deployable
|
|
)
|
|
|
|
deployment.update_merge_request_metrics!
|
|
|
|
deployment
|
|
end
|
|
|
|
private
|
|
|
|
def find_or_create_environment
|
|
project.environments.find_or_create_by(name: expanded_name) do |environment|
|
|
environment.external_url = expanded_url
|
|
end
|
|
end
|
|
|
|
def expanded_name
|
|
ExpandVariables.expand(name, variables)
|
|
end
|
|
|
|
def expanded_url
|
|
return unless url
|
|
|
|
@expanded_url ||= ExpandVariables.expand(url, variables)
|
|
end
|
|
|
|
def name
|
|
params[:environment]
|
|
end
|
|
|
|
def url
|
|
options[:url]
|
|
end
|
|
|
|
def options
|
|
params[:options] || {}
|
|
end
|
|
|
|
def variables
|
|
params[:variables] || []
|
|
end
|
|
end
|