aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile64
1 files changed, 55 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index 629c750..a08ddb5 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,18 @@
# (https://git.cjennings.net/dotfiles.git). Run them from there:
# cd ~/.dotfiles && make stow|restow|reset|unstow|import <de>
-.PHONY: help deps test-unit test test-keep test-vm-base package-diff
+.PHONY: help deps test-unit test-elisp test test-keep test-vm-base test-maint package-diff
+
+# Filesystem profile for the VM harness: btrfs (default) or zfs. Selects the
+# base image the scripts build/use; exported so create-base-vm.sh + run-test.sh
+# pick the matching archangel config and image. e.g. make test FS_PROFILE=zfs
+FS_PROFILE ?= btrfs
+export FS_PROFILE
+ifeq ($(FS_PROFILE),btrfs)
+BASE_IMAGE := vm-images/archsetup-base.qcow2
+else
+BASE_IMAGE := vm-images/archsetup-base-$(FS_PROFILE).qcow2
+endif
# Default target - show help
help:
@@ -13,12 +24,17 @@ help:
@echo ""
@echo "Targets:"
@echo " deps Install VM-testing dependencies"
- @echo " test-unit Run fast unit tests for installer helpers (no VM)"
+ @echo " test-unit Run fast unit tests (python + elisp, no VM)"
+ @echo " test-elisp Run just the elisp (ERT) suites"
@echo " test Run full VM test suite (creates base VM if needed)"
@echo " test-keep Run test and keep VM running for manual testing"
@echo " test-vm-base Create base VM only (runs archangel)"
+ @echo " test-maint Run maint remedy scenarios in the VM (break/fix/assert)"
@echo " package-diff Compare archsetup's declared packages vs this system"
@echo ""
+ @echo "Filesystem profile (test, test-keep, test-vm-base):"
+ @echo " FS_PROFILE=btrfs (default) or zfs, e.g. make test FS_PROFILE=zfs"
+ @echo ""
@echo "Dotfile stow operations now live in the dotfiles repo:"
@echo " cd ~/.dotfiles && make stow|restow|reset|unstow|import <de>"
@echo ""
@@ -27,7 +43,8 @@ help:
deps:
@echo "Installing VM testing dependencies..."
sudo pacman -S --needed qemu-full virt-manager virt-viewer libguestfs \
- bridge-utils dnsmasq archiso sshpass socat
+ bridge-utils dnsmasq archiso sshpass socat \
+ python-pytest python-pytest-testinfra
@echo ""
@echo "Done. For VM testing, also ensure libvirtd is running:"
@echo " sudo systemctl enable --now libvirtd"
@@ -35,6 +52,8 @@ deps:
# Run the fast unit-test suites for installer helpers (no VM needed).
# One suite per tests/<name>/ dir; `unittest discover` can't find them
# because the dir names are hyphenated, so each suite is run explicitly.
+# Elisp suites (tests/*/test-*.el, ERT) run in the same pass so one green
+# `make test-unit` covers the whole fast tier.
test-unit:
@fail=0; \
for t in tests/*/test_*.py; do \
@@ -42,6 +61,21 @@ test-unit:
echo "==> $$mod"; \
python3 -m unittest "$$mod" || fail=1; \
done; \
+ for t in tests/*/test-*.el; do \
+ [ -e "$$t" ] || continue; \
+ echo "==> $$t"; \
+ emacs --batch -l ert -l "$$t" -f ert-run-tests-batch-and-exit || fail=1; \
+ done; \
+ exit $$fail
+
+# Run just the elisp (ERT) suites
+test-elisp:
+ @fail=0; \
+ for t in tests/*/test-*.el; do \
+ [ -e "$$t" ] || continue; \
+ echo "==> $$t"; \
+ emacs --batch -l ert -l "$$t" -f ert-run-tests-batch-and-exit || fail=1; \
+ done; \
exit $$fail
# Create base VM for testing (runs archangel only, no archsetup)
@@ -50,22 +84,34 @@ test-vm-base:
# Test - run full VM integration test suite (creates base VM if needed)
test:
- @if [ ! -f vm-images/archsetup-base.qcow2 ] || \
- ! qemu-img snapshot -l vm-images/archsetup-base.qcow2 2>/dev/null | grep -q "clean-install"; then \
- echo "Base VM not found or missing snapshot, creating..."; \
+ @if [ ! -f $(BASE_IMAGE) ] || \
+ ! qemu-img snapshot -l $(BASE_IMAGE) 2>/dev/null | grep -q "clean-install"; then \
+ echo "Base VM not found or missing snapshot, creating ($(FS_PROFILE))..."; \
bash scripts/testing/create-base-vm.sh; \
fi
@bash scripts/testing/run-test.sh
# Test and keep VM running (for manual testing after archsetup)
test-keep:
- @if [ ! -f vm-images/archsetup-base.qcow2 ] || \
- ! qemu-img snapshot -l vm-images/archsetup-base.qcow2 2>/dev/null | grep -q "clean-install"; then \
- echo "Base VM not found or missing snapshot, creating..."; \
+ @if [ ! -f $(BASE_IMAGE) ] || \
+ ! qemu-img snapshot -l $(BASE_IMAGE) 2>/dev/null | grep -q "clean-install"; then \
+ echo "Base VM not found or missing snapshot, creating ($(FS_PROFILE))..."; \
bash scripts/testing/create-base-vm.sh; \
fi
@bash scripts/testing/run-test.sh --keep
+# Maintenance-console remedy scenarios: break the VM, run the real
+# `maint fix`, assert the post-state. Grouped batches over the clean-install
+# snapshot; the base image is restored afterwards. `--list` variant to
+# preview: bash scripts/testing/run-maint-scenarios.sh --list
+test-maint:
+ @if [ ! -f $(BASE_IMAGE) ] || \
+ ! qemu-img snapshot -l $(BASE_IMAGE) 2>/dev/null | grep -q "clean-install"; then \
+ echo "Base VM not found or missing snapshot, creating ($(FS_PROFILE))..."; \
+ bash scripts/testing/create-base-vm.sh; \
+ fi
+ @bash scripts/testing/run-maint-scenarios.sh
+
# Compare the packages archsetup declares against what's installed here.
# Shows declared-but-missing and installed-but-undeclared (AUR vs official).
package-diff: