Repository navigation
ci: run nix-config CI on THEBATTLESHIP's own runners - #85
Merged
Merged
Conversation
Hosted runners start with an empty store and ran out of disk on PR #83's `nix flake check`. Add a `github-nix-config` pool (3 instances, label `nix-config`) on THEBATTLESHIP, registered through the fts-forge App on Codys-Wright, and move check, build-vm, build THEBATTLESHIP and nixidy to it, dropping the nothing-but-nix, installer, magic-nix-cache and cachix steps there. voyager stays on macos-latest. The repo is public: the jobs skip fork PRs, and a job-started gate on the runners refuses anything but a push to main, workflow_dispatch or a same-repo PR. The instances run as their own user, nix-config-ci, which cannot read the forge App key. The nix-secrets token goes in a per-job gitconfig ($RUNNER_TEMP) instead of the runner's HOME. Refs STA-621. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
k8s/ and the nixidy input went in 2d876de (cluster manifests render in starcommand now), so `nix run .#nixidy` has no attribute to run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nixpkgs' 6.18.59 moved the i915 quirk table, so nixos-hardware's 2008-i915-4-lane-quirk-for-mbp15-1 no longer applies and nomad's and stowaway's kernel (and `nix flake check`) fail to build. Take the copy t2linux rebased on its 6.18 branch (166c92f, "6.18.55") alongside the existing 3001/4001-4004 replacements; each replacement now pins its own rev. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fts-forge Bot
added a commit
that referenced
this pull request
Nov 2, 2026
…#89) ## What A new aspect, `fleet.ai/ollaya` (`modules/ai/ollaya.nix`), included on THEBATTLESHIP. It serves the open Laya decision model through Ollaya, using TypeSafe Jev's API: `POST http://127.0.0.1:11435/v1/systemone`. The Paperclip router (STA-631) will call it. - It uses nixpkgs' own `services.ollaya` and `pkgs.ollaya` 0.17.0, which come from cache.nixos.org, so nothing is built from source. - It listens on `127.0.0.1` only and opens no firewall port. - `OLLAYA_DEVICE=cpu`, so it never touches the GPU. `OLLAYA_THREADS=8` leaves the other cores for builds. `OLLAYA_KEEP_ALIVE=-1` keeps the model loaded, because a cold load takes about 5 s and the TypeSafe SDK times out after 10 s. - Ollaya never pulls a model on request. `ollaya-model-loader.service` pulls `laya:en` (814 MB) into `/var/lib/ollaya/models` after the daemon starts. - Per-host settings: `settings.ai.ollaya.models` and `settings.ai.ollaya.threads`. ## Verified - `nix build .#nixosConfigurations.THEBATTLESHIP.config.system.build.toplevel` exits 0. The service environment and loader script evaluate as described above, and 11435 is not in `allowedTCPPorts`. - I ran the same `ollaya` store path in userspace as `agent`, on port 11439: `ollaya pull laya:en`, then a sample "which agent?" question with 3 options sent to `/v1/systemone`. It returned HTTP 200 and `DevOps` with p=0.8164 (Librarian 0.0732, Atlas 0.1105). - That run's cgroup had 4 CPUs at nice 10, with host load between 17 and 38, so 1.4 to 2.0 s per warm request is a starved number (cold: 4.75 s). The service gets its own cgroup and gets measured after the switch. - The runner's RSS was 3.2 GB, not the advertised 1 GB: on a CPU it loads the fp32 graph. ## Deploy note This repo's `main` doesn't match what is running on THEBATTLESHIP. Generation 1074 was switched from open PR #87 (devenv/direnv), and #85's `github-nix-config` runners were never activated. Switching from this branch alone would also add those 3 runners and remove devenv, cachix and libghostty-vt. The live switch waits for the Captain's approval (STA-630). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: fts-forge[bot] <345159799+fts-forge[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
STA-621. The Captain asked on STA-618 for "a selfhosted runner for nix-config ... so that it was as fast as running it locally".
Why
The
ubuntu-latestrunners start with an empty/nix/store, so every run rebuilds or downloads the whole closure. PR #83'snix flake checkfailed with ENOSPC on a hosted runner.Changes
hosts/THEBATTLESHIP/github-runners.nixadds agithub-nix-configpool:nix-config, registered through the fts-forge App onCodys-Wright(the same way asgithub-starcommand).nix-config-ci, which can't read the forge App private key held by the FTS runners'github-runneruser. The unit also makes the key inaccessible./run/media/Development/github-runner-work-nix-config/.nixConfigJobGateruns before every job (ACTIONS_RUNNER_HOOK_JOB_STARTED). The repo is public, so it only allows a push tomain,workflow_dispatch, or apull_requestwhose head repo isCodys-Wright/nix-config. It refuses fork PRs,pull_request_target, other events and other repos, and it refuses when the payload is unreadable.ci.yml:check,build-vm,build THEBATTLESHIPandnixidynow useruns-on: [self-hosted, nix-config], with anif:that skips fork PRs.GIT_CONFIG_GLOBAL=$RUNNER_TEMP/gitconfig), not in the runner's long-lived HOME.workflow_dispatch, and PR-scopedconcurrencyso a newer push cancels the older run.macos-latest.Verified locally on THEBATTLESHIP
nix build .#nixosConfigurations.THEBATTLESHIP.config.system.build.toplevelexits 0 (/nix/store/c8abrgy2…-nixos-system-THEBATTLESHIP). The generatedgithub-runner-github-nix-config-{1..3}units haveUser=nix-config-ci, the gate hook, the work dir inBindPaths, and the key inInaccessiblePaths.pull_request_target, bad payload, other repo, no payload.GIT_CONFIG_GLOBALinsteadOf. I checked that a rewrite toexample.invalidis the URL nix tries.Deploy order
This PR's Linux jobs wait in the queue until the runners exist, so THEBATTLESHIP has to be switched to this branch first (the Captain's gate). The jobs then run here and the PR can merge.
Notes
fleet.cachix.org. The host's own store is the cache now.main, which removes the units. GitHub then shows the runners as offline.🤖 Generated with Claude Code