From d961123828b2e521bcaf618bef142f274dc104bd Mon Sep 17 00:00:00 2001
From: Tim Jaacks <tim.jaacks@garz-fricke.com>
Date: Mon, 21 Dec 2020 16:05:37 +0100
Subject: [PATCH] Always retry transient errors

---
 accept_merge_request.py    | 8 ++++++--
 check_pipeline_status.py   | 4 ++--
 common.py                  | 3 ++-
 integrate_into_manifest.py | 4 +++-
 merge_into_manifest.py     | 4 ++--
 retrigger_mr_pipeline.py   | 2 +-
 6 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/accept_merge_request.py b/accept_merge_request.py
index 878c8a07..75ad1b09 100755
--- a/accept_merge_request.py
+++ b/accept_merge_request.py
@@ -27,7 +27,9 @@ def accept_merge_request(project, mr, rebase=False):
         # Update merge request before trying to merge it in order to get the latest
         # pipeline status
         try:
-            updated_mr = project.mergerequests.get(id=mr.iid)
+            updated_mr = project.mergerequests.get(
+                id=mr.iid, retry_transient_errors=True
+            )
             mr = updated_mr
         except GitlabGetError as e:
             print("WARNING: Could not update merge request object: %s" % e)
@@ -129,7 +131,9 @@ def main():
     project = common.get_project(gitlab, args.project)
 
     try:
-        merge_request = project.mergerequests.get(id=args.merge_request)
+        merge_request = project.mergerequests.get(
+            id=args.merge_request, retry_transient_errors=True
+        )
     except GitlabGetError as e:
         sys.exit("Could not get merge request: %s" % e)
 
diff --git a/check_pipeline_status.py b/check_pipeline_status.py
index 3ddfa12e..e6274954 100755
--- a/check_pipeline_status.py
+++ b/check_pipeline_status.py
@@ -11,7 +11,7 @@ def check_pipeline_status(project, commit):
     """Get latest pipeline status for a given commit"""
 
     # Find pipeline for commit
-    pipelines = project.pipelines.list(sha=commit)
+    pipelines = project.pipelines.list(sha=commit, retry_transient_errors=True)
     if not pipelines:
         print("ERROR: no pipeline for commit '%s' found" % commit)
         sys.exit(1)
@@ -23,7 +23,7 @@ def check_pipeline_status(project, commit):
     while pipeline.status not in terminated_states:
         print(".", end="", flush=True)
         time.sleep(1)
-        pipeline = project.pipelines.get(pipeline.id)
+        pipeline = project.pipelines.get(pipeline.id, retry_transient_errors=True)
     print("")
     print("Result: %s" % pipeline.status)
 
diff --git a/common.py b/common.py
index 59934279..10b23fe7 100755
--- a/common.py
+++ b/common.py
@@ -43,7 +43,7 @@ def get_project(gitlab, project_name):
 def get_latest_commit(project, branch_name):
     """Get latest commit on a given project branch"""
     try:
-        branch = project.branches.get(branch_name)
+        branch = project.branches.get(branch_name, retry_transient_errors=True)
     except GitlabGetError as e:
         sys.exit(
             "ERROR: could not get branch '%s' for project '%s': %s"
@@ -72,6 +72,7 @@ def rebase_merge_request(project, merge_request):
             updated_merge_request = project.mergerequests.get(
                 id=merge_request.iid,
                 query_parameters={"include_rebase_in_progress": "True"},
+                retry_transient_errors=True,
             )
         except GitlabGetError as e:
             merge_request.merge_error = "Could not get updated merge request: %s" % e
diff --git a/integrate_into_manifest.py b/integrate_into_manifest.py
index 69992332..5568f375 100755
--- a/integrate_into_manifest.py
+++ b/integrate_into_manifest.py
@@ -160,7 +160,9 @@ def main():
     manifest_project = common.get_project(gitlab, args.manifest_project)
     project = common.get_project(gitlab, args.project)
     try:
-        merge_request = project.mergerequests.get(args.merge_request)
+        merge_request = project.mergerequests.get(
+            args.merge_request, retry_transient_errors=True
+        )
     except GitlabGetError as e:
         sys.exit(
             "ERROR: could not get %s!%s: %s"
diff --git a/merge_into_manifest.py b/merge_into_manifest.py
index edf0330c..1d608e1c 100755
--- a/merge_into_manifest.py
+++ b/merge_into_manifest.py
@@ -51,11 +51,11 @@ def merge_into_manifest(manifest_project, master_branch, project, commit):
 
     # Check if branches exist
     try:
-        manifest_project.branches.get(integration_branch)
+        manifest_project.branches.get(integration_branch, retry_transient_errors=True)
     except GitlabGetError:
         sys.exit("ERROR: source branch '%s' does not exist." % integration_branch)
     try:
-        manifest_project.branches.get(target_branch)
+        manifest_project.branches.get(target_branch, retry_transient_errors=True)
     except GitlabGetError:
         sys.exit("ERROR: target branch '%s' does not exist." % target_branch)
 
diff --git a/retrigger_mr_pipeline.py b/retrigger_mr_pipeline.py
index ebfd67b5..c46dc608 100755
--- a/retrigger_mr_pipeline.py
+++ b/retrigger_mr_pipeline.py
@@ -59,7 +59,7 @@ def main():
     gitlab = Gitlab(args.gitlab_url, private_token=args.token)
     project = common.get_project(gitlab, args.project)
     try:
-        mr = project.mergerequests.get(args.iid)
+        mr = project.mergerequests.get(args.iid, retry_transient_errors=True)
     except GitlabGetError as e:
         sys.exit(
             "ERROR: could not get merge request %s:!%s: %s"
-- 
GitLab