#!/usr/bin/env bash # Re-points the existing LAN dev self-hosted runner from GitHub Actions to # Forgejo Actions. Run on the SAME machine that already runs the GitHub # runner (see DEPLOY-DEV.md) — this replaces that runner, it doesn't add a # second one. Sudo-free, systemd --user, same pattern as the app service. # # It registers with BOTH labels the workflows historically needed: general # CI/build/deploy jobs (`docker`, containerized via this machine's own # already-installed Docker — no Docker-in-Docker sidecar needed, since a real # host with a real Docker install needs no such indirection) and the LAN-deploy # job (`thermograph-lan`, bare/host-native — it wrote to ~/thermograph-dev and # restarted a systemd --user service, which only worked running directly on the # host, not inside a container). # # `thermograph-lan` IS NOW OBSOLETE. Dev moved off this machine to vps1 and is # deployed over SSH by the same `Deploy` workflow that ships beta and prod; # there is no host-native LAN deploy job left for that label to serve. Nothing # breaks by keeping it registered — no workflow requests it — but do not build # anything new on it. # # This machine keeps serving the `docker` label as EXTRA capacity, and that is # now a settled call rather than an open one. The claim it used to make here — # that a Swarm-hosted runner was always-on, so the estate no longer depended on # this box — was false: no such runner existed. This was the only registered # runner in the estate until 2026-08-01, and when it went offline on 2026-07-31 # every merge, deploy and backup stopped for 21 hours. # # The runner the estate depends on is deploy/forgejo/runner-vps2/. Keeping this # one is worthwhile (a second runner means a queue drains instead of stalling), # but nothing may be built on the assumption that this box is up. # # bash deploy/forgejo/register-lan-runner.sh # # Get from the Forgejo web UI: # repo -> Settings -> Actions -> Runners -> Create new Runner # (or an org/instance-level runner page, if you want it to serve more than # this one repo — same as the GitHub runner did). set -euo pipefail FORGEJO_URL="${1:?usage: $0 }" TOKEN="${2:?}" RUNNER_DIR="${RUNNER_DIR:-$HOME/forgejo-runner}" LABELS="${LABELS:-docker:docker://git.thermograph.org/jinemi/thermograph/ci-runner:v2,thermograph-lan}" echo "==> Stopping and disabling the old GitHub Actions runner service, if present" systemctl --user stop github-actions-runner 2>/dev/null || true systemctl --user disable github-actions-runner 2>/dev/null || true if ! id -nG "$USER" 2>/dev/null | grep -qw docker; then echo "WARNING: $USER is not in the 'docker' group — the 'docker:docker://...'" echo "labeled jobs (general CI) will fail to start a container until this is" echo "fixed: sudo usermod -aG docker $USER && (log out and back in)." fi echo "==> Installing forgejo-runner into $RUNNER_DIR" mkdir -p "$RUNNER_DIR" cd "$RUNNER_DIR" if [ ! -x ./forgejo-runner ]; then ARCH="$(uname -m)" case "$ARCH" in x86_64) BIN_ARCH=amd64 ;; aarch64) BIN_ARCH=arm64 ;; *) echo "Unsupported arch: $ARCH — download the right binary by hand from" \ "https://code.forgejo.org/forgejo/runner/releases" >&2; exit 1 ;; esac VER="${FORGEJO_RUNNER_VERSION:-6.3.1}" curl -fsSL -o forgejo-runner \ "https://code.forgejo.org/forgejo/runner/releases/download/v${VER}/forgejo-runner-${VER}-linux-${BIN_ARCH}" chmod +x forgejo-runner fi echo "==> Registering with $FORGEJO_URL (label: $LABELS)" ./forgejo-runner register --no-interactive \ --instance "$FORGEJO_URL" \ --token "$TOKEN" \ --name "thermograph-lan-$(hostname -s)" \ --labels "$LABELS" echo "==> Runner config (docker.sock automount so docker:-labeled jobs like" echo " build-push.yml can actually run 'docker build/push'; capacity raised" echo " from the default of 1 -- a single PR push fires 3+ independent" echo " workflows (pr-build, secrets-guard, shell-lint) simultaneously, so" echo " anything less than that serializes jobs that could run in parallel)" CAPACITY="${CAPACITY:-8}" ./forgejo-runner generate-config \ | sed -e 's/docker_host: "-"/docker_host: "automount"/' \ -e "s/capacity: 1/capacity: ${CAPACITY}/" \ > "${RUNNER_DIR}/config.yaml" echo "==> systemd --user unit" mkdir -p "$HOME/.config/systemd/user" cat > "$HOME/.config/systemd/user/forgejo-runner.service" </dev/null || true cat <