summaryrefslogtreecommitdiff
path: root/app/models/ci/pipeline.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/ci/pipeline.rb')
-rw-r--r--app/models/ci/pipeline.rb19
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