Merge branch 'fix/gb/passed-with-warnings-status-on-mysql' into 'master'
Fix "passed with warnings" stage status on MySQL Closes #28603 See merge request !9802
This commit is contained in:
commit
81ad611131
5 changed files with 39 additions and 8 deletions
|
@ -144,7 +144,7 @@ module Ci
|
|||
|
||||
status_sql = statuses.latest.where('stage=sg.stage').status_sql
|
||||
|
||||
warnings_sql = statuses.latest.select('COUNT(*) > 0')
|
||||
warnings_sql = statuses.latest.select('COUNT(*)')
|
||||
.where('stage=sg.stage').failed_but_allowed.to_sql
|
||||
|
||||
stages_with_statuses = CommitStatus.from(stages_query, :sg)
|
||||
|
|
|
@ -46,10 +46,10 @@ module Ci
|
|||
end
|
||||
|
||||
def has_warnings?
|
||||
if @warnings.nil?
|
||||
statuses.latest.failed_but_allowed.any?
|
||||
if @warnings.is_a?(Integer)
|
||||
@warnings > 0
|
||||
else
|
||||
@warnings
|
||||
statuses.latest.failed_but_allowed.any?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Fix "passed with warnings" stage status on MySQL installations
|
||||
merge_request: 9802
|
||||
author:
|
|
@ -197,6 +197,24 @@ describe Ci::Pipeline, models: true do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when there is a stage with warnings' do
|
||||
before do
|
||||
create(:commit_status, pipeline: pipeline,
|
||||
stage: 'deploy',
|
||||
name: 'prod:2',
|
||||
stage_idx: 2,
|
||||
status: 'failed',
|
||||
allow_failure: true)
|
||||
end
|
||||
|
||||
it 'populates stage with correct number of warnings' do
|
||||
deploy_stage = pipeline.stages.third
|
||||
|
||||
expect(deploy_stage).not_to receive(:statuses)
|
||||
expect(deploy_stage).to have_warnings
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#stages_count' do
|
||||
|
|
|
@ -170,22 +170,31 @@ describe Ci::Stage, models: true do
|
|||
context 'when stage has warnings' do
|
||||
context 'when using memoized warnings flag' do
|
||||
context 'when there are warnings' do
|
||||
let(:stage) { build(:ci_stage, warnings: true) }
|
||||
let(:stage) { build(:ci_stage, warnings: 2) }
|
||||
|
||||
it 'has memoized warnings' do
|
||||
it 'returns true using memoized value' do
|
||||
expect(stage).not_to receive(:statuses)
|
||||
expect(stage).to have_warnings
|
||||
end
|
||||
end
|
||||
|
||||
context 'when there are no warnings' do
|
||||
let(:stage) { build(:ci_stage, warnings: false) }
|
||||
let(:stage) { build(:ci_stage, warnings: 0) }
|
||||
|
||||
it 'has memoized warnings' do
|
||||
it 'returns false using memoized value' do
|
||||
expect(stage).not_to receive(:statuses)
|
||||
expect(stage).not_to have_warnings
|
||||
end
|
||||
end
|
||||
|
||||
context 'when number of warnings is not a valid value' do
|
||||
let(:stage) { build(:ci_stage, warnings: true) }
|
||||
|
||||
it 'calculates statuses using database queries' do
|
||||
expect(stage).to receive(:statuses).and_call_original
|
||||
expect(stage).not_to have_warnings
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when calculating warnings from statuses' do
|
||||
|
|
Loading…
Reference in a new issue