rework test workflow and test setup (#201)

Co-authored-by: Meliox <na>
This commit is contained in:
MelioxandMeliox authored and GitHub committed 2026-06-11 21:14:06 +02:00
1 parent bfeeb94948
commit 80137d3fb3
5 files changed
+51 -126

No files matched your search

+6 -35
View File
@@ -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."
-38
View File
@@ -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