Commit a291e015 authored by Rémy Coutable's avatar Rémy Coutable

Merge branch 'fix/ci-skipped-status' into 'master'

Build status `canceled` if any of the jobs canceled

Before this change in case of any of the jobs had been canceled, build status was `failed`.

Closes #14207

See merge request !3778
parents 5addff7e 40a25732
Please view this file on the master branch, on stable branches it's out of date. Please view this file on the master branch, on stable branches it's out of date.
v 8.8.0 (unreleased) v 8.8.0 (unreleased)
- Make build status canceled if any of the jobs was canceled and none failed
- Remove future dates from contribution calendar graph. - Remove future dates from contribution calendar graph.
- Use ActionDispatch Remote IP for Akismet checking - Use ActionDispatch Remote IP for Akismet checking
- Fix error when visiting commit builds page before build was updated - Fix error when visiting commit builds page before build was updated
......
...@@ -18,7 +18,7 @@ module Statuseable ...@@ -18,7 +18,7 @@ module Statuseable
WHEN (#{builds})=0 THEN NULL WHEN (#{builds})=0 THEN NULL
WHEN (#{builds})=(#{success})+(#{ignored}) THEN 'success' WHEN (#{builds})=(#{success})+(#{ignored}) THEN 'success'
WHEN (#{builds})=(#{pending}) THEN 'pending' WHEN (#{builds})=(#{pending}) THEN 'pending'
WHEN (#{builds})=(#{canceled}) THEN 'canceled' WHEN (#{builds})=(#{canceled})+(#{success})+(#{ignored}) THEN 'canceled'
WHEN (#{builds})=(#{skipped}) THEN 'skipped' WHEN (#{builds})=(#{skipped}) THEN 'skipped'
WHEN (#{running})+(#{pending})>0 THEN 'running' WHEN (#{running})+(#{pending})>0 THEN 'running'
ELSE 'failed' ELSE 'failed'
......
...@@ -158,6 +158,7 @@ describe Ci::Commit, models: true do ...@@ -158,6 +158,7 @@ describe Ci::Commit, models: true do
stub_ci_commit_yaml_file(YAML.dump(yaml)) stub_ci_commit_yaml_file(YAML.dump(yaml))
end end
context 'when builds are successful' do
it 'properly creates builds' do it 'properly creates builds' do
expect(create_builds).to be_truthy expect(create_builds).to be_truthy
expect(commit.builds.pluck(:name)).to contain_exactly('build') expect(commit.builds.pluck(:name)).to contain_exactly('build')
...@@ -168,8 +169,8 @@ describe Ci::Commit, models: true do ...@@ -168,8 +169,8 @@ describe Ci::Commit, models: true do
expect(commit.builds.pluck(:status)).to contain_exactly('success', 'pending') expect(commit.builds.pluck(:status)).to contain_exactly('success', 'pending')
commit.builds.running_or_pending.each(&:success) commit.builds.running_or_pending.each(&:success)
expect(commit.builds.pluck(:status)).to contain_exactly('success', 'success', 'pending')
expect(commit.builds.pluck(:name)).to contain_exactly('build', 'test', 'deploy') expect(commit.builds.pluck(:name)).to contain_exactly('build', 'test', 'deploy')
expect(commit.builds.pluck(:status)).to contain_exactly('success', 'success', 'pending')
commit.builds.running_or_pending.each(&:success) commit.builds.running_or_pending.each(&:success)
expect(commit.builds.pluck(:name)).to contain_exactly('build', 'test', 'deploy', 'cleanup') expect(commit.builds.pluck(:name)).to contain_exactly('build', 'test', 'deploy', 'cleanup')
...@@ -180,8 +181,10 @@ describe Ci::Commit, models: true do ...@@ -180,8 +181,10 @@ describe Ci::Commit, models: true do
commit.reload commit.reload
expect(commit.status).to eq('success') expect(commit.status).to eq('success')
end end
end
it 'properly creates builds when test fails' do context 'when test job fails' do
it 'properly creates builds' do
expect(create_builds).to be_truthy expect(create_builds).to be_truthy
expect(commit.builds.pluck(:name)).to contain_exactly('build') expect(commit.builds.pluck(:name)).to contain_exactly('build')
expect(commit.builds.pluck(:status)).to contain_exactly('pending') expect(commit.builds.pluck(:status)).to contain_exactly('pending')
...@@ -203,8 +206,10 @@ describe Ci::Commit, models: true do ...@@ -203,8 +206,10 @@ describe Ci::Commit, models: true do
commit.reload commit.reload
expect(commit.status).to eq('failed') expect(commit.status).to eq('failed')
end end
end
it 'properly creates builds when test and test_failure fails' do context 'when test and test_failure jobs fail' do
it 'properly creates builds' do
expect(create_builds).to be_truthy expect(create_builds).to be_truthy
expect(commit.builds.pluck(:name)).to contain_exactly('build') expect(commit.builds.pluck(:name)).to contain_exactly('build')
expect(commit.builds.pluck(:status)).to contain_exactly('pending') expect(commit.builds.pluck(:status)).to contain_exactly('pending')
...@@ -227,8 +232,10 @@ describe Ci::Commit, models: true do ...@@ -227,8 +232,10 @@ describe Ci::Commit, models: true do
commit.reload commit.reload
expect(commit.status).to eq('failed') expect(commit.status).to eq('failed')
end end
end
it 'properly creates builds when deploy fails' do context 'when deploy job fails' do
it 'properly creates builds' do
expect(create_builds).to be_truthy expect(create_builds).to be_truthy
expect(commit.builds.pluck(:name)).to contain_exactly('build') expect(commit.builds.pluck(:name)).to contain_exactly('build')
expect(commit.builds.pluck(:status)).to contain_exactly('pending') expect(commit.builds.pluck(:status)).to contain_exactly('pending')
...@@ -251,6 +258,25 @@ describe Ci::Commit, models: true do ...@@ -251,6 +258,25 @@ describe Ci::Commit, models: true do
expect(commit.status).to eq('failed') expect(commit.status).to eq('failed')
end end
end end
context 'when build is canceled in the second stage' do
it 'does not schedule builds after build has been canceled' do
expect(create_builds).to be_truthy
expect(commit.builds.pluck(:name)).to contain_exactly('build')
expect(commit.builds.pluck(:status)).to contain_exactly('pending')
commit.builds.running_or_pending.each(&:success)
expect(commit.builds.running_or_pending).to_not be_empty
expect(commit.builds.pluck(:name)).to contain_exactly('build', 'test')
expect(commit.builds.pluck(:status)).to contain_exactly('success', 'pending')
commit.builds.running_or_pending.each(&:cancel)
expect(commit.builds.running_or_pending).to be_empty
expect(commit.reload.status).to eq('canceled')
end
end
end
end end
describe "#finished_at" do describe "#finished_at" do
......
...@@ -61,9 +61,35 @@ describe Statuseable do ...@@ -61,9 +61,35 @@ describe Statuseable do
let(:statuses) do let(:statuses) do
[create(type, status: :success), create(type, status: :canceled)] [create(type, status: :success), create(type, status: :canceled)]
end end
it { is_expected.to eq 'canceled' }
end
context 'one failed and one canceled' do
let(:statuses) do
[create(type, status: :failed), create(type, status: :canceled)]
end
it { is_expected.to eq 'failed' } it { is_expected.to eq 'failed' }
end end
context 'one failed but allowed to fail and one canceled' do
let(:statuses) do
[create(type, status: :failed, allow_failure: true),
create(type, status: :canceled)]
end
it { is_expected.to eq 'canceled' }
end
context 'one running one canceled' do
let(:statuses) do
[create(type, status: :running), create(type, status: :canceled)]
end
it { is_expected.to eq 'running' }
end
context 'all canceled' do context 'all canceled' do
let(:statuses) do let(:statuses) do
[create(type, status: :canceled), create(type, status: :canceled)] [create(type, status: :canceled), create(type, status: :canceled)]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment