ci: evaluate NixOS in the job, build on the server

The first run failed with "home directory /homeless-shelter exists":
job containers are unprivileged, Nix cannot sandbox builds in them, and
unsandboxed builds trip over each other's leftovers.

Evaluate the system in the job instead, which still catches broken
options before main, and let nixos-rebuild build on the target host,
where the Nix daemon has a proper sandbox.

Assisted-by: Claude:fable-5-2
This commit is contained in:
Sergei Poljanski 2026-11-12 17:05:14 +04:00
commit a3015caae1
Signed by: asxpi
GPG key ID: 4F8851660FA4121B
2 changed files with 10 additions and 7 deletions

View file

@ -1,7 +1,7 @@
name: nixos
# every push: build the system, so a broken config never reaches main
# main: then switch asxpio-services to it
# every push: evaluate the system, so a broken config never reaches main
# main: then build it on asxpio-services and switch to it
#
# Secret: SSH_DEPLOY_KEY (user deploy). Service secrets are decrypted on
# the server by sops-nix, so CI holds none of them.
@ -29,9 +29,12 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Build
# Job containers are unprivileged, so Nix cannot sandbox builds in
# them. Evaluating the system catches config errors; the build
# itself happens on the server during the deploy.
- name: Evaluate
working-directory: nixos
run: nix build .#nixosConfigurations.asxpio-services.config.system.build.toplevel --no-link --print-out-paths
run: nix eval --raw .#nixosConfigurations.asxpio-services.config.system.build.toplevel.drvPath
- name: Set up SSH
if: github.ref == 'refs/heads/main'
@ -58,7 +61,7 @@ jobs:
run: >
nix shell "$NIXPKGS#nixos-rebuild" "$NIXPKGS#openssh" -c
nixos-rebuild switch --flake .#asxpio-services
--target-host asxpio-services --sudo
--target-host asxpio-services --build-host asxpio-services --sudo
- name: Remove credentials
if: always()