ci: split ci_run_n_monitor into script and shared parts
authorDavid Heidelberg <david.heidelberg@collabora.com>
Wed, 7 Sep 2022 21:32:19 +0000 (23:32 +0200)
committerMarge Bot <emma+marge@anholt.net>
Tue, 13 Sep 2022 09:16:19 +0000 (09:16 +0000)
These parts will be shared with the update checksum script.

Signed-off-by: David Heidelberg <david.heidelberg@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18329>

.gitlab-ci/bin/ci_run_n_monitor.py
.gitlab-ci/bin/gitlab_common.py [new file with mode: 0644]

index 606aec8..6bdcf6a 100755 (executable)
@@ -12,7 +12,6 @@ and show the job(s) logs.
 """
 
 import argparse
-import os
 import re
 import sys
 import time
@@ -23,6 +22,7 @@ from typing import Optional
 
 import gitlab
 from colorama import Fore, Style
+from gitlab_common import get_gitlab_project, read_token, wait_for_pipeline
 from gitlab_gql import GitlabGQL, create_job_needs_dag, filter_dag, print_dag
 
 REFRESH_WAIT_LOG = 10
@@ -45,25 +45,6 @@ STATUS_COLORS = {
 COMPLETED_STATUSES = ["success", "failed"]
 
 
-def get_gitlab_project(glab, name: str):
-    """Finds a specified gitlab project for given user"""
-    glab.auth()
-    username = glab.user.username
-    return glab.projects.get(f"{username}/mesa")
-
-
-def wait_for_pipeline(project, sha: str):
-    """await until pipeline appears in Gitlab"""
-    print("⏲ for the pipeline to appear..", end="")
-    while True:
-        pipelines = project.pipelines.list(sha=sha)
-        if pipelines:
-            print("", flush=True)
-            return pipelines[0]
-        print("", end=".", flush=True)
-        time.sleep(1)
-
-
 def print_job_status(job) -> None:
     """It prints a nice, colored job status with a link to the job."""
     if job.status == "canceled":
@@ -268,17 +249,6 @@ def parse_args() -> None:
     return parser.parse_args()
 
 
-def read_token(token_arg: Optional[str]) -> str:
-    """pick token from args or file"""
-    if token_arg:
-        return token_arg
-    return (
-        open(os.path.expanduser("~/.config/gitlab-token"), encoding="utf-8")
-        .readline()
-        .rstrip()
-    )
-
-
 def find_dependencies(target_job: str, project_path: str, sha: str) -> set[str]:
     gql_instance = GitlabGQL()
     dag, _ = create_job_needs_dag(
diff --git a/.gitlab-ci/bin/gitlab_common.py b/.gitlab-ci/bin/gitlab_common.py
new file mode 100644 (file)
index 0000000..85313cc
--- /dev/null
@@ -0,0 +1,42 @@
+#!/usr/bin/env python3
+# Copyright © 2020 - 2022 Collabora Ltd.
+# Authors:
+#   Tomeu Vizoso <tomeu.vizoso@collabora.com>
+#   David Heidelberg <david.heidelberg@collabora.com>
+#
+# SPDX-License-Identifier: MIT
+'''Shared functions between the scripts.'''
+
+import os
+import time
+from typing import Optional
+
+
+def get_gitlab_project(glab, name: str):
+    """Finds a specified gitlab project for given user"""
+    glab.auth()
+    username = glab.user.username
+    return glab.projects.get(f"{username}/mesa")
+
+
+def read_token(token_arg: Optional[str]) -> str:
+    """pick token from args or file"""
+    if token_arg:
+        return token_arg
+    return (
+        open(os.path.expanduser("~/.config/gitlab-token"), encoding="utf-8")
+        .readline()
+        .rstrip()
+    )
+
+
+def wait_for_pipeline(project, sha: str):
+    """await until pipeline appears in Gitlab"""
+    print("⏲ for the pipeline to appear..", end="")
+    while True:
+        pipelines = project.pipelines.list(sha=sha)
+        if pipelines:
+            print("", flush=True)
+            return pipelines[0]
+        print("", end=".", flush=True)
+        time.sleep(1)