2018-09-29 18:34:47 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-08-17 04:09:42 -04:00
|
|
|
module API
|
|
|
|
class Pipelines < Grape::API
|
2016-11-21 14:15:46 -05:00
|
|
|
include PaginationParams
|
|
|
|
|
2019-08-23 16:54:32 -04:00
|
|
|
before { authenticate_non_get! }
|
2016-08-17 04:09:42 -04:00
|
|
|
|
|
|
|
params do
|
|
|
|
requires :id, type: String, desc: 'The project ID'
|
|
|
|
end
|
2018-11-08 07:18:17 -05:00
|
|
|
resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
|
2016-08-17 04:09:42 -04:00
|
|
|
desc 'Get all Pipelines of the project' do
|
|
|
|
detail 'This feature was introduced in GitLab 8.11.'
|
2017-01-30 06:11:58 -05:00
|
|
|
success Entities::PipelineBasic
|
2016-08-17 04:09:42 -04:00
|
|
|
end
|
|
|
|
params do
|
2016-11-21 14:15:46 -05:00
|
|
|
use :pagination
|
2017-03-07 08:02:29 -05:00
|
|
|
optional :scope, type: String, values: %w[running pending finished branches tags],
|
2017-02-28 07:24:49 -05:00
|
|
|
desc: 'The scope of pipelines'
|
2017-03-30 05:59:45 -04:00
|
|
|
optional :status, type: String, values: HasStatus::AVAILABLE_STATUSES,
|
2017-02-28 07:24:49 -05:00
|
|
|
desc: 'The status of pipelines'
|
|
|
|
optional :ref, type: String, desc: 'The ref of pipelines'
|
2018-04-01 17:16:35 -04:00
|
|
|
optional :sha, type: String, desc: 'The sha of pipelines'
|
2017-04-27 09:09:18 -04:00
|
|
|
optional :yaml_errors, type: Boolean, desc: 'Returns pipelines with invalid configurations'
|
|
|
|
optional :name, type: String, desc: 'The name of the user who triggered pipelines'
|
|
|
|
optional :username, type: String, desc: 'The username of the user who triggered pipelines'
|
2017-03-30 06:30:02 -04:00
|
|
|
optional :order_by, type: String, values: PipelinesFinder::ALLOWED_INDEXED_COLUMNS, default: 'id',
|
2017-04-27 09:09:18 -04:00
|
|
|
desc: 'Order pipelines'
|
2017-03-24 03:06:19 -04:00
|
|
|
optional :sort, type: String, values: %w[asc desc], default: 'desc',
|
2017-04-27 09:09:18 -04:00
|
|
|
desc: 'Sort pipelines'
|
2016-08-17 04:09:42 -04:00
|
|
|
end
|
|
|
|
get ':id/pipelines' do
|
|
|
|
authorize! :read_pipeline, user_project
|
2019-08-23 16:54:32 -04:00
|
|
|
authorize! :read_build, user_project
|
2016-08-17 04:09:42 -04:00
|
|
|
|
2018-06-26 12:31:05 -04:00
|
|
|
pipelines = PipelinesFinder.new(user_project, current_user, params).execute
|
2017-01-30 06:11:58 -05:00
|
|
|
present paginate(pipelines), with: Entities::PipelineBasic
|
2016-08-17 04:09:42 -04:00
|
|
|
end
|
2017-02-20 11:08:29 -05:00
|
|
|
|
2016-10-31 16:38:24 -04:00
|
|
|
desc 'Create a new pipeline' do
|
|
|
|
detail 'This feature was introduced in GitLab 8.14'
|
|
|
|
success Entities::Pipeline
|
|
|
|
end
|
|
|
|
params do
|
2019-01-16 07:09:29 -05:00
|
|
|
requires :ref, type: String, desc: 'Reference'
|
2018-05-31 03:47:53 -04:00
|
|
|
optional :variables, Array, desc: 'Array of variables available in the pipeline'
|
2016-10-31 16:38:24 -04:00
|
|
|
end
|
|
|
|
post ':id/pipeline' do
|
2019-09-18 10:02:45 -04:00
|
|
|
Gitlab::QueryLimiting.whitelist('https://gitlab.com/gitlab-org/gitlab-foss/issues/42124')
|
2018-01-15 10:21:04 -05:00
|
|
|
|
2016-10-31 16:38:24 -04:00
|
|
|
authorize! :create_pipeline, user_project
|
|
|
|
|
2018-06-01 09:52:24 -04:00
|
|
|
pipeline_params = declared_params(include_missing: false)
|
|
|
|
.merge(variables_attributes: params[:variables])
|
|
|
|
.except(:variables)
|
|
|
|
|
2016-10-31 16:38:24 -04:00
|
|
|
new_pipeline = Ci::CreatePipelineService.new(user_project,
|
|
|
|
current_user,
|
2018-06-01 09:52:24 -04:00
|
|
|
pipeline_params)
|
2017-05-24 09:13:51 -04:00
|
|
|
.execute(:api, ignore_skip_ci: true, save_on_errors: false)
|
2018-01-11 11:34:01 -05:00
|
|
|
|
2016-10-31 16:38:24 -04:00
|
|
|
if new_pipeline.persisted?
|
|
|
|
present new_pipeline, with: Entities::Pipeline
|
|
|
|
else
|
|
|
|
render_validation_error!(new_pipeline)
|
|
|
|
end
|
|
|
|
end
|
2016-08-17 04:09:42 -04:00
|
|
|
|
2019-09-17 08:06:48 -04:00
|
|
|
desc 'Gets a the latest pipeline for the project branch' do
|
|
|
|
detail 'This feature was introduced in GitLab 12.3'
|
|
|
|
success Entities::Pipeline
|
|
|
|
end
|
|
|
|
params do
|
|
|
|
optional :ref, type: String, desc: 'branch ref of pipeline'
|
|
|
|
end
|
|
|
|
get ':id/pipelines/latest' do
|
|
|
|
authorize! :read_pipeline, latest_pipeline
|
|
|
|
|
|
|
|
present latest_pipeline, with: Entities::Pipeline
|
|
|
|
end
|
|
|
|
|
2016-08-17 04:09:42 -04: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
|
2019-01-28 07:12:30 -05:00
|
|
|
authorize! :read_pipeline, pipeline
|
2016-08-17 04:09:42 -04:00
|
|
|
|
|
|
|
present pipeline, with: Entities::Pipeline
|
|
|
|
end
|
|
|
|
|
2019-04-09 10:53:44 -04:00
|
|
|
desc 'Gets the variables for a given pipeline' do
|
|
|
|
detail 'This feature was introduced in GitLab 11.11'
|
|
|
|
success Entities::Variable
|
|
|
|
end
|
|
|
|
params do
|
|
|
|
requires :pipeline_id, type: Integer, desc: 'The pipeline ID'
|
|
|
|
end
|
|
|
|
get ':id/pipelines/:pipeline_id/variables' do
|
|
|
|
authorize! :read_pipeline_variable, pipeline
|
|
|
|
|
|
|
|
present pipeline.variables, with: Entities::Variable
|
|
|
|
end
|
|
|
|
|
2018-11-12 10:27:28 -05:00
|
|
|
desc 'Deletes a pipeline' do
|
|
|
|
detail 'This feature was introduced in GitLab 11.6'
|
|
|
|
http_codes [[204, 'Pipeline was deleted'], [403, 'Forbidden']]
|
|
|
|
end
|
|
|
|
params do
|
|
|
|
requires :pipeline_id, type: Integer, desc: 'The pipeline ID'
|
|
|
|
end
|
|
|
|
delete ':id/pipelines/:pipeline_id' do
|
2018-11-13 11:17:01 -05:00
|
|
|
authorize! :destroy_pipeline, pipeline
|
2018-11-12 10:27:28 -05:00
|
|
|
|
2018-11-12 13:18:57 -05:00
|
|
|
destroy_conditionally!(pipeline) do
|
|
|
|
::Ci::DestroyPipelineService.new(user_project, current_user).execute(pipeline)
|
|
|
|
end
|
2018-11-12 10:27:28 -05:00
|
|
|
end
|
|
|
|
|
2017-02-20 11:08:29 -05:00
|
|
|
desc 'Retry builds in the pipeline' do
|
2016-08-17 04:09:42 -04:00
|
|
|
detail 'This feature was introduced in GitLab 8.11.'
|
|
|
|
success Entities::Pipeline
|
|
|
|
end
|
|
|
|
params do
|
2019-01-16 07:09:29 -05:00
|
|
|
requires :pipeline_id, type: Integer, desc: 'The pipeline ID'
|
2016-08-17 04:09:42 -04:00
|
|
|
end
|
|
|
|
post ':id/pipelines/:pipeline_id/retry' do
|
2019-01-28 07:12:30 -05:00
|
|
|
authorize! :update_pipeline, pipeline
|
2016-08-17 04:09:42 -04:00
|
|
|
|
|
|
|
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
|
2019-01-16 07:09:29 -05:00
|
|
|
requires :pipeline_id, type: Integer, desc: 'The pipeline ID'
|
2016-08-17 04:09:42 -04:00
|
|
|
end
|
|
|
|
post ':id/pipelines/:pipeline_id/cancel' do
|
2019-01-28 07:12:30 -05:00
|
|
|
authorize! :update_pipeline, pipeline
|
2016-08-17 04:09:42 -04:00
|
|
|
|
|
|
|
pipeline.cancel_running
|
|
|
|
|
|
|
|
status 200
|
2019-04-08 09:33:36 -04:00
|
|
|
present pipeline.reset, with: Entities::Pipeline
|
2016-08-17 04:09:42 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
helpers do
|
|
|
|
def pipeline
|
2019-09-17 08:06:48 -04:00
|
|
|
strong_memoize(:pipeline) do
|
|
|
|
user_project.ci_pipelines.find(params[:pipeline_id])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def latest_pipeline
|
|
|
|
strong_memoize(:latest_pipeline) do
|
|
|
|
user_project.latest_pipeline_for_ref(params[:ref])
|
|
|
|
end
|
2016-08-17 04:09:42 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|