使用 native snapshotter 发布镜像证明 #16

Merged
panxiao81 merged 1 commits from fix/publish-native-snapshotter into main 2026-09-16 18:20:11 +00:00
+17 -2
View File
@@ -74,8 +74,10 @@ jobs:
image_tag="sha-${GITHUB_SHA}" image_tag="sha-${GITHUB_SHA}"
docker_config=$(mktemp -d) docker_config=$(mktemp -d)
jwt_file=$(mktemp) jwt_file=$(mktemp)
buildkit_config=$(mktemp)
cleanup() { cleanup() {
rm -rf -- "$docker_config" "$jwt_file" docker buildx rm ci-builder >/dev/null 2>&1 || true
rm -rf -- "$docker_config" "$jwt_file" "$buildkit_config"
} }
trap cleanup EXIT trap cleanup EXIT
export DOCKER_CONFIG="$docker_config" export DOCKER_CONFIG="$docker_config"
@@ -88,12 +90,25 @@ jobs:
jq -er '.[0].svids[0].svid' "$jwt_file" | \ jq -er '.[0].svids[0].svid' "$jwt_file" | \
docker login "$PUSH_REGISTRY" --username zot --password-stdin docker login "$PUSH_REGISTRY" --username zot --password-stdin
# The docker driver cannot publish attestations. Use an isolated
# BuildKit worker, but force its snapshotter to copy-based native so
# it does not attempt nested overlay mounts inside the runner Pod.
printf '%s\n' \
'[worker.oci]' \
' snapshotter = "native"' \
>"$buildkit_config"
docker buildx create \
--name ci-builder \
--driver docker-container \
--buildkitd-config "$buildkit_config" \
--use
publish() { publish() {
local repository=$1 local repository=$1
local dockerfile=$2 local dockerfile=$2
local metadata=$3 local metadata=$3
docker buildx build \ docker buildx build \
--builder default \ --builder ci-builder \
--platform linux/amd64 \ --platform linux/amd64 \
--file "$dockerfile" \ --file "$dockerfile" \
--tag "${PUSH_REGISTRY}/${repository}:${image_tag}" \ --tag "${PUSH_REGISTRY}/${repository}:${image_tag}" \