Some checks failed
Check / eval (push) Failing after 7m59s
check.yml has been permanently red since the runner container was
capped at 2 GB (uncapped, it OOM'd the whole 4 GB VPS). Root cause,
measured with GNU time (eval-cache off): `nix flake check --no-build`
walks every output in ONE evaluator process and peaks at ~6.0 GB RSS
on this repo — the checks.* suite alone is ~15 runNixOSTests, each a
full NixOS eval, all accumulating in one heap.
New tools/ci-eval.sh: identical coverage (all checks.* drvPaths, both
nixosConfigurations toplevels, the HM activationPackage — enumerated
dynamically, no drift), one fresh nix process per output so the heap is
freed between outputs. Cold per-output peaks: worst check 0.99 GB
(hardware-toggles), nomarchy toplevel 0.78 GB, HM 0.60 GB; the one
outlier is nomarchy-live at 2.69 GB (live-ISO eval), which fits the
2 GB cap only via the container's swap allowance (docker's default
--memory-swap is 2x memory). check.yml and bump.yml both call the
script now; bump.yml also gains max-jobs=1/cores=2 (it had no limits,
so its V1 build gate could spawn parallel builders in the capped
container). ROADMAP's stale "no CI today" corrected: bump.yml landed
8fded63 on schedule 2026-07-06.
Verified: V1+ — ci-eval.sh green locally end-to-end (3m22s, tree peak
2.75 GB = nomarchy-live's process); per-output peaks measured
individually. The decisive proof is the next Actions run on the VPS
itself — watch the nomarchy-live step; if it OOMs there, the runner
needs swap allowed: --memory=2g --memory-swap=6g.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
36 lines
1.2 KiB
Bash
Executable File
36 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# CI eval tier — same coverage as `nix flake check --no-build`, bounded
|
|
# memory. One evaluator process walking every output accumulates ~6.0 GB
|
|
# peak RSS on this repo (measured 2026-07-12, eval-cache off): that
|
|
# OOM'd the whole 4 GB VPS behind git.bemagri.xyz, and can never fit the
|
|
# runner's 2 GB container cap. Evaluating ONE output per fresh nix
|
|
# process caps the peak at the largest single output (~0.93 GB,
|
|
# downstream-template-system): the heap is freed when each process
|
|
# exits. Wall time is worse (shared nixpkgs re-eval per process);
|
|
# irrelevant next to the memory cap. Used by .gitea/workflows/check.yml
|
|
# and bump.yml; runs anywhere (`bash tools/ci-eval.sh`).
|
|
set -euo pipefail
|
|
|
|
sys=${1:-x86_64-linux}
|
|
|
|
list() {
|
|
nix eval --raw ".#$1" \
|
|
--apply 'a: builtins.concatStringsSep "\n" (builtins.attrNames a)'
|
|
}
|
|
|
|
evaluate() {
|
|
echo "eval: $1"
|
|
nix eval --raw ".#$1" >/dev/null
|
|
}
|
|
|
|
for a in $(list "checks.$sys"); do
|
|
evaluate "checks.$sys.$a.drvPath"
|
|
done
|
|
for c in $(list nixosConfigurations); do
|
|
evaluate "nixosConfigurations.$c.config.system.build.toplevel.drvPath"
|
|
done
|
|
for h in $(list homeConfigurations); do
|
|
evaluate "homeConfigurations.$h.activationPackage.drvPath"
|
|
done
|
|
echo "ci-eval: all outputs evaluated."
|