diff --git a/.scripts/image-release.sh b/.scripts/image-release.sh index e5f3574..52795f7 100755 --- a/.scripts/image-release.sh +++ b/.scripts/image-release.sh @@ -111,9 +111,16 @@ verify_and_smoke() { verify_image "${AGENT_IMAGE}" "${AGENT_DIGEST}" >/dev/null verify_image "${AGENT_UBI_IMAGE}" "${AGENT_UBI_DIGEST}" >/dev/null for platform in linux/amd64 linux/arm64; do + # Docker's classic image store cannot keep two platform-specific images for + # the same manifest-list digest. Clear the previous platform before pulling + # the next one, otherwise the arm64 pull fails with "cannot overwrite digest". + docker image rm --force "${OPERATOR_IMAGE}@${operator_digest}" >/dev/null 2>&1 || true + docker image rm --force "${OPERATOR_IMAGE}" >/dev/null 2>&1 || true docker pull --platform "${platform}" "${OPERATOR_IMAGE}@${operator_digest}" >/dev/null docker run --rm --platform "${platform}" "${OPERATOR_IMAGE}@${operator_digest}" --help >/dev/null for image in "${AGENT_IMAGE}@${AGENT_DIGEST}" "${AGENT_UBI_IMAGE}@${AGENT_UBI_DIGEST}"; do + docker image rm --force "${image}" >/dev/null 2>&1 || true + docker image rm --force "${image%@*}" >/dev/null 2>&1 || true docker pull --platform "${platform}" "${image}" >/dev/null docker run --rm --platform "${platform}" "${image}" --version >/dev/null done diff --git a/.test/fake-release-docker.sh b/.test/fake-release-docker.sh index 9d8fe3b..f06ceb6 100755 --- a/.test/fake-release-docker.sh +++ b/.test/fake-release-docker.sh @@ -51,6 +51,7 @@ case "$*" in *) exit 2 ;; esac ;; + image\ rm*) printf '%s\n' "$*" >>"${FAKE_REGISTRY}/removals" ;; pull*|run*) ;; *) printf 'unsupported fake docker: %s\n' "$*" >&2; exit 2 ;; esac diff --git a/.test/image-release.sh b/.test/image-release.sh index d05b131..d1efe11 100755 --- a/.test/image-release.sh +++ b/.test/image-release.sh @@ -26,6 +26,12 @@ jq -e '.operator.digest == "sha256:operator-index" and .agent.digest == "sha256:4d73b9e6096d4d653c3b46733aa4dbf45dfde1ed1e5f142da8da5a396eb9ffab" and .agentUbi.digest == "sha256:79d86f8dbc71831a16a2e1cd826b5a90a4c5a8a165fc53e62f43243b8274fb22"' \ "${TEST_ROOT}/release.json" >/dev/null +[[ "$(grep -c 'image rm --force webhookrelay/webhookrelay-operator:build-test@sha256:operator-index' \ + "${TEST_ROOT}/registry/removals")" == "2" ]] +[[ "$(grep -c 'image rm --force webhookrelay/webhookrelayd:1.37.0@' \ + "${TEST_ROOT}/registry/removals")" == "2" ]] +[[ "$(grep -c 'image rm --force webhookrelay/webhookrelayd-ubi8:1.37.0@' \ + "${TEST_ROOT}/registry/removals")" == "2" ]] run_release promote-version sha256:operator-index run_release promote-version sha256:operator-index printf 'sha256:63e40035e33c9485c4909868cc5f2372cf06c97eee26b342f2fa8f7562f5e520\n' \