49 lines
1.1 KiB
Ruby
49 lines
1.1 KiB
Ruby
module Ci
|
|
class CreatePipelineService < BaseService
|
|
def execute
|
|
pipeline = project.pipelines.new(params)
|
|
pipeline.user = current_user
|
|
|
|
unless ref_names.include?(params[:ref])
|
|
pipeline.errors.add(:base, 'Reference not found')
|
|
return pipeline
|
|
end
|
|
|
|
if commit
|
|
pipeline.sha = commit.id
|
|
else
|
|
pipeline.errors.add(:base, 'Commit not found')
|
|
return pipeline
|
|
end
|
|
|
|
unless can?(current_user, :create_pipeline, project)
|
|
pipeline.errors.add(:base, 'Insufficient permissions to create a new pipeline')
|
|
return pipeline
|
|
end
|
|
|
|
unless pipeline.config_processor
|
|
pipeline.errors.add(:base, pipeline.yaml_errors || 'Missing .gitlab-ci.yml file')
|
|
return pipeline
|
|
end
|
|
|
|
pipeline.save!
|
|
|
|
unless pipeline.create_builds(current_user)
|
|
pipeline.errors.add(:base, 'No builds for this pipeline.')
|
|
end
|
|
|
|
pipeline.save
|
|
pipeline
|
|
end
|
|
|
|
private
|
|
|
|
def ref_names
|
|
@ref_names ||= project.repository.ref_names
|
|
end
|
|
|
|
def commit
|
|
@commit ||= project.commit(params[:ref])
|
|
end
|
|
end
|
|
end
|