refactor(ci): auto-discover nixosConfigurations from systems directory
treefmt / nix fmt (pull_request) Successful in 8s
build_systems / generate-matrix (pull_request) Successful in 9s
pytest / pytest (pull_request) Successful in 29s
build_systems / build-${{ matrix.system }} (pull_request) Failing after 4s

Replace the hardcoded list of systems in flake.nix with automatic
discovery of host directories under ./systems, and generate the CI
build matrix dynamically by evaluating nixosConfigurations rather
than maintaining a duplicate list in the workflow.
This commit is contained in:
2026-07-02 14:17:49 -04:00
committed by Richie
parent ddea13b93a
commit ddf4347dc4
2 changed files with 30 additions and 37 deletions
+17 -5
View File
@@ -8,16 +8,28 @@ on:
- cron: "0 22 * * *"
jobs:
matrix:
name: generate-matrix
runs-on: self-hosted
outputs:
systems: ${{ steps.systems.outputs.systems }}
steps:
- uses: actions/checkout@v4
- name: Collect nixosConfigurations
id: systems
run: |
systems="$(nix eval --accept-flake-config --json \
'.#nixosConfigurations' \
--apply 'builtins.attrNames')"
echo "systems=$systems" >> "$GITHUB_OUTPUT"
build:
name: build-${{ matrix.system }}
needs: matrix
runs-on: self-hosted
strategy:
matrix:
system:
- "bob"
- "brain"
- "jeeves"
- "rhapsody-in-green"
system: ${{ fromJSON(needs.matrix.outputs.systems) }}
continue-on-error: true
steps:
- uses: actions/checkout@v4
+11 -30
View File
@@ -95,37 +95,18 @@
}
);
nixosConfigurations = {
bob = lib.nixosSystem {
modules = [
./systems/bob
];
nixosConfigurations =
let
hosts = builtins.attrNames (
lib.filterAttrs (_: type: type == "directory") (builtins.readDir ./systems)
);
mkHost =
name:
lib.nixosSystem {
modules = [ ./systems/${name} ];
specialArgs = { inherit inputs outputs; };
};
brain = lib.nixosSystem {
modules = [
./systems/brain
];
specialArgs = { inherit inputs outputs; };
};
jeeves = lib.nixosSystem {
modules = [
./systems/jeeves
];
specialArgs = { inherit inputs outputs; };
};
rhapsody-in-green = lib.nixosSystem {
modules = [
./systems/rhapsody-in-green
];
specialArgs = { inherit inputs outputs; };
};
iso = lib.nixosSystem {
modules = [
./systems/iso
];
specialArgs = { inherit inputs outputs; };
};
};
in
lib.genAttrs hosts mkHost;
};
}