From dcaf6d5402d838434bf739b8a3d2f5602327b990 Mon Sep 17 00:00:00 2001 From: Rogee Date: Wed, 26 Aug 2026 19:18:04 +0800 Subject: [PATCH] HH-707: skip existing image versions Co-authored-by: multica-agent --- README.md | 2 +- scripts/build.sh | 5 +++++ tests/check.sh | 12 ++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b6d8c46..01e267e 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ CHROME_VERSION=148.0.7778.215 ./scripts/build.sh my-registry/fingerprint-chromium ``` -脚本从上游 GitHub Release 解析唯一的 Linux x86_64 压缩包,镜像 tag 使用完整 Chrome 版本。设置 `PUSH=true` 时,构建完成后推送镜像。 +脚本从上游 GitHub Release 解析唯一的 Linux x86_64 压缩包,镜像 tag 使用完整 Chrome 版本。设置 `PUSH=true` 时,若仓库中不存在该版本标签则构建并推送,否则跳过。 ## 运行 diff --git a/scripts/build.sh b/scripts/build.sh index 6ef5cc5..b70045d 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -20,6 +20,11 @@ asset_url="$(jq -er --arg version "$version" ' ' <<<"$release")" tag="$image:$version" +if [[ "${PUSH:-false}" == "true" ]] && docker manifest inspect "$tag" >/dev/null 2>&1; then + printf 'Image %s already exists; skipping build and push\n' "$tag" + exit 0 +fi + docker build --pull --platform linux/amd64 \ --build-arg "CHROME_VERSION=$version" \ --build-arg "CHROME_URL=$asset_url" \ diff --git a/tests/check.sh b/tests/check.sh index 1288c79..d6200a8 100755 --- a/tests/check.sh +++ b/tests/check.sh @@ -18,3 +18,15 @@ grep -q 'OCI_SOURCE: https://git.ipao.vip/rogee/fingerprint-chromium' .gitea/wor grep -q '/link/fingerprint-chromium' .gitea/workflows/publish.yml grep -q "repository.full_name // empty" .gitea/workflows/publish.yml test "$(grep -c 'Authorization: token \$REGISTRY_TOKEN' .gitea/workflows/publish.yml)" -eq 3 + +tmpdir="$(mktemp -d)" +trap 'rm -rf "$tmpdir"' EXIT +printf '%s\n' '#!/bin/sh' 'printf '\''{"tag_name":"1.2.3.4","assets":[{"name":"ungoogled-chromium-1.2.3.4-test-x86_64_linux.tar.xz","browser_download_url":"https://example.invalid/chromium.tar.xz"}]}'\''' > "$tmpdir/curl" +printf '%s\n' '#!/bin/sh' 'printf '\''%s\n'\'' "$*" >> "$DOCKER_LOG"' '[ "$1 $2" = "manifest inspect" ]' > "$tmpdir/docker" +chmod +x "$tmpdir/curl" "$tmpdir/docker" + +docker_log="$tmpdir/docker.log" +DOCKER_LOG="$docker_log" OCI_REVISION=test PUSH=true PATH="$tmpdir:$PATH" \ + ./scripts/build.sh registry.example/fingerprint-chromium > "$tmpdir/output" +test "$(cat "$docker_log")" = "manifest inspect registry.example/fingerprint-chromium:1.2.3.4" +grep -q 'skipping build and push' "$tmpdir/output" -- 2.54.0