debian-mirror-gitlab/lib/api/pipelines.rb

173 lines
6.1 KiB
Ruby
Raw Normal View History

2018-12-05 23:21:45 +05:30
# frozen_string_literal: true
2016-09-13 17:45:13 +05:30
module API
class Pipelines < Grape::API
2017-08-17 22:00:37 +05:30
include PaginationParams
2019-12-04 20:38:33 +05:30
before { authenticate_non_get! }
2016-09-13 17:45:13 +05:30
params do
requires :id, type: String, desc: 'The project ID'
end
2019-02-15 15:39:39 +05:30
resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
2016-09-13 17:45:13 +05:30
desc 'Get all Pipelines of the project' do
detail 'This feature was introduced in GitLab 8.11.'
2017-08-17 22:00:37 +05:30
success Entities::PipelineBasic
2016-09-13 17:45:13 +05:30
end
params do
2017-08-17 22:00:37 +05:30
use :pagination
optional :scope, type: String, values: %w[running pending finished branches tags],
desc: 'The scope of pipelines'
optional :status, type: String, values: HasStatus::AVAILABLE_STATUSES,
desc: 'The status of pipelines'
optional :ref, type: String, desc: 'The ref of pipelines'
2018-10-15 14:42:47 +05:30
optional :sha, type: String, desc: 'The sha of pipelines'
2017-08-17 22:00:37 +05:30
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'
2020-01-01 13:55:28 +05:30
optional :updated_before, type: DateTime, desc: 'Return pipelines updated before the specified datetime. Format: ISO 8601 YYYY-MM-DDTHH:MM:SSZ'
optional :updated_after, type: DateTime, desc: 'Return pipelines updated after the specified datetime. Format: ISO 8601 YYYY-MM-DDTHH:MM:SSZ'
2017-08-17 22:00:37 +05:30
optional :order_by, type: String, values: PipelinesFinder::ALLOWED_INDEXED_COLUMNS, default: 'id',
desc: 'Order pipelines'
optional :sort, type: String, values: %w[asc desc], default: 'desc',
desc: 'Sort pipelines'
2016-09-13 17:45:13 +05:30
end
get ':id/pipelines' do
authorize! :read_pipeline, user_project
2019-12-04 20:38:33 +05:30
authorize! :read_build, user_project
2016-09-13 17:45:13 +05:30
2018-11-08 19:23:39 +05:30
pipelines = PipelinesFinder.new(user_project, current_user, params).execute
2017-08-17 22:00:37 +05:30
present paginate(pipelines), with: Entities::PipelineBasic
end
desc 'Create a new pipeline' do
detail 'This feature was introduced in GitLab 8.14'
success Entities::Pipeline
end
params do
2019-03-02 22:35:43 +05:30
requires :ref, type: String, desc: 'Reference'
2018-11-08 19:23:39 +05:30
optional :variables, Array, desc: 'Array of variables available in the pipeline'
2017-08-17 22:00:37 +05:30
end
post ':id/pipeline' do
2019-12-04 20:38:33 +05:30
Gitlab::QueryLimiting.whitelist('https://gitlab.com/gitlab-org/gitlab-foss/issues/42124')
2018-03-17 18:26:18 +05:30
2017-08-17 22:00:37 +05:30
authorize! :create_pipeline, user_project
2018-11-08 19:23:39 +05:30
pipeline_params = declared_params(include_missing: false)
.merge(variables_attributes: params[:variables])
.except(:variables)
2017-08-17 22:00:37 +05:30
new_pipeline = Ci::CreatePipelineService.new(user_project,
current_user,
2018-11-08 19:23:39 +05:30
pipeline_params)
2017-09-10 17:25:29 +05:30
.execute(:api, ignore_skip_ci: true, save_on_errors: false)
2018-03-17 18:26:18 +05:30
2017-08-17 22:00:37 +05:30
if new_pipeline.persisted?
present new_pipeline, with: Entities::Pipeline
else
render_validation_error!(new_pipeline)
end
2016-09-13 17:45:13 +05:30
end
2019-12-04 20:38:33 +05:30
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-09-13 17:45:13 +05:30
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-02-02 18:00:53 +05:30
authorize! :read_pipeline, pipeline
2016-09-13 17:45:13 +05:30
present pipeline, with: Entities::Pipeline
end
2019-07-31 22:56:46 +05:30
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
2019-02-15 15:39:39 +05:30
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
authorize! :destroy_pipeline, pipeline
destroy_conditionally!(pipeline) do
::Ci::DestroyPipelineService.new(user_project, current_user).execute(pipeline)
end
end
2017-08-17 22:00:37 +05:30
desc 'Retry builds in the pipeline' do
2016-09-13 17:45:13 +05:30
detail 'This feature was introduced in GitLab 8.11.'
success Entities::Pipeline
end
params do
2019-03-02 22:35:43 +05:30
requires :pipeline_id, type: Integer, desc: 'The pipeline ID'
2016-09-13 17:45:13 +05:30
end
post ':id/pipelines/:pipeline_id/retry' do
2019-02-02 18:00:53 +05:30
authorize! :update_pipeline, pipeline
2016-09-13 17:45:13 +05:30
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-03-02 22:35:43 +05:30
requires :pipeline_id, type: Integer, desc: 'The pipeline ID'
2016-09-13 17:45:13 +05:30
end
post ':id/pipelines/:pipeline_id/cancel' do
2019-02-02 18:00:53 +05:30
authorize! :update_pipeline, pipeline
2016-09-13 17:45:13 +05:30
pipeline.cancel_running
status 200
2019-07-31 22:56:46 +05:30
present pipeline.reset, with: Entities::Pipeline
2016-09-13 17:45:13 +05:30
end
end
helpers do
def pipeline
2019-12-04 20:38:33 +05:30
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-09-13 17:45:13 +05:30
end
end
end
end