|
44 | 44 | from pants.engine.fs import ( |
45 | 45 | CreateDigest, |
46 | 46 | Digest, |
47 | | - DigestContents, |
48 | 47 | FileContent, |
49 | 48 | MergeDigests, |
50 | 49 | Snapshot, |
|
55 | 54 | resolve_unparsed_address_inputs, |
56 | 55 | ) |
57 | 56 | from pants.engine.internals.graph import transitive_targets as transitive_targets_get |
58 | | -from pants.engine.intrinsics import digest_to_snapshot |
59 | | -from pants.engine.rules import Get, MultiGet, collect_rules, concurrently, implicitly, rule |
| 57 | +from pants.engine.intrinsics import create_digest, digest_to_snapshot, get_digest_contents |
| 58 | +from pants.engine.rules import collect_rules, concurrently, implicitly, rule |
60 | 59 | from pants.engine.target import ( |
61 | 60 | Dependencies, |
62 | 61 | DependenciesRequest, |
@@ -345,36 +344,30 @@ async def create_docker_build_context( |
345 | 344 | embedded_pkgs_digest = [] |
346 | 345 |
|
347 | 346 | # For Docker images, we need to extract the metadata filename and create stable digests |
348 | | - docker_metadata_gets = [] |
349 | | - docker_package_indices = [] |
350 | | - for i, built_package in enumerate(embedded_pkgs): |
351 | | - field_set = pkgs_wanting_embedding[i] |
| 347 | + docker_packages = [] |
| 348 | + for field_set, built_package in zip(pkgs_wanting_embedding, embedded_pkgs): |
352 | 349 | if request.build_upstream_images and isinstance( |
353 | 350 | getattr(field_set, "source", None), DockerImageSourceField |
354 | 351 | ): |
355 | | - docker_metadata_gets.append(Get(DigestContents, Digest, built_package.digest)) |
356 | | - docker_package_indices.append(i) |
| 352 | + docker_packages.append(built_package) |
357 | 353 | else: |
358 | | - # For non-Docker packages, use the regular digest |
359 | 354 | embedded_pkgs_digest.append(built_package.digest) |
360 | 355 |
|
361 | | - # Get metadata contents for Docker images |
362 | | - if docker_metadata_gets: |
363 | | - docker_metadata_contents = await MultiGet(*docker_metadata_gets) |
| 356 | + if docker_packages: |
| 357 | + docker_metadata_contents = await concurrently( |
| 358 | + get_digest_contents(built_package.digest) for built_package in docker_packages |
| 359 | + ) |
364 | 360 |
|
365 | | - for metadata_contents, pkg_index in zip(docker_metadata_contents, docker_package_indices): |
366 | | - built_package = embedded_pkgs[pkg_index] |
| 361 | + for metadata_contents, built_package in zip(docker_metadata_contents, docker_packages): |
367 | 362 |
|
368 | | - # Extract the original filename from the metadata |
369 | 363 | if metadata_contents: |
370 | | - original_filename = next(iter(metadata_contents)).path |
371 | | - |
372 | | - # Find the Docker image artifact to get the image ID |
373 | 364 | for artifact in built_package.artifacts: |
374 | 365 | if isinstance(artifact, BuiltDockerImage): |
375 | 366 | stable_content = artifact.image_id.encode() |
376 | | - stable_digest = await Get( |
377 | | - Digest, CreateDigest([FileContent(original_filename, stable_content)]) |
| 367 | + # Use a stable filename for better debugging |
| 368 | + stable_filename = "docker-info.stable.json" |
| 369 | + stable_digest = await create_digest( |
| 370 | + CreateDigest([FileContent(stable_filename, stable_content)]) |
378 | 371 | ) |
379 | 372 | embedded_pkgs_digest.append(stable_digest) |
380 | 373 | break |
|
0 commit comments