run_in_vm prints how long it has run and the log's latest line, so an
hour-long install.sh shows progress without tail -f.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
upstream_set pushes the commit under test from the working copy, so
coredesktop-dev's pre-push hook ran make check on every push to the VM.
Inside the smoketest those checks saw VM_GIT_URL and friends, the
smoketest tests pushed to the real VM and failed, and the hook stopped
the push, failing the installed image's build. The push now uses
--no-verify, and the tests clear the smoketest's variables.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
So a long command (install.sh takes an hour or more) can be followed with
tail -f; run_in_vm prints the log's path when it starts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
coredesktop-dev now gives its VMs QEMU's standard VGA, which qemu-base
has, so the extra package and doctor's check are gone.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
New machines get VSCodium alone. A migration uninstalls the VS Code
Flatpak once on existing machines; its settings stay in ~/.var/app. The
README says how to install VS Code for extensions only Microsoft's
marketplace has, such as Remote-SSH; update then leaves it alone.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
install.sh now stops early, with a clear message, if this isn't 64-bit
Arch, it's run as root, there's no internet, or sudo doesn't work.
system/preflight.sh then asks before going on with too little disk space
or / not on btrfs, and offers to switch another login screen to GDM and
PulseAudio to PipeWire. Keeping another login screen puts GDM in
services-off, so install and update stop failing to enable it; a
migration does the same on existing machines. It says nothing when all
is well, as refresh runs install.sh again.
Intel GPUs also get intel-media-driver for hardware video decoding, with
a migration for existing machines.
The mise migration links ~/.local/bin/mise to /usr/bin/mise instead of
deleting it, so shells opened before the update don't print an error at
every prompt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings in the shellcheck lint and bats tests. Both sides fixed the same
shellcheck warnings; this keeps the remote's versions of 20-aur.sh,
80-gnome-extensions.sh and .shellcheckrc, which silence false positives
per line rather than for the whole repo.
The Gitea workflow now runs make lint, so it checks the same scripts as
the Makefile, and the README points contributors at make check. The test
helper's REPO, used only by the .bats files, is marked for shellcheck,
and the update test expects the pull to be fast-forward only.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
make lint runs shellcheck on every tracked bash script, make test runs
the bats suite in tests/, and make check runs both. The tests cover the
update orchestrator (hook isolation, failure reporting, pull and
free-space handling) and utils.sh (migrations, package install and
removal, services, initramfs build check), using stub commands so they
never touch the real system.
Fixes from the first lint run: 20-aur.sh stops if a cd fails rather
than building or deleting in the wrong directory, and
80-gnome-extensions.sh refuses to rm -rf with an empty path. The rest
are false positives, silenced in .shellcheckrc or per line.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The gateway reads its sandbox rules and loads new dependencies only when it
starts, and hermes update restarts it only for new code. Restart it at the end
of the sandbox update step instead of before hermes update runs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>