<feed xmlns='http://www.w3.org/2005/Atom'>
<title>archsetup/scripts/testing/run-test.sh, branch v0.5</title>
<subtitle>Builds a full dev workstation from a bare Arch Linux install.
</subtitle>
<id>https://git.cjennings.net/archsetup/atom?h=v0.5</id>
<link rel='self' href='https://git.cjennings.net/archsetup/atom?h=v0.5'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/'/>
<updated>2026-01-29T14:15:14+00:00</updated>
<entry>
<title>fix(test): use PROJECT_ROOT for git bundle creation</title>
<updated>2026-01-29T14:15:14+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-29T14:15:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=a2ab1f87f78ae9dfcd433587105ce9388a154d2b'/>
<id>urn:sha1:a2ab1f87f78ae9dfcd433587105ce9388a154d2b</id>
<content type='text'>
The git bundle command was running from current directory
instead of PROJECT_ROOT, causing it to bundle from wrong repo.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(testing): add make test target and display report on completion</title>
<updated>2026-01-28T04:22:34+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-28T04:22:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=13a86132407dccf2ced25745da4309587384aa54'/>
<id>urn:sha1:13a86132407dccf2ced25745da4309587384aa54</id>
<content type='text'>
Add 'make test' Makefile target to run full VM integration test suite.
Print test report to terminal after generation for immediate visibility.
</content>
</entry>
<entry>
<title>feat(testing): rewrite test infrastructure from libvirt to direct QEMU</title>
<updated>2026-01-27T23:22:55+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-27T23:22:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=70bb2d5ab1bf6787bc613e33f5398be2eca1f5fd'/>
<id>urn:sha1:70bb2d5ab1bf6787bc613e33f5398be2eca1f5fd</id>
<content type='text'>
Replace the never-fully-operational libvirt-based VM test infrastructure
with direct QEMU management and archangel ISO for fully automated,
unattended base VM creation.

Key changes:
- vm-utils.sh: complete rewrite — QEMU process mgmt via PID file,
  monitor socket for graceful shutdown, qemu-img snapshots, SSH
  port forwarding (localhost:2222)
- create-base-vm.sh: boots archangel ISO, SSHs in, runs unattended
  install via config file, verifies, creates clean-install snapshot
- run-test.sh: snapshot revert, git bundle transfer, detached archsetup
  execution with setsid, polling, validation, and report generation
- debug-vm.sh: CoW overlay disk, GTK display, auto-cleanup on close
- setup-testing-env.sh: reduced deps to qemu-full/sshpass/edk2-ovmf/socat
- cleanup-tests.sh: PID-based process management, orphan detection
- validation.sh: port-based SSH (backward compatible), fuzzel/foot for
  Hyprland, corrected package list paths
- network-diagnostics.sh: getent/curl instead of nslookup/ping (SLIRP)

New files:
- archsetup-test.conf: archangel config for base VM (btrfs, no encrypt)
- archsetup-vm.conf: archsetup config for unattended test execution
- assets/archangel.conf.example: reference archangel config

Deleted:
- finalize-base-vm.sh: merged into create-base-vm.sh
- archinstall-config.json: replaced by archangel .conf format

Tested: full end-to-end run — 51 validations passed, 0 failures.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix(testing): remove obsolete --skip-slow-packages option</title>
<updated>2026-01-25T00:52:34+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-25T00:52:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=d63ba1f5e6919cd14c95f7209c38db0ff0632ce5'/>
<id>urn:sha1:d63ba1f5e6919cd14c95f7209c38db0ff0632ce5</id>
<content type='text'>
This flag was removed from archsetup but remained in test scripts.
</content>
</entry>
<entry>
<title>feat(testing): add comprehensive validation library for archsetup</title>
<updated>2026-01-20T06:09:29+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-20T06:09:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=bb3c3ae1b1b1d28fb4253a2fe18d0d53859c143d'/>
<id>urn:sha1:bb3c3ae1b1b1d28fb4253a2fe18d0d53859c143d</id>
<content type='text'>
Add validation.sh library with 25+ automated validation checks:
- User creation, shell, and group membership (15 groups)
- Dotfiles: symlink validity, target location, and readability
- Package managers: yay and pacman functional tests
- Suckless tools: dwm, st, dmenu, slock
- Services: firewall, DNS-over-TLS, avahi (with mDNS ping test),
  fail2ban, NetworkManager
- Developer tools: emacs, git, python, node, npm, go, rustc
- Filesystem-specific: ZFS (sanoid, scrub) and btrfs (grub-btrfsd)
- Archsetup-specific: log errors, state markers

Also includes:
- Pre/post install log capture and diff analysis
- Error categorization (benign vs real)
- Issue attribution (archsetup vs base install)
- archzfs inbox integration for base install issues

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix(archsetup): copy archsetup to user directory before stow</title>
<updated>2026-01-10T07:43:58+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-10T06:54:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=41014590cc54ec490505a3851fa59ef8c5d6aebe'/>
<id>urn:sha1:41014590cc54ec490505a3851fa59ef8c5d6aebe</id>
<content type='text'>
Previously, stow created dotfile symlinks pointing to wherever archsetup
was run from (e.g., /root/archsetup or /tmp). If run from a location
inaccessible to the user, zsh would fail to read its config on first
login and prompt for new user setup.

The fix copies archsetup to ~/code/archsetup before running stow, ensuring
symlinks always point to a user-accessible location.

Also adds a test to verify dotfiles are readable by the user (not just root).

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix(archsetup): implement critical bug fixes and test improvements</title>
<updated>2025-11-14T05:26:21+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-14T05:26:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=2e10a8856d0bdd4c8f77c53320221ad1b8deaa13'/>
<id>urn:sha1:2e10a8856d0bdd4c8f77c53320221ad1b8deaa13</id>
<content type='text'>
This commit addresses several high-priority bugs and enhances the testing infrastructure:

**Bug Fixes:**
1. Add root permission check at script start to fail fast with clear error message
2. Disable debug package installation by adding --nodebug flag to all yay calls
3. Replace unsafe `git pull --force` with safe rm + fresh clone to prevent data loss
4. Add geoclue package with correct systemd service configuration for geolocation
5. Add completion marker for reliable automated test detection

**Testing Infrastructure:**
- Add comprehensive VM-based testing framework in scripts/testing/
- Fix test script pgrep infinite loop using grep bracket self-exclusion pattern
- Add network diagnostics and pre-flight checks
- Support snapshot-based testing for reproducible test runs

**Package Management:**
- Remove anki (build hangs 98+ minutes)
- Remove adwaita-color-schemes (CMake build issues)

Test Results: 0 errors, 1,363 packages installed in 40 minutes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
