ci: multi-mirror GitHub clone for mingw third_party
ci / linux (clang) (push) Successful in 3m47s
ci / linux (gcc) (push) Successful in 4m23s
ci / musl (push) Successful in 4m27s
ci / windows-cross (push) Failing after 8m37s

windows-cross died cloning busybox-w32 through a global gitclone.com
insteadOf (HTTP 502). Try ghfast/ghproxy/gitclone/github per repo instead
of forcing one proxy for every fetch.
This commit is contained in:
WHC
2026-10-07 11:43:12 +08:00
parent 546a4c7eeb
commit 94e8746091
2 changed files with 30 additions and 5 deletions
+27 -3
View File
@@ -22,11 +22,35 @@ need_cmd git
need_cmd make
need_cmd "${T}gcc"
# Clone a GitHub repo with CN-friendly mirrors; fall back if one proxy 502s.
github_mirrors() { # https://github.com/org/repo[.git] -> print candidate clone URLs
local url="$1" path
path="${url#https://github.com/}"
path="${path%.git}"
printf '%s\n' \
"https://ghfast.top/https://github.com/${path}.git" \
"https://ghproxy.net/https://github.com/${path}.git" \
"https://gitclone.com/github.com/${path}.git" \
"https://github.com/${path}.git"
}
checkout() { # url dir rev
local url="$1" dir="$2" rev="$3"
[[ -d "$dir/.git" ]] || git clone -q --filter=blob:none "$url" "$dir"
local url="$1" dir="$2" rev="$3" m
if [[ ! -d "$dir/.git" ]]; then
local ok=0
while IFS= read -r m; do
echo " clone $m"
rm -rf "$dir"
if git clone -q --filter=blob:none "$m" "$dir"; then
ok=1
break
fi
done < <(github_mirrors "$url")
[[ $ok -eq 1 ]] || { echo "clone failed: $url" >&2; exit 1; }
fi
if ! git -C "$dir" rev-parse -q --verify "$rev^{commit}" >/dev/null; then
git -C "$dir" fetch -q --tags origin
git -C "$dir" fetch -q --tags origin || true
git -C "$dir" fetch -q origin "$rev" || true
fi
git -C "$dir" checkout -q --detach "$rev"
}