diff options
Diffstat (limited to 'app/models/ci/pipeline.rb')
-rw-r--r-- | app/models/ci/pipeline.rb | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb index bd1737c7587..1f7e6b11bb9 100644 --- a/app/models/ci/pipeline.rb +++ b/app/models/ci/pipeline.rb @@ -55,6 +55,18 @@ module Ci pipeline.finished_at = Time.now end + after_transition [:created, :pending] => :running do |pipeline| + pipeline.merge_requests.each do |merge_request| + merge_request.metrics.record_latest_build_start_time!(pipeline.started_at) if merge_request.metrics.present? + end + end + + after_transition any => [:success] do |pipeline| + pipeline.merge_requests.each do |merge_request| + merge_request.metrics.record_latest_build_finish_time!(pipeline.finished_at) if merge_request.metrics.present? + end + end + before_transition do |pipeline| pipeline.update_duration end @@ -267,6 +279,13 @@ module Ci project.execute_services(data, :pipeline_hooks) end + # Merge requests for which the current pipeline is running against + # the merge request's latest commit. + def merge_requests + project.merge_requests.where(source_branch: self.ref). + select { |merge_request| merge_request.pipeline.id == self.id } + end + private def pipeline_data |