1 parent
bfeeb94948
commit
80137d3fb3
5 files changed
+51
-126
No files matched your search
@@ -1,16 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
# src/Scripts/test/fetch-proxmox-files.sh
|
||||
#
|
||||
# Downloads the upstream Proxmox VE files that pve-mod patches and installs them
|
||||
# at their real system paths, so the patch engine can be exercised on a plain
|
||||
# (non-Proxmox) CI runner.
|
||||
#
|
||||
# Pulls pve-manager and proxmox-widget-toolkit from the Proxmox no-subscription
|
||||
# repository (default: PVE 9 / Debian trixie) and extracts the target files.
|
||||
#
|
||||
# CI-only helper. The repo is added with [trusted=yes]: we are only fetching
|
||||
# public, unmodified UI files to patch against, not installing Proxmox, so
|
||||
# managing the signing key would add nothing.
|
||||
# Downloads upstream Proxmox VE packages and extracts all their files to real
|
||||
# system paths, so the patch engine can be exercised on a plain CI runner.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
@@ -18,15 +8,6 @@ SUITE="${PVE_SUITE:-trixie}"
|
||||
WORKDIR="$(mktemp -d)"
|
||||
trap 'rm -rf "$WORKDIR"' EXIT
|
||||
|
||||
# Files provided by the two packages, relative to the filesystem root. These are
|
||||
# exactly the paths the .patch files (and the nag_screen post-apply hook) touch.
|
||||
FILES=(
|
||||
usr/share/perl5/PVE/API2/Nodes.pm
|
||||
usr/share/pve-manager/js/pvemanagerlib.js
|
||||
usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
|
||||
usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.min.js
|
||||
)
|
||||
|
||||
echo "[fetch] Configuring Proxmox no-subscription repo ($SUITE)..."
|
||||
echo "deb [trusted=yes] http://download.proxmox.com/debian/pve $SUITE pve-no-subscription" \
|
||||
| sudo tee /etc/apt/sources.list.d/pve-test.list >/dev/null
|
||||
@@ -36,20 +17,10 @@ echo "[fetch] Downloading pve-manager and proxmox-widget-toolkit..."
|
||||
cd "$WORKDIR"
|
||||
apt-get download pve-manager proxmox-widget-toolkit
|
||||
|
||||
echo "[fetch] Extracting to system paths..."
|
||||
for deb in *.deb; do
|
||||
echo "[fetch] Extracting $deb"
|
||||
dpkg-deb -x "$deb" extract
|
||||
echo "[fetch] $deb"
|
||||
sudo dpkg-deb -x "$deb" /
|
||||
done
|
||||
|
||||
for rel in "${FILES[@]}"; do
|
||||
src="extract/$rel"
|
||||
dst="/$rel"
|
||||
if [[ ! -f "$src" ]]; then
|
||||
echo "[fetch] ERROR: expected file not found in packages: $rel" >&2
|
||||
exit 1
|
||||
fi
|
||||
sudo install -Dm644 "$src" "$dst"
|
||||
echo "[fetch] Installed $dst"
|
||||
done
|
||||
|
||||
echo "[fetch] Done."
|
||||
echo "[fetch] Done."
|
||||
@@ -15,7 +15,6 @@
|
||||
# so all of the mod's patches are exercised (e.g. node_info's gpu_history)
|
||||
# 3. runs apply-patches.sh and asserts it exits 0
|
||||
# 4. runs revert-patches.sh and asserts it reports no unclean reversions
|
||||
# 5. restores the pristine Proxmox files before moving to the next mod
|
||||
#
|
||||
# Failure detection relies on the apply exit code: the patch engine performs an
|
||||
# atomic preflight dry-run and exits non-zero if any mod cannot apply cleanly.
|
||||
@@ -30,18 +29,6 @@ PATCHES_DIR="${PVE_MOD_PATCHES_DIR:-/usr/lib/pve-mod/patches}"
|
||||
APPLY="${PVE_MOD_APPLY:-/usr/lib/pve-mod/apply-patches.sh}"
|
||||
REVERT="${PVE_MOD_REVERT:-/usr/lib/pve-mod/revert-patches.sh}"
|
||||
|
||||
# Proxmox files touched by the patches; snapshotted before and restored after
|
||||
# each mod so every mod is tested from a pristine baseline.
|
||||
PROXMOX_FILES=(
|
||||
/usr/share/perl5/PVE/API2/Nodes.pm
|
||||
/usr/share/pve-manager/js/pvemanagerlib.js
|
||||
/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
|
||||
/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.min.js
|
||||
)
|
||||
|
||||
SNAP_DIR="$(mktemp -d)"
|
||||
trap 'rm -rf "$SNAP_DIR"' EXIT
|
||||
|
||||
info() { echo "[test] $*"; }
|
||||
warn() { echo "[test] WARNING: $*" >&2; }
|
||||
|
||||
@@ -106,28 +93,6 @@ enable_conditions() {
|
||||
done < "$manifest"
|
||||
}
|
||||
|
||||
snapshot_files() {
|
||||
rm -rf "$SNAP_DIR"/*; mkdir -p "$SNAP_DIR"
|
||||
local i=0 f
|
||||
for f in "${PROXMOX_FILES[@]}"; do
|
||||
if [[ -e "$f" || -L "$f" ]]; then
|
||||
cp -a "$f" "$SNAP_DIR/$i"
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
}
|
||||
|
||||
restore_files() {
|
||||
local i=0 f
|
||||
for f in "${PROXMOX_FILES[@]}"; do
|
||||
if [[ -e "$SNAP_DIR/$i" || -L "$SNAP_DIR/$i" ]]; then
|
||||
rm -f "$f"
|
||||
cp -a "$SNAP_DIR/$i" "$f"
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
}
|
||||
|
||||
# Test a single mod end to end. Returns 0 on success, 1 on failure.
|
||||
test_one_mod() {
|
||||
local mod="$1"
|
||||
@@ -143,7 +108,6 @@ test_one_mod() {
|
||||
disable_all_modules
|
||||
set_conf "$MAIN_CONF" modules "$mod" 1
|
||||
enable_conditions "$mod"
|
||||
snapshot_files
|
||||
|
||||
info "Applying patches for '$mod'..."
|
||||
local apply_log apply_rc
|
||||
@@ -165,8 +129,6 @@ test_one_mod() {
|
||||
fi
|
||||
fi
|
||||
|
||||
restore_files
|
||||
|
||||
if [[ $ok -eq 0 ]]; then
|
||||
info "PASS: $mod"
|
||||
else
|
||||
|
||||
Reference in new issue
Block a user