2016-08-17 08:09:42 +00:00
|
|
|
module API
|
|
|
|
class Pipelines < Grape::API
|
2016-11-21 19:15:46 +00:00
|
|
|
include PaginationParams
|
|
|
|
|
2016-08-17 08:09:42 +00:00
|
|
|
before { authenticate! }
|
|
|
|
|
|
|
|
params do
|
|
|
|
requires :id, type: String, desc: 'The project ID'
|
|
|
|
end
|
2017-03-15 18:09:24 +00:00
|
|
|
resource :projects, requirements: { id: %r{[^/]+} } do
|
2016-08-17 08:09:42 +00:00
|
|
|
desc 'Get all Pipelines of the project' do
|
|
|
|
detail 'This feature was introduced in GitLab 8.11.'
|
2017-01-30 11:11:58 +00:00
|
|
|
success Entities::PipelineBasic
|
2016-08-17 08:09:42 +00:00
|
|
|
end
|
|
|
|
params do
|
2016-11-21 19:15:46 +00:00
|
|
|
use :pagination
|
2017-02-22 17:46:57 +00:00
|
|
|
optional :scope, type: String, values: %w(running branches tags),
|
2016-08-29 16:02:08 +00:00
|
|
|
desc: 'Either running, branches, or tags'
|
2017-02-21 08:20:50 +00:00
|
|
|
optional :status, type: String, values: ['running', 'pending', 'success', 'failed', 'canceled', 'skipped'],
|
|
|
|
desc: 'Pipeline Status'
|
|
|
|
optional :ref, type: String, desc: 'Pipeline Ref'
|
|
|
|
optional :duration, type: Integer, desc: 'Greater than the specified duration'
|
|
|
|
optional :yaml_error, type: Boolean, desc: 'If true, returns only yaml error pipelines.'
|
|
|
|
optional :user_id, type: String, desc: 'User who executed pipelines'
|
|
|
|
optional :order_by, type: String, values: ['id', 'status', 'ref', 'user_id', 'started_at', 'finished_at', 'created_at', 'updated_at'], default: 'id',
|
|
|
|
desc: 'Return issues ordered by `created_at` or `updated_at` fields.'
|
|
|
|
optional :sort, type: String, values: ['asc', 'desc'], default: 'desc',
|
|
|
|
desc: 'Return pipelines sorted in `asc` or `desc` order.'
|
2016-08-17 08:09:42 +00:00
|
|
|
end
|
|
|
|
get ':id/pipelines' do
|
|
|
|
authorize! :read_pipeline, user_project
|
|
|
|
|
2017-02-21 08:20:50 +00:00
|
|
|
pipelines = PipelinesFinder.new(user_project, params).execute(scope: params[:scope])
|
2017-01-30 11:11:58 +00:00
|
|
|
present paginate(pipelines), with: Entities::PipelineBasic
|
2016-08-17 08:09:42 +00:00
|
|
|
end
|
2017-02-20 16:08:29 +00:00
|
|
|
|
2016-10-31 20:38:24 +00:00
|
|
|
desc 'Create a new pipeline' do
|
|
|
|
detail 'This feature was introduced in GitLab 8.14'
|
|
|
|
success Entities::Pipeline
|
|
|
|
end
|
|
|
|
params do
|
|
|
|
requires :ref, type: String, desc: 'Reference'
|
|
|
|
end
|
|
|
|
post ':id/pipeline' do
|
|
|
|
authorize! :create_pipeline, user_project
|
|
|
|
|
|
|
|
new_pipeline = Ci::CreatePipelineService.new(user_project,
|
|
|
|
current_user,
|
2017-02-22 22:54:59 +00:00
|
|
|
declared_params(include_missing: false))
|
|
|
|
.execute(ignore_skip_ci: true, save_on_errors: false)
|
2016-10-31 20:38:24 +00:00
|
|
|
if new_pipeline.persisted?
|
|
|
|
present new_pipeline, with: Entities::Pipeline
|
|
|
|
else
|
|
|
|
render_validation_error!(new_pipeline)
|
|
|
|
end
|
|
|
|
end
|
2016-08-17 08:09:42 +00:00
|
|
|
|
|
|
|
desc 'Gets a specific pipeline for the project' do
|
|
|
|
detail 'This feature was introduced in GitLab 8.11'
|
|
|
|
success Entities::Pipeline
|
|
|
|
end
|
|
|
|
params do
|
|
|
|
requires :pipeline_id, type: Integer, desc: 'The pipeline ID'
|
|
|
|
end
|
|
|
|
get ':id/pipelines/:pipeline_id' do
|
|
|
|
authorize! :read_pipeline, user_project
|
|
|
|
|
|
|
|
present pipeline, with: Entities::Pipeline
|
|
|
|
end
|
|
|
|
|
2017-02-20 16:08:29 +00:00
|
|
|
desc 'Retry builds in the pipeline' do
|
2016-08-17 08:09:42 +00:00
|
|
|
detail 'This feature was introduced in GitLab 8.11.'
|
|
|
|
success Entities::Pipeline
|
|
|
|
end
|
|
|
|
params do
|
|
|
|
requires :pipeline_id, type: Integer, desc: 'The pipeline ID'
|
|
|
|
end
|
|
|
|
post ':id/pipelines/:pipeline_id/retry' do
|
|
|
|
authorize! :update_pipeline, user_project
|
|
|
|
|
|
|
|
pipeline.retry_failed(current_user)
|
|
|
|
|
|
|
|
present pipeline, with: Entities::Pipeline
|
|
|
|
end
|
|
|
|
|
|
|
|
desc 'Cancel all builds in the pipeline' do
|
|
|
|
detail 'This feature was introduced in GitLab 8.11.'
|
|
|
|
success Entities::Pipeline
|
|
|
|
end
|
|
|
|
params do
|
|
|
|
requires :pipeline_id, type: Integer, desc: 'The pipeline ID'
|
|
|
|
end
|
|
|
|
post ':id/pipelines/:pipeline_id/cancel' do
|
|
|
|
authorize! :update_pipeline, user_project
|
|
|
|
|
|
|
|
pipeline.cancel_running
|
|
|
|
|
|
|
|
status 200
|
|
|
|
present pipeline.reload, with: Entities::Pipeline
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
helpers do
|
|
|
|
def pipeline
|
|
|
|
@pipeline ||= user_project.pipelines.find(params[:pipeline_id])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|