Commit 1ca79260 authored by Kamil Trzciński's avatar Kamil Trzciński Committed by Timothy Andrew

Merge branch 'fix/gb/fix-blocked-pipeline-duration' into 'master'

Fix missing duration for blocked pipelines

Closes #31264

See merge request !10856
parent 560023a4
...@@ -69,6 +69,10 @@ module Ci ...@@ -69,6 +69,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
......
---
title: Fix missing duration for blocked pipelines
merge_request: 10856
author:
...@@ -296,11 +296,12 @@ describe Ci::Pipeline, models: true do ...@@ -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 ...@@ -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_build('manual:action', :manual) }
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 ...@@ -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, *traits, queued_at: current, started_from: 0, **opts)
create(:ci_build, create(:ci_build, *traits,
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
......
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