Problem
Self-hosted CI runners (Linux, Windows, macOS) are manually provisioned. If a runner VM dies or needs re-provisioning, someone has to manually install Qt, Hamlib, CMake, system dependencies, etc. by following docs in ~/.claude/SELF_HOSTED_RUNNERS.md.
This just bit us: the Linux runner was missing libpulse-dev (required by Qt6Multimedia), causing link failures. The fix was manual apt-get install via SSH.
Proposal
Create provisioning scripts for each runner platform:
scripts/ci/setup-linux-runner.sh — installs Qt (via aqtinstall), Hamlib, system deps (libpulse-dev, libasound2-dev, libgl1-mesa-dev), linuxdeploy, registers GitHub Actions runner
scripts/ci/setup-windows-runner.ps1 — installs Qt, MinGW, Hamlib, NSIS, 7-Zip, Git, Defender exclusions, registers runner
scripts/ci/setup-macos-runner.sh — installs Homebrew, Qt, Hamlib, create-dmg, code signing cert import, registers runner
Scripts should be idempotent (safe to re-run) and version-pinned to match build.yml env vars (QT_VERSION, HAMLIB_VERSION).
Acceptance Criteria
Context
- Current runner docs:
~/.claude/SELF_HOSTED_RUNNERS.md
- Runner details:
~/.claude/projects/.../memory/ci-runners.md
- Related fix: commit 563ce39 (added
libpulse-dev install step to build.yml as safety net)
Problem
Self-hosted CI runners (Linux, Windows, macOS) are manually provisioned. If a runner VM dies or needs re-provisioning, someone has to manually install Qt, Hamlib, CMake, system dependencies, etc. by following docs in
~/.claude/SELF_HOSTED_RUNNERS.md.This just bit us: the Linux runner was missing
libpulse-dev(required by Qt6Multimedia), causing link failures. The fix was manualapt-get installvia SSH.Proposal
Create provisioning scripts for each runner platform:
scripts/ci/setup-linux-runner.sh— installs Qt (via aqtinstall), Hamlib, system deps (libpulse-dev,libasound2-dev,libgl1-mesa-dev), linuxdeploy, registers GitHub Actions runnerscripts/ci/setup-windows-runner.ps1— installs Qt, MinGW, Hamlib, NSIS, 7-Zip, Git, Defender exclusions, registers runnerscripts/ci/setup-macos-runner.sh— installs Homebrew, Qt, Hamlib, create-dmg, code signing cert import, registers runnerScripts should be idempotent (safe to re-run) and version-pinned to match
build.ymlenv vars (QT_VERSION,HAMLIB_VERSION).Acceptance Criteria
build.ymlor a shared config (single source of truth)Context
~/.claude/SELF_HOSTED_RUNNERS.md~/.claude/projects/.../memory/ci-runners.mdlibpulse-devinstall step tobuild.ymlas safety net)