summaryrefslogtreecommitdiff
path: root/app/services/ci/pipeline_schedule_service.rb
blob: ef90d91c936949d2f33c6369b32464a64981381c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# frozen_string_literal: true

module Ci
  class PipelineScheduleService < BaseService
    def execute(schedule)
      # Ensure `next_run_at` is set properly before creating a pipeline.
      # Otherwise, multiple pipelines could be created in a short interval.
      schedule.schedule_next_run!

      if Feature.enabled?(:ci_pipeline_schedule_async)
        RunPipelineScheduleWorker.perform_async(schedule.id, schedule.owner&.id)
      else
        begin
          RunPipelineScheduleWorker.new.perform(schedule.id, schedule.owner&.id)
        ensure
          ##
          # This is the temporary solution for avoiding the memory bloat.
          # See more https://gitlab.com/gitlab-org/gitlab-ce/issues/61955
          GC.start if Feature.enabled?(:ci_pipeline_schedule_force_gc, default_enabled: true)
        end
      end
    end
  end
end