diff options
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/application_setting.rb | 3 | ||||
-rw-r--r-- | app/models/ci/build.rb | 6 | ||||
-rw-r--r-- | app/models/project.rb | 21 | ||||
-rw-r--r-- | app/models/project_metrics.rb | 5 |
4 files changed, 34 insertions, 1 deletions
diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb index bf463a3b6bb..312280c3b32 100644 --- a/app/models/application_setting.rb +++ b/app/models/application_setting.rb @@ -107,6 +107,9 @@ class ApplicationSetting < ActiveRecord::Base presence: true, numericality: { only_integer: true, greater_than: :housekeeping_full_repack_period } + validates :shared_runners_minutes, + numericality: { greater_than_or_equal_to: 0 } + validates_each :restricted_visibility_levels do |record, attr, value| unless value.nil? value.each do |level| diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index e7d33bd26db..ef63501d1ed 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -93,6 +93,12 @@ module Ci end end + after_transition any => [:success, :failed, :canceled] do |build| + build.run_after_commit do + UpdateBuildMinutesService.new(project, nil).execute(build) + end + end + after_transition any => [:success] do |build| build.run_after_commit do BuildSuccessWorker.perform_async(id) diff --git a/app/models/project.rb b/app/models/project.rb index f8a54324341..d4cd398c934 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -28,6 +28,8 @@ class Project < ActiveRecord::Base :merge_requests_enabled?, :issues_enabled?, to: :project_feature, allow_nil: true + delegate :shared_runners_minutes, to: :project_metrics, allow_nil: true + default_value_for :archived, false default_value_for :visibility_level, gitlab_config_features.visibility_level default_value_for :container_registry_enabled, gitlab_config_features.container_registry @@ -146,6 +148,7 @@ class Project < ActiveRecord::Base has_one :import_data, dependent: :destroy, class_name: "ProjectImportData" has_one :project_feature, dependent: :destroy + has_one :project_metrics, dependent: :destroy has_many :commit_statuses, dependent: :destroy, foreign_key: :gl_project_id has_many :pipelines, dependent: :destroy, class_name: 'Ci::Pipeline', foreign_key: :gl_project_id @@ -1165,7 +1168,9 @@ class Project < ActiveRecord::Base return true end - shared_runners_enabled? && Ci::Runner.shared.active.any?(&block) + shared_runners_enabled? && + !shared_runners_minutes_used? && + Ci::Runner.shared.active.any?(&block) end def valid_runners_token?(token) @@ -1346,6 +1351,20 @@ class Project < ActiveRecord::Base end end + def shared_runners_minutes_limit + read_attribute(:shared_runners_minutes_limit) || current_application_settings.shared_runners_minutes + end + + def shared_runners_minutes_limit_enabled? + shared_runners_minutes_limit.nonzero? + end + + def shared_runners_minutes_used? + shared_runners_enabled? && + shared_runners_minutes_limit_enabled? && + shared_runners_minutes.to_i < shared_runners_minutes_limit + end + private def pushes_since_gc_redis_key diff --git a/app/models/project_metrics.rb b/app/models/project_metrics.rb new file mode 100644 index 00000000000..35f3c713de2 --- /dev/null +++ b/app/models/project_metrics.rb @@ -0,0 +1,5 @@ +class ProjectMetrics < ActiveRecord::Base + belongs_to :project + + validates :project, presence: true +end |