Rename ignored to failed_but_allowed, introduce exclude_ignored
which merges previous exclude_ignored_jobs and failed_but_allowed, so that we don't treat ignored a special case in HasStatus.
This commit is contained in:
parent
f0002da09c
commit
8dfec32d2b
5 changed files with 29 additions and 22 deletions
|
@ -196,7 +196,7 @@ module Ci
|
|||
end
|
||||
|
||||
def has_warnings?
|
||||
builds.latest.ignored.any?
|
||||
builds.latest.failed_but_allowed.any?
|
||||
end
|
||||
|
||||
def config_processor
|
||||
|
|
|
@ -24,7 +24,19 @@ class CommitStatus < ActiveRecord::Base
|
|||
|
||||
scope :retried, -> { where.not(id: latest) }
|
||||
scope :ordered, -> { order(:name) }
|
||||
scope :ignored, -> { where(allow_failure: true, status: [:failed, :canceled]) }
|
||||
scope :failed_but_allowed, -> do
|
||||
where(allow_failure: true, status: [:failed, :canceled])
|
||||
end
|
||||
scope :exclude_ignored, -> do
|
||||
quoted_when = connection.quote_column_name('when')
|
||||
where("allow_failure = ? OR status NOT IN (?)",
|
||||
false, [:failed, :canceled]).
|
||||
# We want to ignore skipped manual jobs
|
||||
where("#{quoted_when} <> ? OR status <> ?", 'manual', 'skipped').
|
||||
# We want to ignore skipped on_failure
|
||||
where("#{quoted_when} <> ? OR status <> ?", 'on_failure', 'skipped')
|
||||
|
||||
end
|
||||
scope :latest_ci_stages, -> { latest.ordered.includes(project: :namespace) }
|
||||
scope :retried_ci_stages, -> { retried.ordered.includes(project: :namespace) }
|
||||
|
||||
|
@ -111,7 +123,7 @@ class CommitStatus < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def ignored?
|
||||
def failed_but_allowed?
|
||||
allow_failure? && (failed? || canceled?)
|
||||
end
|
||||
|
||||
|
|
|
@ -8,28 +8,28 @@ module HasStatus
|
|||
|
||||
class_methods do
|
||||
def status_sql
|
||||
scope = exclude_ignored_jobs
|
||||
scope = if respond_to?(:exclude_ignored)
|
||||
exclude_ignored
|
||||
else
|
||||
all
|
||||
end
|
||||
builds = scope.select('count(*)').to_sql
|
||||
created = scope.created.select('count(*)').to_sql
|
||||
success = scope.success.select('count(*)').to_sql
|
||||
ignored = scope.ignored.select('count(*)').to_sql if scope.respond_to?(:ignored)
|
||||
ignored ||= '0'
|
||||
pending = scope.pending.select('count(*)').to_sql
|
||||
running = scope.running.select('count(*)').to_sql
|
||||
canceled = scope.canceled.select('count(*)').to_sql
|
||||
skipped = scope.skipped.select('count(*)').to_sql
|
||||
canceled = scope.canceled.select('count(*)').to_sql
|
||||
|
||||
deduce_status = "(CASE
|
||||
"(CASE
|
||||
WHEN (#{builds})=(#{created}) THEN 'created'
|
||||
WHEN (#{builds})=(#{success})+(#{ignored}) THEN 'success'
|
||||
WHEN (#{builds})=(#{success})+(#{ignored})+(#{skipped}) THEN 'skipped'
|
||||
WHEN (#{builds})=(#{created})+(#{pending})+(#{skipped}) THEN 'pending'
|
||||
WHEN (#{builds})=(#{canceled})+(#{success})+(#{ignored})+(#{skipped}) THEN 'canceled'
|
||||
WHEN (#{builds})=(#{success}) THEN 'success'
|
||||
WHEN (#{builds})=(#{success})+(#{skipped}) THEN 'skipped'
|
||||
WHEN (#{builds})=(#{success})+(#{skipped})+(#{canceled}) THEN 'canceled'
|
||||
WHEN (#{builds})=(#{created})+(#{skipped})+(#{pending}) THEN 'pending'
|
||||
WHEN (#{running})+(#{pending})+(#{created})>0 THEN 'running'
|
||||
ELSE 'failed'
|
||||
END)"
|
||||
|
||||
deduce_status
|
||||
end
|
||||
|
||||
def status
|
||||
|
@ -69,11 +69,6 @@ module HasStatus
|
|||
scope :running_or_pending, -> { where(status: [:running, :pending]) }
|
||||
scope :finished, -> { where(status: [:success, :failed, :canceled]) }
|
||||
scope :exclude_ignored_jobs, -> do
|
||||
quoted_when = connection.quote_column_name('when')
|
||||
# We want to ignore skipped manual jobs
|
||||
where("#{quoted_when} <> ? OR status <> ?", 'manual', 'skipped').
|
||||
# We want to ignore skipped on_failure
|
||||
where("#{quoted_when} <> ? OR status <> ?", 'on_failure', 'skipped')
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ module Ci
|
|||
end
|
||||
|
||||
def status_for_prior_stages(index)
|
||||
pipeline.builds.exclude_ignored_jobs.where('stage_idx < ?', index).
|
||||
pipeline.builds.exclude_ignored.where('stage_idx < ?', index).
|
||||
latest.status || 'success'
|
||||
end
|
||||
|
||||
|
|
|
@ -39,8 +39,8 @@ describe Ci::Build, models: true do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#ignored?' do
|
||||
subject { build.ignored? }
|
||||
describe '#failed_but_allowed?' do
|
||||
subject { build.failed_but_allowed? }
|
||||
|
||||
context 'when build is not allowed to fail' do
|
||||
before do
|
||||
|
|
Loading…
Reference in a new issue