summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorKamil Trzciński <ayufan@ayufan.eu>2017-05-16 09:18:55 +0000
committerKamil Trzciński <ayufan@ayufan.eu>2017-05-16 09:18:55 +0000
commitb0ce5e1e307f5696aa3d9b030a3bce424becb3b5 (patch)
tree32b961370888361510bcfecd617d337d892f9beb /app
parent791dd5a6f134088f5cbf3ecf7bab23cf2f63b3a1 (diff)
parent02e156c2e726c2b06df87d371511694f0e03027e (diff)
downloadgitlab-ce-b0ce5e1e307f5696aa3d9b030a3bce424becb3b5.tar.gz
Merge branch 'zj-pipeline-schedule-owner' into 'master'
Foreign key for Pipeline schedule owner Closes #31932 See merge request !11233
Diffstat (limited to 'app')
-rw-r--r--app/models/ci/pipeline_schedule.rb8
-rw-r--r--app/workers/pipeline_schedule_worker.rb8
2 files changed, 15 insertions, 1 deletions
diff --git a/app/models/ci/pipeline_schedule.rb b/app/models/ci/pipeline_schedule.rb
index 6d7cc83971e..cf6e53c4ca4 100644
--- a/app/models/ci/pipeline_schedule.rb
+++ b/app/models/ci/pipeline_schedule.rb
@@ -28,10 +28,18 @@ module Ci
!active?
end
+ def deactivate!
+ update_attribute(:active, false)
+ end
+
def importing_or_inactive?
importing? || inactive?
end
+ def runnable_by_owner?
+ Ability.allowed?(owner, :create_pipeline, project)
+ end
+
def set_next_run_at
self.next_run_at = Gitlab::Ci::CronParser.new(cron, cron_timezone).next_time_from(Time.now)
end
diff --git a/app/workers/pipeline_schedule_worker.rb b/app/workers/pipeline_schedule_worker.rb
index a449a765f7b..7eb0e84acb2 100644
--- a/app/workers/pipeline_schedule_worker.rb
+++ b/app/workers/pipeline_schedule_worker.rb
@@ -3,8 +3,14 @@ class PipelineScheduleWorker
include CronjobQueue
def perform
- Ci::PipelineSchedule.active.where("next_run_at < ?", Time.now).find_each do |schedule|
+ Ci::PipelineSchedule.active.where("next_run_at < ?", Time.now)
+ .preload(:owner, :project).find_each do |schedule|
begin
+ unless schedule.runnable_by_owner?
+ schedule.deactivate!
+ next
+ end
+
Ci::CreatePipelineService.new(schedule.project,
schedule.owner,
ref: schedule.ref)