Fix missing pipeline duration for blocked pipelines
This commit is contained in:
parent
9c35162f83
commit
3fdba5c96b
2 changed files with 48 additions and 19 deletions
|
@ -75,6 +75,10 @@ module Ci
|
||||||
pipeline.update_duration
|
pipeline.update_duration
|
||||||
end
|
end
|
||||||
|
|
||||||
|
before_transition any => [:manual] do |pipeline|
|
||||||
|
pipeline.update_duration
|
||||||
|
end
|
||||||
|
|
||||||
before_transition canceled: any - [:canceled] do |pipeline|
|
before_transition canceled: any - [:canceled] do |pipeline|
|
||||||
pipeline.auto_canceled_by = nil
|
pipeline.auto_canceled_by = nil
|
||||||
end
|
end
|
||||||
|
|
|
@ -296,11 +296,12 @@ describe Ci::Pipeline, models: true do
|
||||||
|
|
||||||
describe 'state machine' do
|
describe 'state machine' do
|
||||||
let(:current) { Time.now.change(usec: 0) }
|
let(:current) { Time.now.change(usec: 0) }
|
||||||
let(:build) { create_build('build1', 0) }
|
let(:build) { create_build('build1', queued_at: 0) }
|
||||||
let(:build_b) { create_build('build2', 0) }
|
let(:build_b) { create_build('build2', queued_at: 0) }
|
||||||
let(:build_c) { create_build('build3', 0) }
|
let(:build_c) { create_build('build3', queued_at: 0) }
|
||||||
|
|
||||||
describe '#duration' do
|
describe '#duration' do
|
||||||
|
context 'when multiple builds are finished' do
|
||||||
before do
|
before do
|
||||||
travel_to(current + 30) do
|
travel_to(current + 30) do
|
||||||
build.run!
|
build.run!
|
||||||
|
@ -325,6 +326,29 @@ describe Ci::Pipeline, models: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when pipeline becomes blocked' do
|
||||||
|
let!(:build) { create_build('build:1') }
|
||||||
|
let!(:action) { create(:ci_build, :manual, pipeline: pipeline) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
travel_to(current + 1.minute) do
|
||||||
|
build.run!
|
||||||
|
end
|
||||||
|
|
||||||
|
travel_to(current + 5.minutes) do
|
||||||
|
build.success!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'recalculates pipeline duration' do
|
||||||
|
pipeline.reload
|
||||||
|
|
||||||
|
expect(pipeline).to be_manual
|
||||||
|
expect(pipeline.duration).to eq 4.minutes
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#started_at' do
|
describe '#started_at' do
|
||||||
it 'updates on transitioning to running' do
|
it 'updates on transitioning to running' do
|
||||||
build.run
|
build.run
|
||||||
|
@ -383,12 +407,13 @@ describe Ci::Pipeline, models: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_build(name, queued_at = current, started_from = 0)
|
def create_build(name, queued_at: current, started_from: 0, **opts)
|
||||||
create(:ci_build,
|
create(:ci_build,
|
||||||
name: name,
|
name: name,
|
||||||
pipeline: pipeline,
|
pipeline: pipeline,
|
||||||
queued_at: queued_at,
|
queued_at: queued_at,
|
||||||
started_at: queued_at + started_from)
|
started_at: queued_at + started_from,
|
||||||
|
**opts)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue