diff options
author | Z.J. van de Weg <git@zjvandeweg.nl> | 2017-05-10 11:04:25 +0300 |
---|---|---|
committer | Z.J. van de Weg <git@zjvandeweg.nl> | 2017-05-15 11:01:29 +0300 |
commit | 9f933953896d4a1ca7ee40ce3fef4ead4b73ab65 (patch) | |
tree | 0cff70f3863105fb0b958828790b5557cf9b27d8 /app/workers | |
parent | e261b4b8517ba6d5d5b082f1955836c945fd51fc (diff) |
Do not schedule pipelines if the user can't
When the owner of a pipelines schedule was either blocked or was removed
from the project, the pipeline schedular would still schedule the
pipeline.
This would than fail however, given the user had no access to the
project and it contents. However, a better way to handle it would be to
not schedule it at all. Furthermore, from now on, such schedules will be
deactivated so the schedule worker can ignore it on the next runs.
Diffstat (limited to 'app/workers')
-rw-r--r-- | app/workers/pipeline_schedule_worker.rb | 8 |
1 files changed, 7 insertions, 1 deletions
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) |