BigW Consortium Gitlab

pipelines.rb 3.81 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: { id: %r{[^/]+} } 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 committed
17
        optional :scope,    type: String, values: %w[running pending finished branches tags],
Shinya Maeda committed
18
                            desc: 'The scope of pipelines'
19
        optional :status,   type: String, values: HasStatus::AVAILABLE_STATUSES,
Shinya Maeda committed
20 21
                            desc: 'The status of pipelines'
        optional :ref,      type: String, desc: 'The ref of pipelines'
Shinya Maeda committed
22 23 24
        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'
25
        optional :order_by, type: String, values: PipelinesFinder::ALLOWED_INDEXED_COLUMNS, default: 'id',
Shinya Maeda committed
26
                            desc: 'Order pipelines'
27
        optional :sort,     type: String, values: %w[asc desc], default: 'desc',
Shinya Maeda committed
28
                            desc: 'Sort pipelines'
29 30 31 32
      end
      get ':id/pipelines' do
        authorize! :read_pipeline, user_project

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

37 38 39 40 41 42 43 44 45 46 47 48
      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,
49 50
                                                     declared_params(include_missing: false))
                           .execute(ignore_skip_ci: true, save_on_errors: false)
51 52 53 54 55 56
        if new_pipeline.persisted?
          present new_pipeline, with: Entities::Pipeline
        else
          render_validation_error!(new_pipeline)
        end
      end
57 58 59 60 61 62 63 64 65 66 67 68 69 70

      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 committed
71
      desc 'Retry builds in the pipeline' do
72 73 74 75 76 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
        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