fix: refresh offline repositories on fresh hosts

This commit is contained in:
Haitao Pan 2026-06-19 10:26:37 +08:00
parent 5c9b5d2ed0
commit 15a0e30a81
2 changed files with 43 additions and 1 deletions

View File

@ -725,11 +725,31 @@ validate_offline_package_requirements() {
esac
}
ensure_git_for_offline_refresh() {
local target=$1
command -v git >/dev/null 2>&1 && return
case "$target" in
"ubuntu "*|"debian "*)
info "Installing Git before refreshing packaged repositories..."
wait_for_apt_locks
run_as_root apt-get update -y
run_as_root env DEBIAN_FRONTEND=noninteractive apt-get install -y git
;;
*)
return
;;
esac
}
refresh_offline_package_repositories() {
local root=$1
local target=${2:-}
local repo_dir branch
offline_mode_is_force && return
ensure_git_for_offline_refresh "$target"
command -v git >/dev/null 2>&1 || return
curl -m 3 -sI https://github.com >/dev/null 2>&1 || return
@ -762,7 +782,7 @@ run_offline_installer() {
[ -f "$installer" ] || return 1
validate_offline_package_target "$root" "$target"
refresh_offline_package_repositories "$root"
refresh_offline_package_repositories "$root" "$target"
chmod +x "$installer"
for env_name in \

View File

@ -100,6 +100,26 @@ test_auto_offline_mode_refreshes_packaged_repositories() (
rm -rf "$package_root" "$git_log"
)
test_offline_refresh_installs_git_on_fresh_debian() (
install_log="$(mktemp)"
# shellcheck disable=SC2329
command() {
if [ "${1:-}" = "-v" ] && [ "${2:-}" = "git" ]; then
return 1
fi
builtin command "$@"
}
# shellcheck disable=SC2329
wait_for_apt_locks() { :; }
# shellcheck disable=SC2329
run_as_root() { printf '%s\n' "$*" >> "$install_log"; }
ensure_git_for_offline_refresh "debian 13 amd64"
grep -q '^apt-get update -y$' "$install_log" || fail "fresh Debian did not refresh apt metadata"
grep -q '^env DEBIAN_FRONTEND=noninteractive apt-get install -y git$' "$install_log" || fail "fresh Debian did not install Git"
rm -f "$install_log"
)
test_ubuntu_2604_offline_package_requires_npm() (
package_root="$(mktemp -d)"
mkdir -p "$package_root/packages/apt"
@ -212,6 +232,8 @@ test_forced_offline_mode_does_not_refresh_repositories
printf 'ok - forced offline mode does not refresh packaged repositories\n'
test_auto_offline_mode_refreshes_packaged_repositories
printf 'ok - auto offline mode refreshes packaged repositories\n'
test_offline_refresh_installs_git_on_fresh_debian
printf 'ok - fresh Debian installs Git before repository refresh\n'
test_ubuntu_2604_offline_package_requires_npm
printf 'ok - Ubuntu 26.04 offline package requires npm\n'
test_dynamic_parallel_limit_avoids_awk_reserved_names