Runner releases build arm64 sandbox images #201
Runner 0.3.5's image manifest has only wsl-x64 and vm-x64-*, so arm64 Windows, arm64 Linux and Macs all show "Waiting for image".
- Make the release build the arm64 sandbox images. The image jobs skip arm64 when the machine can't register QEMU's emulators.
- Check the warning in
runner-release.yml, and make a missing architecture fail loudly rather than ship quietly. - Verify on an arm64 machine or VM that the image downloads and a job runs.
Background: guided runner setup (shipped 2026-10-15, #142)
Anyone who installs the desktop app on a clean computer should get its runner running Linux jobs and Windows jobs (and later macOS jobs) without knowing what WSL, Hyper-V, virtualization or Docker are. Read apps/docs/src/content/docs/guides/desktop.md, "Getting the runner running".
How it works (g1t-runner 0.3.5, desktop 0.3.9):
g1t-runner sandbox status --jsongives each capability itsneeds, whatever must come first listed first: restart, windows_update, virtualization, nested_virtualization, vm_platform, wsl, wsl_update, windows_edition, windows_sandbox, kvm_module, kvm_group, qemu, macos_update, homebrew, vfkit (crates/runner/src/selfhosted/needs.rs). A need is named only when the computer says so for certain. Windows facts come from one PowerShell CIM probe and are kept in the state folder'swindows-facts.jsonuntil Windows restarts. Set up's restart is the state folder'srestart-pending, which holds the boot it was written in.- The app's words for each need are in
diagnosis.rsneed_words. Set up (apps/desktop/src-tauri/src/runner/setup.rs) runs one fixed PowerShell script as-EncodedCommandthrough ShellExecuteExW "runas". The script turns on VirtualMachinePlatform and Containers-DisposableClientVM, and runswsl --install --no-distribution/wsl --update(--web-downloadfirst). Exit code 3010 means a restart is needed. Restart now asks with a native MessageBox, and RunOnce reopens g1t after the restart. - The cards for each kind of job are independent. Whole-runner code is NeedsSetup.
Already verified: the published 0.3.5 runner on the owner's PC (no needs), the elevated script with nothing to do (UAC, then Done), the script unelevated (fails plainly and changes nothing), its WSL step (--version), the fixture scenario tests, and the rendered Runner window and docs.
Rules (non-negotiable)
- Runner jobs run in host-proof sandboxes. Docker and running directly on the computer are only ever the person's choice, never a fallback.
- The app must stay responsive: never block the main thread, and never hold a lock across a Tauri menu or window call (that froze 0.3.7).
- Never restart the owner's PC or toggle its Windows features without the owner's OK for that specific restart. Use VMs.
- Ask before cutting any desktop or runner release. A release means: bump
version(crates/runner/Cargo.toml,apps/desktop/src-tauri/Cargo.toml), merge, and pushrunner-v<version>/desktop-v<version>to the g1t remote. The workflows refuse a tag whose version doesn't match Cargo.toml. - On Windows, run cargo from PowerShell, not Git Bash (it needs the VS Build Tools C++ toolchain). The target directories are shared:
target/at the root for the runner, andapps/desktop/src-tauri/targetfor the app.
Validation for every change
cargo test -p g1t-runner; in apps/desktop/src-tauri, cargo test and cargo clippy --all-targets; the ignored live tests where they apply (cargo test -- --ignored this_windows, the_script_runs, the_wsl_step; as_administrator needs a UAC click); docs rendered with astro dev. Report what was verified on real machines and what was verified only in fixtures.
How to work on this repository
- Claim this item before you start (
g1t work claim <number>), and addG1t-Session: $G1T_SESSIONto every commit. - Other sessions share the main checkout: work in a worktree of your own and stage only your own files.
- Pushing to
maindeploys production, and pushes tomainand release tags are the owner's. Land the work through a pull request on this item, or commit locally and hand the owner the exactgit -C <path> push …. - Shipped means on
mainand deployed. Check it live with real data and look at the rendered pages: a status code doesn't show it works. - Docs ship in the same change as the feature (guides, reference, llms.txt), to a high standard.
- User-facing text never names other products or compares g1t to them. Internal notes and code comments may.
Repositories
- flagon-io/g1tOrigin
No pull request for it here yet.
Suggested
Repositories it may also need, and why.
- hello8 work items with the same labels landed there; 2 work items with like titles landed there.
- automation-lab2 work items with the same labels landed there.
- workflowsIt names workflows.
Nobody has worked on this yet
flagon-io#201.