ci: use Tsinghua apt/apk mirrors on the runner
ci / linux (clang) (push) Failing after 18s
ci / linux (gcc) (push) Failing after 17s
ci / musl (push) Canceled after 0s
ci / macos (push) Canceled after 0s
ci / sanitizers (push) Canceled after 14m31s

Install was pulling bookworm packages from deb.debian.org; the domestic
Gitea runner crawls that for minutes. Rewrite sources to TUNA before
apt-get/apk, with CST_CI_MIRROR to override.
This commit is contained in:
WHC
2026-10-07 01:42:56 +08:00
parent daa92a6cfb
commit 9ec21b7fc0
2 changed files with 78 additions and 1 deletions
+71
View File
@@ -0,0 +1,71 @@
#!/usr/bin/env bash
# Point package managers at a China mirror before apt/apk install.
# Gitea runners in CN are far too slow against deb.debian.org /
# archive.ubuntu.com / dl-cdn.alpinelinux.org.
#
# CST_CI_MIRROR=https://mirrors.tuna.tsinghua.edu.cn scripts/ci_pkg_mirror.sh
# Default mirror: Tsinghua TUNA. Override with CST_CI_MIRROR if needed.
set -euo pipefail
MIRROR="${CST_CI_MIRROR:-https://mirrors.tuna.tsinghua.edu.cn}"
MIRROR="${MIRROR%/}"
if [[ -f /etc/alpine-release ]]; then
echo "==> apk mirror -> $MIRROR/alpine"
if [[ -f /etc/apk/repositories ]]; then
sed -i \
-e "s|https\\?://dl-cdn.alpinelinux.org/alpine|${MIRROR}/alpine|g" \
-e "s|https\\?://[^/[:space:]]*/alpine|${MIRROR}/alpine|g" \
/etc/apk/repositories
fi
exit 0
fi
if ! command -v apt-get >/dev/null; then
echo "==> no apt/apk; skip mirror"
exit 0
fi
# Debian vs Ubuntu: different path under the mirror root.
id_like=""
. /etc/os-release 2>/dev/null || true
case "${ID:-}:${ID_LIKE:-}" in
ubuntu:*|*ubuntu*)
dist=ubuntu
;;
debian:*|*debian*|*)
dist=debian
;;
esac
echo "==> apt mirror -> $MIRROR/$dist (and ${dist}-security)"
rewrite() {
local f="$1"
[[ -f "$f" ]] || return 0
# Classic one-line sources
sed -i \
-e "s|https\\?://deb.debian.org/debian-security|${MIRROR}/debian-security|g" \
-e "s|https\\?://deb.debian.org/debian|${MIRROR}/debian|g" \
-e "s|https\\?://security.debian.org/debian-security|${MIRROR}/debian-security|g" \
-e "s|https\\?://security.debian.org|${MIRROR}/debian-security|g" \
-e "s|https\\?://archive.ubuntu.com/ubuntu|${MIRROR}/ubuntu|g" \
-e "s|https\\?://security.ubuntu.com/ubuntu|${MIRROR}/ubuntu|g" \
-e "s|https\\?://ports.ubuntu.com/ubuntu-ports|${MIRROR}/ubuntu-ports|g" \
"$f"
# DEB822 (.sources): URIs: http://deb.debian.org/debian
sed -i \
-e "s|^URIs: *https\\?://deb.debian.org/debian-security|URIs: ${MIRROR}/debian-security|g" \
-e "s|^URIs: *https\\?://deb.debian.org/debian|URIs: ${MIRROR}/debian|g" \
-e "s|^URIs: *https\\?://security.debian.org/debian-security|URIs: ${MIRROR}/debian-security|g" \
-e "s|^URIs: *https\\?://security.debian.org|URIs: ${MIRROR}/debian-security|g" \
-e "s|^URIs: *https\\?://archive.ubuntu.com/ubuntu|URIs: ${MIRROR}/ubuntu|g" \
-e "s|^URIs: *https\\?://security.ubuntu.com/ubuntu|URIs: ${MIRROR}/ubuntu|g" \
"$f"
}
rewrite /etc/apt/sources.list
shopt -s nullglob
for f in /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources; do
rewrite "$f"
done