diff options
author | Guilherme Gallo <guilherme.gallo@collabora.com> | 2022-07-15 18:17:02 -0300 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2022-08-03 23:10:37 +0000 |
commit | 39cdcea251c3a954862ba0048b304caa488b7de2 (patch) | |
tree | a9fb8eecefda46f2f7ec932e744fa318b7254ce7 /.gitlab-ci/bin | |
parent | caf9900b3da9b5d5747606a5b2b80da395b6095e (diff) | |
download | mesa-39cdcea251c3a954862ba0048b304caa488b7de2.tar.gz |
ci/bin: Make ci_run_n_monitor finds dependencies automatically
Use the GraphQL util to find dependencies accurately saving up time for
both developers and runners.
Signed-off-by: Guilherme Gallo <guilherme.gallo@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17791>
Diffstat (limited to '.gitlab-ci/bin')
-rwxr-xr-x | .gitlab-ci/bin/ci_run_n_monitor.py | 40 |
1 files changed, 17 insertions, 23 deletions
diff --git a/.gitlab-ci/bin/ci_run_n_monitor.py b/.gitlab-ci/bin/ci_run_n_monitor.py index 22887b7b281..193b021ef74 100755 --- a/.gitlab-ci/bin/ci_run_n_monitor.py +++ b/.gitlab-ci/bin/ci_run_n_monitor.py @@ -19,10 +19,12 @@ import sys import time from concurrent.futures import ThreadPoolExecutor from functools import partial +from itertools import chain from typing import Optional import gitlab from colorama import Fore, Style +from gitlab_gql import GitlabGQL, create_job_needs_dag, filter_dag REFRESH_WAIT_LOG = 10 REFRESH_WAIT_JOBS = 6 @@ -41,22 +43,6 @@ STATUS_COLORS = { "skipped": "", } -# TODO: This hardcoded list should be replaced by querying the pipeline's -# dependency graph to see which jobs the target jobs need -DEPENDENCIES = [ - "debian/x86_build-base", - "debian/x86_build", - "debian/x86_test-base", - "debian/x86_test-gl", - "debian/arm_build", - "debian/arm_test", - "kernel+rootfs_amd64", - "kernel+rootfs_arm64", - "kernel+rootfs_armhf", - "debian-testing", - "debian-arm64", -] - COMPLETED_STATUSES = ["success", "failed"] @@ -125,10 +111,6 @@ def monitor_pipeline( statuses = {} target_statuses = {} - if not dependencies: - dependencies = [] - dependencies.extend(DEPENDENCIES) - if target_job: target_jobs_regex = re.compile(target_job.strip()) @@ -242,7 +224,6 @@ def parse_args() -> None: + '--target ".*traces" ', ) parser.add_argument("--target", metavar="target-job", help="Target job") - parser.add_argument("--deps", nargs="+", help="Job dependencies") parser.add_argument( "--rev", metavar="revision", help="repository git revision", required=True ) @@ -268,6 +249,16 @@ def read_token(token_arg: Optional[str]) -> str: ) +def find_dependencies(target_job: str, project_path: str, sha: str) -> set[str]: + gql_instance = GitlabGQL() + dag, _ = create_job_needs_dag( + gql_instance, {"projectPath": project_path.path_with_namespace, "sha": sha} + ) + target_dep_dag = filter_dag(dag, target_job) + deps = set(chain.from_iterable(target_dep_dag.values())) + return deps + + if __name__ == "__main__": try: t_start = time.perf_counter() @@ -283,11 +274,14 @@ if __name__ == "__main__": print(f"Revision: {args.rev}") pipe = wait_for_pipeline(cur_project, args.rev) print(f"Pipeline: {pipe.web_url}") + deps = set() if args.target: print("🞋 job: " + Fore.BLUE + args.target + Style.RESET_ALL) - print(f"Extra dependencies: {args.deps}") + deps = find_dependencies( + target_job=args.target, sha=args.rev, project_path=cur_project + ) target_job_id, ret = monitor_pipeline( - cur_project, pipe, args.target, args.deps, args.force_manual + cur_project, pipe, args.target, deps, args.force_manual ) if target_job_id: |