From 3697b4ea6a1610772369cb1559cd810502b51029 Mon Sep 17 00:00:00 2001
From: Tim Jaacks <tim.jaacks@seco.com>
Date: Thu, 19 Oct 2023 14:14:36 +0200
Subject: [PATCH] cancel_pipelines: reverse order of cancellation

Cancel parent pipeline first before cancelling its children in order not
to have failed parent pipelines (trigger jobs are failed if their
downstream pipeline is cancelled).
---
 scripts/cancel_pipelines.py | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/scripts/cancel_pipelines.py b/scripts/cancel_pipelines.py
index 497484a7..b2a43276 100755
--- a/scripts/cancel_pipelines.py
+++ b/scripts/cancel_pipelines.py
@@ -24,6 +24,10 @@ def cancel_pipeline_including_children(
 
     cancelled_pipelines = []
 
+    if pipeline.status not in ["success", "failed", "canceled"]:
+        cancelled_pipelines.append(pipeline)
+        pipeline.cancel()
+
     # Browse through all downstream pipelines
     for bridge in pipeline.bridges.list(as_list=False):
 
@@ -41,10 +45,6 @@ def cancel_pipeline_including_children(
         cancelled_pipelines += cancel_pipeline_including_children(
             project, downstream_pipeline
         )
-        if downstream_pipeline.status not in ["success", "failed", "canceled"]:
-            cancelled_pipelines.append(downstream_pipeline)
-
-    pipeline.cancel()
 
     return cancelled_pipelines
 
@@ -73,8 +73,6 @@ def cancel_pipelines(
     for pipeline in pipelines:
         if pipeline.id < below_pipeline_id:
             cancelled_pipelines += cancel_pipeline_including_children(project, pipeline)
-            if pipeline.status not in ["success", "failed", "canceled"]:
-                cancelled_pipelines.append(pipeline)
 
     return cancelled_pipelines
 
-- 
GitLab