2018-09-25 23:45:43 -04:00
# frozen_string_literal: true
2017-05-07 18:35:56 -04:00
class Projects :: PipelineSchedulesController < Projects :: ApplicationController
2017-06-28 08:42:13 -04:00
before_action :schedule , except : [ :index , :new , :create ]
2017-06-27 03:23:16 -04:00
2017-12-12 18:46:05 -05:00
before_action :play_rate_limit , only : [ :play ]
2017-12-06 02:23:59 -05:00
before_action :authorize_play_pipeline_schedule! , only : [ :play ]
2017-05-07 18:35:56 -04:00
before_action :authorize_read_pipeline_schedule!
2017-06-01 10:30:12 -04:00
before_action :authorize_create_pipeline_schedule! , only : [ :new , :create ]
2017-12-06 01:24:20 -05:00
before_action :authorize_update_pipeline_schedule! , except : [ :index , :new , :create , :play ]
2017-05-07 18:35:56 -04:00
before_action :authorize_admin_pipeline_schedule! , only : [ :destroy ]
2018-08-27 11:31:01 -04:00
# rubocop: disable CodeReuse/ActiveRecord
2017-05-07 18:35:56 -04:00
def index
@scope = params [ :scope ]
@all_schedules = PipelineSchedulesFinder . new ( @project ) . execute
@schedules = PipelineSchedulesFinder . new ( @project ) . execute ( scope : params [ :scope ] )
. includes ( :last_pipeline )
end
2018-08-27 11:31:01 -04:00
# rubocop: enable CodeReuse/ActiveRecord
2017-05-07 18:35:56 -04:00
def new
@schedule = project . pipeline_schedules . new
end
def create
@schedule = Ci :: CreatePipelineScheduleService
. new ( @project , current_user , schedule_params )
. execute
if @schedule . persisted?
redirect_to pipeline_schedules_path ( @project )
else
render :new
end
end
def edit
end
def update
2017-07-05 11:23:28 -04:00
if schedule . update ( schedule_params )
2017-06-29 13:06:35 -04:00
redirect_to project_pipeline_schedules_path ( @project )
2017-05-07 18:35:56 -04:00
else
render :edit
end
end
2017-12-06 01:24:20 -05:00
def play
2017-12-03 01:55:49 -05:00
job_id = RunPipelineScheduleWorker . perform_async ( schedule . id , current_user . id )
2017-12-12 18:46:05 -05:00
if job_id
flash [ :notice ] = " Successfully scheduled a pipeline to run. Go to the <a href= \" #{ project_pipelines_path ( @project ) } \" >Pipelines page</a> for details. " . html_safe
else
flash [ :alert ] = 'Unable to schedule a pipeline to run immediately'
end
2017-12-03 01:55:49 -05:00
redirect_to pipeline_schedules_path ( @project )
end
2017-05-07 18:35:56 -04:00
def take_ownership
if schedule . update ( owner : current_user )
redirect_to pipeline_schedules_path ( @project )
else
2017-06-07 09:46:10 -04:00
redirect_to pipeline_schedules_path ( @project ) , alert : _ ( " Failed to change the owner " )
2017-05-07 18:35:56 -04:00
end
end
def destroy
if schedule . destroy
2018-07-02 06:43:06 -04:00
redirect_to pipeline_schedules_path ( @project ) , status : :found
2017-05-07 18:35:56 -04:00
else
2017-06-06 18:45:16 -04:00
redirect_to pipeline_schedules_path ( @project ) ,
2017-07-04 04:45:07 -04:00
status : :forbidden ,
2017-06-07 09:46:10 -04:00
alert : _ ( " Failed to remove the pipeline schedule " )
2017-05-07 18:35:56 -04:00
end
end
private
2017-12-12 18:46:05 -05:00
def play_rate_limit
return unless current_user
limiter = :: Gitlab :: ActionRateLimiter . new ( action : :play_pipeline_schedule )
return unless limiter . throttled? ( [ current_user , schedule ] , 1 )
flash [ :alert ] = 'You cannot play this scheduled pipeline at the moment. Please wait a minute.'
redirect_to pipeline_schedules_path ( @project )
2017-12-09 04:01:42 -05:00
end
2017-05-07 18:35:56 -04:00
def schedule
@schedule || = project . pipeline_schedules . find ( params [ :id ] )
end
def schedule_params
params . require ( :schedule )
2017-06-22 14:57:13 -04:00
. permit ( :description , :cron , :cron_timezone , :ref , :active ,
2018-03-22 07:08:16 -04:00
variables_attributes : [ :id , :key , :secret_value , :_destroy ] )
2017-06-27 03:23:16 -04:00
end
2017-06-27 03:23:16 -04:00
2017-12-06 02:23:59 -05:00
def authorize_play_pipeline_schedule!
return access_denied! unless can? ( current_user , :play_pipeline_schedule , schedule )
end
2017-06-27 03:23:16 -04:00
def authorize_update_pipeline_schedule!
return access_denied! unless can? ( current_user , :update_pipeline_schedule , schedule )
end
2017-07-07 06:09:35 -04:00
def authorize_admin_pipeline_schedule!
return access_denied! unless can? ( current_user , :admin_pipeline_schedule , schedule )
end
2017-05-07 18:35:56 -04:00
end