Welcome to mirror list, hosted at ThFree Co, Russian Federation.

freeze_period_status.rb « ci « models « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: e810bb3f22999b76606f46fe4d2dffee0bb6a161 (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
25
26
27
28
29
30
31
# frozen_string_literal: true

module Ci
  class FreezePeriodStatus
    attr_reader :project

    def initialize(project:)
      @project = project
    end

    def execute
      project.freeze_periods.any? { |period| within_freeze_period?(period) }
    end

    def within_freeze_period?(period)
      start_freeze_cron = Gitlab::Ci::CronParser.new(period.freeze_start, period.cron_timezone)
      end_freeze_cron = Gitlab::Ci::CronParser.new(period.freeze_end, period.cron_timezone)

      start_freeze = start_freeze_cron.previous_time_from(time_zone_now)
      end_freeze = end_freeze_cron.next_time_from(start_freeze)

      start_freeze <= time_zone_now && time_zone_now <= end_freeze
    end

    private

    def time_zone_now
      @time_zone_now ||= Time.zone.now
    end
  end
end