pipelines.rb 4.09 KB
Newer Older
1 2
module API
  class Pipelines < Grape::API
3 4
    include PaginationParams

5 6 7 8 9
    before { authenticate! }

    params do
      requires :id, type: String, desc: 'The project ID'
    end
10
    resource :projects, requirements: API::PROJECT_ENDPOINT_REQUIREMENTS do
11 12
      desc 'Get all Pipelines of the project' do
        detail 'This feature was introduced in GitLab 8.11.'
13
        success Entities::PipelineBasic
14 15
      end
      params do
16
        use :pagination
Shinya Maeda's avatar
Shinya Maeda committed
17
        optional :scope,    type: String, values: %w[running pending finished branches tags],
Shinya Maeda's avatar
Shinya Maeda committed
18
                            desc: 'The scope of pipelines'
19
        optional :status,   type: String, values: HasStatus::AVAILABLE_STATUSES,
Shinya Maeda's avatar
Shinya Maeda committed
20 21
                            desc: 'The status of pipelines'
        optional :ref,      type: String, desc: 'The ref of pipelines'
22
        optional :sha,      type: String, desc: 'The sha of pipelines'
Shinya Maeda's avatar
Shinya Maeda committed
23 24 25
        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'
26
        optional :order_by, type: String, values: PipelinesFinder::ALLOWED_INDEXED_COLUMNS, default: 'id',
Shinya Maeda's avatar
Shinya Maeda committed
27
                            desc: 'Order pipelines'
28
        optional :sort,     type: String, values: %w[asc desc], default: 'desc',
Shinya Maeda's avatar
Shinya Maeda committed
29
                            desc: 'Sort pipelines'
30 31 32 33
      end
      get ':id/pipelines' do
        authorize! :read_pipeline, user_project

34
        pipelines = PipelinesFinder.new(user_project, params).execute
35
        present paginate(pipelines), with: Entities::PipelineBasic
36
      end
dimitrieh's avatar
dimitrieh committed
37

38 39 40 41 42 43
      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'
44
        optional :variables_attributes, Array, desc: 'Array of variables available in the pipeline'
45 46
      end
      post ':id/pipeline' do
47 48
        Gitlab::QueryLimiting.whitelist('https://gitlab.com/gitlab-org/gitlab-ce/issues/42124')

49 50 51 52
        authorize! :create_pipeline, user_project

        new_pipeline = Ci::CreatePipelineService.new(user_project,
                                                     current_user,
53
                                                     declared_params(include_missing: false))
54
                           .execute(:api, ignore_skip_ci: true, save_on_errors: false)
55

56 57 58 59 60 61
        if new_pipeline.persisted?
          present new_pipeline, with: Entities::Pipeline
        else
          render_validation_error!(new_pipeline)
        end
      end
62 63 64 65 66 67 68 69 70 71 72 73 74 75

      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

dimitrieh's avatar
dimitrieh committed
76
      desc 'Retry builds in the pipeline' do
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
        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