dockerbuild: synthetic packages by mistake did not specify any dependencies. That lead to no packages getting fetched when the umbrella package is fetched. Fix it with Requires-Dist. Bug: b/491263752 Change-Id: I62edf2ad69b653544fe2c2ef9050485d6a6a6964 Reviewed-on: https://chromium-review.googlesource.com/c/infra/infra/+/7911682 Reviewed-by: Junji Watanabe <jwata@google.com> Commit-Queue: Alex Ovsienko <ovsienko@google.com> Commit-Queue: Junji Watanabe <jwata@google.com> Auto-Submit: Alex Ovsienko <ovsienko@google.com> Cr-Commit-Position: refs/heads/main@{#81124}
diff --git a/infra/tools/dockerbuild/ar.py b/infra/tools/dockerbuild/ar.py index 2b562a2..c77382e0 100644 --- a/infra/tools/dockerbuild/ar.py +++ b/infra/tools/dockerbuild/ar.py
@@ -56,8 +56,9 @@ 'Failed to query Artifact Registry for duplicate check: %s', e) return False - def upload(self, upload_wheels, wheel, dryrun=False): + def upload(self, upload_wheels, wheel, dryrun=False, all_wheels=None): """Uploads wheels to the Artifact Registry.""" + all_wheels = all_wheels if all_wheels is not None else upload_wheels with self._system.temp_subdir('ar_upload_%s_%s' % wheel.spec.tuple) as tdir: for w in upload_wheels: orig_path = w.path(self._system.wheel_dir) @@ -76,9 +77,17 @@ else: # If the original wheel doesn't exist, we assume it's a metapackage # umbrella wheel (e.g. MultiWheel output) and synthesize a dummy one. - patch_wheel.create_dummy_wheel(pep427_path, - w.spec.name.replace('-', '_'), - w.pep440_version) + reqs = [ + f"{sub_w.spec.name.replace('-', '_')} == {sub_w.pep440_version}" + for sub_w in all_wheels + if sub_w != w + ] + patch_wheel.create_dummy_wheel( + pep427_path, + w.spec.name.replace('-', '_'), + w.pep440_version, + requirements=reqs, + ) if dryrun: util.LOGGER.info(
diff --git a/infra/tools/dockerbuild/dockerbuild.py b/infra/tools/dockerbuild/dockerbuild.py index a1f617d..da88c16 100644 --- a/infra/tools/dockerbuild/dockerbuild.py +++ b/infra/tools/dockerbuild/dockerbuild.py
@@ -257,7 +257,9 @@ # When we register it, we want to attach all tags. system.cipd.register_package(pkg_path, package.tags, dryrun=dryrun) - system.ar.upload(upload_wheels, wheel, dryrun=dryrun_ar) + system.ar.upload( + upload_wheels, wheel, dryrun=dryrun_ar, all_wheels=built_wheels + ) # Note packages that we've updated so we can update all the refs. # Concurrently updating this set is fine is each operation is independent and
diff --git a/infra/tools/dockerbuild/patch_wheel.py b/infra/tools/dockerbuild/patch_wheel.py index ee5dba8..0b27d72 100644 --- a/infra/tools/dockerbuild/patch_wheel.py +++ b/infra/tools/dockerbuild/patch_wheel.py
@@ -18,19 +18,23 @@ def create_dummy_wheel(wheel_path: str, escaped_name: str, - version: str) -> None: + version: str, requirements: Optional[list[str]] = None) -> None: """Creates a dummy metapackage wheel containing only METADATA and WHEEL files. Args: wheel_path: Path where the new dummy wheel should be written. escaped_name: The escaped package name (e.g. pyobjc). version: The version string. + requirements: Optional list of package requirement strings. """ dist_info_dir = f"{escaped_name}-{version}.dist-info" metadata_content = ("Metadata-Version: 2.1\n" f"Name: {escaped_name}\n" f"Version: {version}\n" "Summary: Dummy metapackage wheel\n") + if requirements: + for req in requirements: + metadata_content += f"Requires-Dist: {req}\n" wheel_content = ("Wheel-Version: 1.0\n" "Root-Is-Purelib: true\n" "Tag: py2-none-any\n"