pipelines_controller.rb 3.2 KB
Newer Older
K
Kamil Trzcinski 已提交
1
class Projects::PipelinesController < Projects::ApplicationController
2
  before_action :pipeline, except: [:index, :new, :create, :charts]
3
  before_action :commit, only: [:show, :builds]
K
WIP  
Kamil Trzcinski 已提交
4 5 6
  before_action :authorize_read_pipeline!
  before_action :authorize_create_pipeline!, only: [:new, :create]
  before_action :authorize_update_pipeline!, only: [:retry, :cancel]
7
  before_action :builds_enabled, only: :charts
K
WIP  
Kamil Trzcinski 已提交
8 9 10

  def index
    @scope = params[:scope]
11 12 13 14 15
    @pipelines = PipelinesFinder
      .new(project)
      .execute(scope: @scope)
      .page(params[:page])
      .per(30)
16

17
    @running_count = PipelinesFinder
18 19
      .new(project).execute(scope: 'running').count

20 21 22 23 24 25
    @pending_count = PipelinesFinder
      .new(project).execute(scope: 'pending').count

    @finished_count = PipelinesFinder
      .new(project).execute(scope: 'finished').count

26 27
    @pipelines_count = PipelinesFinder
      .new(project).execute.count
K
Kamil Trzcinski 已提交
28 29 30 31

    respond_to do |format|
      format.html
      format.json do
T
Toon Claes 已提交
32 33
        Gitlab::PollingInterval.set_header(response, interval: 10_000)

34 35 36 37 38 39 40
        render json: {
          pipelines: PipelineSerializer
            .new(project: @project, user: @current_user)
            .with_pagination(request, response)
            .represent(@pipelines),
          count: {
            all: @pipelines_count,
41 42 43
            running: @running_count,
            pending: @pending_count,
            finished: @finished_count,
44 45
          }
        }
K
Kamil Trzcinski 已提交
46 47
      end
    end
K
WIP  
Kamil Trzcinski 已提交
48 49 50
  end

  def new
51
    @pipeline = project.pipelines.new(ref: @project.default_branch)
K
WIP  
Kamil Trzcinski 已提交
52 53 54
  end

  def create
55 56 57
    @pipeline = Ci::CreatePipelineService
      .new(project, current_user, create_params)
      .execute(ignore_skip_ci: true, save_on_errors: false)
58
    unless @pipeline.persisted?
K
Kamil Trzcinski 已提交
59
      render 'new'
60
      return
K
WIP  
Kamil Trzcinski 已提交
61
    end
62 63

    redirect_to namespace_project_pipeline_path(project.namespace, project, @pipeline)
K
WIP  
Kamil Trzcinski 已提交
64 65 66 67 68
  end

  def show
  end

F
Filipa Lacerda 已提交
69
  def builds
70 71 72 73 74
    respond_to do |format|
      format.html do
        render 'show'
      end
    end
F
Filipa Lacerda 已提交
75 76
  end

77
  def status
78 79
    render json: PipelineSerializer
      .new(project: @project, user: @current_user)
S
Shinya Maeda 已提交
80
      .represent_status(@pipeline)
81 82
  end

83
  def stage
K
Kamil Trzcinski 已提交
84
    @stage = pipeline.stage(params[:stage])
85 86 87 88 89 90 91
    return not_found unless @stage

    respond_to do |format|
      format.json { render json: { html: view_to_html_string('projects/pipelines/_stage') } }
    end
  end

K
WIP  
Kamil Trzcinski 已提交
92
  def retry
93
    pipeline.retry_failed(current_user)
K
WIP  
Kamil Trzcinski 已提交
94 95 96 97 98

    redirect_back_or_default default: namespace_project_pipelines_path(project.namespace, project)
  end

  def cancel
K
Kamil Trzcinski 已提交
99
    pipeline.cancel_running
K
WIP  
Kamil Trzcinski 已提交
100 101 102 103

    redirect_back_or_default default: namespace_project_pipelines_path(project.namespace, project)
  end

104 105 106 107 108 109 110 111
  def charts
    @charts = {}
    @charts[:week] = Ci::Charts::WeekChart.new(project)
    @charts[:month] = Ci::Charts::MonthChart.new(project)
    @charts[:year] = Ci::Charts::YearChart.new(project)
    @charts[:build_times] = Ci::Charts::BuildTime.new(project)
  end

K
WIP  
Kamil Trzcinski 已提交
112 113
  private

K
Kamil Trzcinski 已提交
114
  def create_params
115
    params.require(:pipeline).permit(:ref)
K
Kamil Trzcinski 已提交
116 117
  end

K
Kamil Trzcinski 已提交
118
  def pipeline
119
    @pipeline ||= project.pipelines.find_by!(id: params[:id]).present(current_user: current_user)
K
WIP  
Kamil Trzcinski 已提交
120
  end
K
Kamil Trzcinski 已提交
121 122

  def commit
123
    @commit ||= @pipeline.commit
K
Kamil Trzcinski 已提交
124
  end
K
WIP  
Kamil Trzcinski 已提交
125
end