9 Commits

Author SHA1 Message Date
Bernardo Magri
2dda8e2bb5 ci: check flake outputs per-output to skip the OOM-heavy package
Some checks failed
Check / eval-and-lint (push) Failing after 3h0m3s
`nix flake check --no-build` also evaluates packages.allThemeVariants, a
linkFarm whose drvPath forces all 22 home generations into memory at once
— the runner OOM-killed there ("Killed" after allThemeVariants). Replace
it with an explicit per-output eval that forces all 4 system closures
(incl. assertions), both standalone home generations, the installer VM
package, the overlay and the app, and skips only allThemeVariants/default.
Each tryEval is GC'd before the next, so peak memory is one config rather
than twenty-two. The eval matrix already validates every palette
one-at-a-time, so dropping that package from CI loses no real coverage.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29 22:51:05 +01:00
Bernardo Magri
6c66db9b88 ci: realize walker src via nix build to prime cold store
Some checks failed
Check / eval-and-lint (push) Failing after 9m24s
Diagnosed the persistent "path '…-source' is not valid": it's walker's
flake reading its own source at eval time — importTOML
resources/config.toml in its home-manager module and lib.fileset.toSource
for the package src. On a cold store the walker input source isn't
materialized, and neither --no-build flake check nor `nix flake archive`
makes the fileset-derived src readable. Replace the archive step with a
`nix build` of walker's src attribute, which eagerly realizes it (and the
input it reads from) so the subsequent flake check / eval matrix find
every path valid.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29 22:27:15 +01:00
Bernardo Magri
ebdd32265b ci: nix flake archive before check to materialize input sources
Some checks failed
Check / eval-and-lint (push) Failing after 1m11s
flake check kept failing on a cold store with "path '…-source' is not
valid" while evaluating Stylix's import-from-derivation in the
home-manager fontconfig text. Nix keeps flake-input sources in a git
cache and only materializes the -source store paths lazily; IFD readFile
needs them as real store paths. Works locally only because prior builds
already materialized them. Add a `nix flake archive` step that copies
every transitive input into the store before the check (and before the
eval matrix, which has the same need).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29 22:13:58 +01:00
Bernardo Magri
7980c2f5ff ci: pin Nix to 2.31.5 to fix lazy-trees IFD failure
Some checks failed
Check / eval-and-lint (push) Failing after 1m5s
flake check kept failing with "path '…-source' is not valid" while
evaluating the home-manager fontconfig text (Stylix/base16.nix do
import-from-derivation). Root cause: the installer pulled the latest Nix
(2.34), whose lazy-trees / git-cache behaviour doesn't materialise
flake-input source paths into the store, so the IFD reads can't find
them. Pin the install to 2.31.5 — the version that wrote flake.lock
locally and evaluates the flake cleanly all session.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29 22:09:17 +01:00
Bernardo Magri
f24d49be08 ci: disable Nix sandbox so Stylix IFD can realize sources
Some checks failed
Check / eval-and-lint (push) Failing after 1m3s
flake check evaluates the home-manager fontconfig text, which via
Stylix/base16.nix does import-from-derivation — eval must realize fetched
`-source` paths. The single-user Nix in the runner container can't set up
the build sandbox (no user namespaces), so realization failed with
"path '…-source' is not valid". Set sandbox = false for the runner
(safe in a throwaway CI container).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29 22:05:12 +01:00
Bernardo Magri
da5e5cf2aa ci: create nixbld build users for root single-user Nix install
Some checks failed
Check / eval-and-lint (push) Failing after 1m13s
Empty group wasn't enough — this Nix version errors with "build users
group 'nixbld' has no members". Create the nixbld group plus 10 build
users (what a multi-user install does) before running the installer.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29 22:01:46 +01:00
Bernardo Magri
b676f43afe ci: fix root single-user Nix install (nixbld group + SSL cert)
Some checks failed
Check / eval-and-lint (push) Failing after 7s
The single-user installer, running as root in the catthehacker container,
aborts because its bundled nix.conf sets build-users-group=nixbld and the
group doesn't exist ("the group 'nixbld' ... does not exist"). Pre-create
an empty nixbld group so config validation passes; single-user builds run
as root and never use it. Also set NIX_SSL_CERT_FILE at the job level
since we add nix to PATH without sourcing the installer profile that would
otherwise export it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29 22:00:03 +01:00
Bernardo Magri
9767a5c5dd ci: install Nix via shell step instead of node24 JS action
Some checks failed
Check / eval-and-lint (push) Failing after 7s
act_runner v0.2.11 bundles an `act` that supports up to node20, but
DeterminateSystems/nix-installer-action@main moved to the node24 runtime,
so the job died with "runs.using ... got node24". Replace the JS action
with a plain single-user Nix install (--no-daemon, no systemd needed in
the catthehacker container) and set NIX_CONFIG at the job level so the
bare `nix flake check` still gets flakes. A run step has no node-runtime
coupling, so this won't break again when an action bumps its runtime.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29 21:56:53 +01:00
Bernardo Magri
1dd0e2f4b9 ci: move workflow to .gitea/workflows so Gitea picks it up
Some checks failed
Check / eval-and-lint (push) Failing after 2s
Gitea only scans .gitea/workflows and .github/workflows; it does not scan
.forgejo/workflows (that path is Forgejo-only). The CI was therefore
dormant on a Gitea instance regardless of whether Actions was enabled.
git mv to .gitea/workflows/ (scanned by both Gitea and Forgejo). Updated
the live references in STRUCTURE.md (Gitea + act_runner), AGENT.md, and
today's ROADMAP entry; left the dated historical Shipped entries as the
changelog they are.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29 21:36:51 +01:00