summaryrefslogtreecommitdiff
path: root/app/models/ci/group.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/ci/group.rb')
-rw-r--r--app/models/ci/group.rb24
1 files changed, 21 insertions, 3 deletions
diff --git a/app/models/ci/group.rb b/app/models/ci/group.rb
index f0c035635b9..c7c0ec61e62 100644
--- a/app/models/ci/group.rb
+++ b/app/models/ci/group.rb
@@ -24,9 +24,22 @@ module Ci
def status
strong_memoize(:status) do
+ status_struct.status
+ end
+ end
+
+ def success?
+ status.to_s == 'success'
+ end
+
+ def has_warnings?
+ status_struct.warnings?
+ end
+
+ def status_struct
+ strong_memoize(:status_struct) do
Gitlab::Ci::Status::Composite
.new(@jobs)
- .status
end
end
@@ -39,8 +52,13 @@ module Ci
end
end
- def self.fabricate(project, stage)
- stage.latest_statuses
+ # Construct a grouping of statuses for this stage.
+ # We allow the caller to pass in statuses for efficiency (avoiding N+1
+ # queries).
+ def self.fabricate(project, stage, statuses = nil)
+ statuses ||= stage.latest_statuses
+
+ statuses
.sort_by(&:sortable_name).group_by(&:group_name)
.map do |group_name, grouped_statuses|
self.new(project, stage, name: group_name, jobs: grouped_statuses)