Skip to content

Commit 3da1494

Browse files
committed
Address PR comments
1 parent d8ee4f6 commit 3da1494

File tree

1 file changed

+14
-21
lines changed

1 file changed

+14
-21
lines changed

src/python/pants/backend/docker/util_rules/docker_build_context.py

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
from pants.engine.fs import (
4545
CreateDigest,
4646
Digest,
47-
DigestContents,
4847
FileContent,
4948
MergeDigests,
5049
Snapshot,
@@ -55,8 +54,8 @@
5554
resolve_unparsed_address_inputs,
5655
)
5756
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
6059
from pants.engine.target import (
6160
Dependencies,
6261
DependenciesRequest,
@@ -345,36 +344,30 @@ async def create_docker_build_context(
345344
embedded_pkgs_digest = []
346345

347346
# 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):
352349
if request.build_upstream_images and isinstance(
353350
getattr(field_set, "source", None), DockerImageSourceField
354351
):
355-
docker_metadata_gets.append(Get(DigestContents, Digest, built_package.digest))
356-
docker_package_indices.append(i)
352+
docker_packages.append(built_package)
357353
else:
358-
# For non-Docker packages, use the regular digest
359354
embedded_pkgs_digest.append(built_package.digest)
360355

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+
)
364360

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):
367362

368-
# Extract the original filename from the metadata
369363
if metadata_contents:
370-
original_filename = next(iter(metadata_contents)).path
371-
372-
# Find the Docker image artifact to get the image ID
373364
for artifact in built_package.artifacts:
374365
if isinstance(artifact, BuiltDockerImage):
375366
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)])
378371
)
379372
embedded_pkgs_digest.append(stable_digest)
380373
break

0 commit comments

Comments
 (0)