From e88690a7446754356f762f14c4b131f11fcb3a0e Mon Sep 17 00:00:00 2001 From: Gyubong Lee Date: Thu, 1 Aug 2024 06:42:27 +0000 Subject: [PATCH] feat: Support multiple projects --- .../manager/container_registry/gitlab.py | 61 ++++++++++--------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/src/ai/backend/manager/container_registry/gitlab.py b/src/ai/backend/manager/container_registry/gitlab.py index 2351e237b27..f8c434d457f 100644 --- a/src/ai/backend/manager/container_registry/gitlab.py +++ b/src/ai/backend/manager/container_registry/gitlab.py @@ -21,33 +21,36 @@ async def fetch_repositories(self, sess: aiohttp.ClientSession) -> AsyncIterator self.registry_info["gitlab_project"], ) - encoded_project_id = urllib.parse.quote(f"{name}/{gitlab_project}", safe="") - repo_list_url = ( - f"https://gitlab.com/api/v4/projects/{encoded_project_id}/registry/repositories" - ) - - headers = { - "Accept": "application/json", - "PRIVATE-TOKEN": access_token, - } - page = 1 - - while True: - async with sess.get( - repo_list_url, - headers=headers, - params={"per_page": 30, "page": page}, - ) as response: - if response.status == 200: - data = await response.json() - - for repo in data: - yield repo["path"] - if "next" in response.headers.get("Link", ""): - page += 1 + projects = gitlab_project.split(",") + + for project in projects: + encoded_project_id = urllib.parse.quote(f"{name}/{project}", safe="") + repo_list_url = ( + f"https://gitlab.com/api/v4/projects/{encoded_project_id}/registry/repositories" + ) + + headers = { + "Accept": "application/json", + "PRIVATE-TOKEN": access_token, + } + page = 1 + + while True: + async with sess.get( + repo_list_url, + headers=headers, + params={"per_page": 30, "page": page}, + ) as response: + if response.status == 200: + data = await response.json() + + for repo in data: + yield repo["path"] + if "next" in response.headers.get("Link", ""): + page += 1 + else: + break else: - break - else: - raise RuntimeError( - f"Failed to fetch repositories! {response.status} error occurred." - ) + raise RuntimeError( + f"Failed to fetch repositories for project {project}! {response.status} error occurred." + )