diff options
Diffstat (limited to 'app/models/container_expiration_policy.rb')
-rw-r--r-- | app/models/container_expiration_policy.rb | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/app/models/container_expiration_policy.rb b/app/models/container_expiration_policy.rb index f60a0179c83..c929a78a7f9 100644 --- a/app/models/container_expiration_policy.rb +++ b/app/models/container_expiration_policy.rb @@ -1,14 +1,21 @@ # frozen_string_literal: true class ContainerExpirationPolicy < ApplicationRecord + include Schedulable + belongs_to :project, inverse_of: :container_expiration_policy + delegate :container_repositories, to: :project + validates :project, presence: true validates :enabled, inclusion: { in: [true, false] } validates :cadence, presence: true, inclusion: { in: ->(_) { self.cadence_options.stringify_keys } } validates :older_than, inclusion: { in: ->(_) { self.older_than_options.stringify_keys } }, allow_nil: true validates :keep_n, inclusion: { in: ->(_) { self.keep_n_options.keys } }, allow_nil: true + scope :active, -> { where(enabled: true) } + scope :preloaded, -> { preload(:project) } + def self.keep_n_options { 1 => _('%{tags} tag per image name') % { tags: 1 }, @@ -38,4 +45,8 @@ class ContainerExpirationPolicy < ApplicationRecord '90d': _('%{days} days until tags are automatically removed') % { days: 90 } } end + + def set_next_run_at + self.next_run_at = Time.zone.now + ChronicDuration.parse(cadence).seconds + end end |