# CI `.gitea/workflows/checkpoint.yml` runs the full checkpoint suite (`scripts/run_checkpoint_tests.py`: migrations on a fresh DB, backend `pytest`, all Godot smoke tests, the 2-player multiplayer test, and the fresh-clone boot check) on **every push to `main` and every PR**. ## Status: live Set up 2026-09-05: - Gitea Actions enabled (`[actions] ENABLED = true` in `/DATA/AppData/forgejo/gitea/conf/app.ini`, container restarted; a timestamped `.bak` is next to it). - `act_runner` v0.2.13 registered as **`agp-host`** with label **`host`** (host execution mode — jobs run directly on the AGP box, which already has Docker, `~/godot/godot`, and Python). Lives in `~/act-runner/`. - Green on the first successful run (`d76bf4d`). The workflow uses **no JavaScript actions** (no `actions/checkout`), so the host needs no Node: checkout is a shallow `git fetch` from the local Gitea using the injected `${{ github.token }}`, and the suite runs in a venv the job builds (host Python is PEP-668 externally-managed). ## Make the runner permanent (one command, needs sudo) The runner currently runs as a plain background process — it won't survive a reboot. A unit file is ready at `~/act-runner/act-runner.service`: ```bash sudo cp ~/act-runner/act-runner.service /etc/systemd/system/ sudo systemctl daemon-reload pkill -f 'act_runner daemon' # stop the temporary background one sudo systemctl enable --now act-runner ``` ## Interim / local ```bash python scripts/run_checkpoint_tests.py ``` — also what `/checkpoint/` on the dashboard runs before a playtest build. ## Security note A host-mode runner executes whatever a workflow says, directly on the box, as `daddy` (in the `docker` group). Fine for a single-maintainer private repo; revisit if the repo gets outside contributors (switch to a docker-mode runner or an isolated VM).