From fed313bc5f645c1fb3d8bc63551bad44d675d021 Mon Sep 17 00:00:00 2001 From: chen21019 Date: Thu, 10 Sep 2026 03:11:43 +0800 Subject: [PATCH 1/2] Read release digest from registry manifest --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 67a7511..9224f3d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -166,8 +166,8 @@ jobs: set -euo pipefail printf '%s' "$GHCR_TOKEN" | docker login ghcr.io -u "$GITHUB_ACTOR" --password-stdin docker push "$RUNTIME_IMAGE" - reference="$(docker image inspect --format '{{index .RepoDigests 0}}' "$RUNTIME_IMAGE")" - digest="${reference#*@}" + digest="$("$LOCKED_BUILDX" imagetools inspect "$RUNTIME_IMAGE" \ + --format '{{.Manifest.Digest}}')" [[ "$digest" =~ ^sha256:[0-9a-f]{64}$ ]] printf 'digest=%s\n' "$digest" >> "$GITHUB_OUTPUT" From ad41d28d57742d190f41791a92b0a7787e16e898 Mon Sep 17 00:00:00 2001 From: chen21019 Date: Thu, 10 Sep 2026 03:51:14 +0800 Subject: [PATCH 2/2] Scope reproducibility to release outputs --- .github/workflows/supply-chain.yml | 9 +++++---- scripts/check-source-gates | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/supply-chain.yml b/.github/workflows/supply-chain.yml index 94676d6..e36e30c 100644 --- a/.github/workflows/supply-chain.yml +++ b/.github/workflows/supply-chain.yml @@ -438,15 +438,16 @@ jobs: diff -u \ evidence/ecr-credential-sync-first.sha256 \ evidence/ecr-credential-sync-second.sha256 + # The Dapper image is a disposable build environment. Ubuntu package + # maintainer scripts can emit different layer metadata even when the + # pinned packages, toolchain binaries, source inputs, and shipped + # runtime image are identical. Compare those outcome-bearing artifacts + # instead of blocking a release on the helper image's OCI identity. for artifact in \ - image-id.txt \ daemon-id-mode.txt \ buildkit-image.txt \ buildkit-version.txt \ - manifest-digest.txt \ - config-digest.txt \ created.txt \ - rootfs-diffids.json \ binary-build-info.txt \ ubuntu-apt.lock \ dapper-ubuntu-packages.tsv \ diff --git a/scripts/check-source-gates b/scripts/check-source-gates index 1b82a35..db1ba7f 100755 --- a/scripts/check-source-gates +++ b/scripts/check-source-gates @@ -1055,5 +1055,5 @@ if [ "$failure_count" -ne 0 ]; then exit 1 fi -printf 'ECR_SYNC_SOURCE_GATES_OK go=1.27.0 go_telemetry=off-source-date-epoch-utc go_telemetry_readbacks=5 go_telemetry_cleanup_cwd=two-callers-explicit-root-before-delete docker=29.7.2 docker_cli_source_built=go1.27.0 buildx=0.36.1 dapper_buildx_executable_version=v0.36.1 buildx_go_archive=v0.3.0 buildx_x_mod=v0.40.0 buildx_grpc=v1.83.2 buildx_cves_fixed=5 buildx_patch=sha256:a29fdda204d592d0d46ed32b5fdc4336a7b3a7276301836d0a75b9386ca780f7 jq=1.8.1 jq_package=1.8.1-4ubuntu2 host_buildx=0.36.1 host_buildx_binary=sha256:05d6007425f3ec0c9bcf10aad49034e4342c34bd63ecd1cb0ac89ddfdf934c79 host_buildx_builds=2-offline-reproducible host_buildkit=0.32.2 buildkit_version_readback=exact-single-record dapper_identity=buildx-iid+metadata-config+daemon-config-or-manifest ubuntu_builder=26.04 snapshot=20260909T000000Z runtime_base=scratch non_root=1 legal_files=%s endpoint_override=bounded brand_gate=tracked_source_only buildx_legacy_module_removed=1 embedded_patch_whitespace_scope=exact-path-with-inner-validation runtime_mtime_normalization=all_local_copy_inputs dapper_reproducibility=buildkit-rewrite-timestamp runtime_export=docker-archive-explicit-load runtime_builder=exact-run-owned-pinned sbom_trivy_gate=1\n' \ +printf 'ECR_SYNC_SOURCE_GATES_OK go=1.27.0 go_telemetry=off-source-date-epoch-utc go_telemetry_readbacks=5 go_telemetry_cleanup_cwd=two-callers-explicit-root-before-delete docker=29.7.2 docker_cli_source_built=go1.27.0 buildx=0.36.1 dapper_buildx_executable_version=v0.36.1 buildx_go_archive=v0.3.0 buildx_x_mod=v0.40.0 buildx_grpc=v1.83.2 buildx_cves_fixed=5 buildx_patch=sha256:a29fdda204d592d0d46ed32b5fdc4336a7b3a7276301836d0a75b9386ca780f7 jq=1.8.1 jq_package=1.8.1-4ubuntu2 host_buildx=0.36.1 host_buildx_binary=sha256:05d6007425f3ec0c9bcf10aad49034e4342c34bd63ecd1cb0ac89ddfdf934c79 host_buildx_builds=2-offline-reproducible host_buildkit=0.32.2 buildkit_version_readback=exact-single-record dapper_identity=buildx-iid+metadata-config+daemon-config-or-manifest ubuntu_builder=26.04 snapshot=20260909T000000Z runtime_base=scratch non_root=1 legal_files=%s endpoint_override=bounded brand_gate=tracked_source_only buildx_legacy_module_removed=1 embedded_patch_whitespace_scope=exact-path-with-inner-validation runtime_mtime_normalization=all_local_copy_inputs dapper_reproducibility=semantic-toolchain-and-runtime-outputs runtime_export=docker-archive-explicit-load runtime_builder=exact-run-owned-pinned sbom_trivy_gate=1\n' \ "$legal_count"