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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/application_setting.rb3
-rw-r--r--app/models/ci/build.rb6
-rw-r--r--app/models/project.rb21
-rw-r--r--app/models/project_metrics.rb5
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