From 9f973ee9b7373685df18c71793de663d3f89a873 Mon Sep 17 00:00:00 2001 From: Maxim Date: Tue, 18 Jun 2024 14:42:31 +0200 Subject: [PATCH] Change build order Resolves: AlmaLinux/build-system#212 --- alws/build_planner.py | 15 ++++++++++++--- alws/crud/build_node.py | 12 ++++++++++-- alws/crud/test.py | 1 + alws/routers/build_node.py | 12 +++++++++--- 4 files changed, 32 insertions(+), 8 deletions(-) diff --git a/alws/build_planner.py b/alws/build_planner.py index 1af0c0d7d..3a1ed7f59 100644 --- a/alws/build_planner.py +++ b/alws/build_planner.py @@ -192,6 +192,9 @@ async def init_build_repos(self): platform.id, ) for arch in self._request_platforms_arch_list[platform.name]: + if arch == 'src': + continue + tasks.append(self.create_build_repo(platform, arch, 'rpm')) tasks.append( self.create_build_repo( @@ -447,7 +450,13 @@ async def _add_single_project( mock_options['definitions'] = {} dist_taken_by_user = mock_options['definitions'].get('dist', False) for platform in self._platforms: - for arch in self._request_platforms_arch_list[platform.name]: + arches = self._request_platforms_arch_list[platform.name] + if ( + ref.ref_type != BuildTaskRefType.SRPM_URL + and 'src' not in arches + ): + arches.insert(0, 'src') + for arch in arches: modules = self._modules_by_platform_arch.get( (platform.name, arch), [] ) @@ -661,8 +670,8 @@ async def build_dependency_map(self): # between their own tasks to ensure correct build order. all_tasks = [] for platform_task_cache in self._tasks_cache.values(): - first_arch = 'i686' - first_arch_tasks = platform_task_cache.get('i686') + first_arch = 'src' + first_arch_tasks = platform_task_cache.get(first_arch) if not first_arch_tasks: first_arch = next(iter(platform_task_cache)) first_arch_tasks = platform_task_cache.get(first_arch) diff --git a/alws/crud/build_node.py b/alws/crud/build_node.py index 0776a308e..6375ae6ca 100644 --- a/alws/crud/build_node.py +++ b/alws/crud/build_node.py @@ -338,13 +338,21 @@ def get_repo(repo_arch, is_debug): and build_repo.debug == is_debug ) - arch_repo = get_repo(task_arch, False) - debug_repo = get_repo(task_arch, True) + arch_repo = None + debug_repo = None + if task_arch != 'src': + arch_repo = get_repo(task_arch, False) + debug_repo = get_repo(task_arch, True) src_repo = get_repo("src", False) arch_packages_tasks = [] src_packages_tasks = [] debug_packages_tasks = [] for artifact in task_artifacts: + if task_arch == 'src': + if artifact.arch == "src": + src_packages_tasks.append(pulp_client.create_entity(artifact)) + break + continue if artifact.arch == "src": if built_srpm_url is None: src_packages_tasks.append(pulp_client.create_entity(artifact)) diff --git a/alws/crud/test.py b/alws/crud/test.py index 1689ca4f9..26f8a7498 100644 --- a/alws/crud/test.py +++ b/alws/crud/test.py @@ -179,6 +179,7 @@ async def create_test_tasks_for_build_id(db: AsyncSession, build_id: int): select(models.BuildTask.id).where( models.BuildTask.build_id == build_id, models.BuildTask.status == BuildTaskStatus.COMPLETED, + models.BuildTask.arch != 'src', ) ) ) diff --git a/alws/routers/build_node.py b/alws/routers/build_node.py index a7874c71e..a93bf31f6 100644 --- a/alws/routers/build_node.py +++ b/alws/routers/build_node.py @@ -94,12 +94,18 @@ async def get_task( "email": task.build.owner.email, }, } + supported_arches = request.supported_arches + if 'src' in request.supported_arches: + supported_arches.remove('src') + task_arch = task.arch + if task_arch == 'src': + task_arch = supported_arches[0] for repo in itertools.chain(task.platform.repos, task.build.repos): - if repo.arch == task.arch and repo.type != "build_log": + if repo.arch == task_arch and repo.type != "build_log": response["repositories"].append(repo) for build in task.build.linked_builds: for repo in build.repos: - if repo.arch == task.arch and repo.type != "build_log": + if repo.arch == task_arch and repo.type != "build_log": response["repositories"].append(repo) if task.build.platform_flavors: for flavour in task.build.platform_flavors: @@ -120,7 +126,7 @@ async def get_task( flavour.data["definitions"] ) for repo in flavour.repos: - if repo.arch == task.arch: + if repo.arch == task_arch: response["repositories"].append(repo) # TODO: Get rid of this fixes when all affected builds would be processed