name: CI on: push: pull_request: # nix flake check evaluates every host in one process (~19 GB peak), more than # the 16 GB RAM of ubuntu-latest. One job per check keeps the peak at the # largest single host and shows failing hosts in the run overview. jobs: list: runs-on: ubuntu-latest outputs: checks: ${{ steps.list.outputs.checks }} steps: - uses: actions/checkout@v4 with: # Fetch all history for git-based operations fetch-depth: 0 - uses: cachix/install-nix-action@v31 - id: list run: | checks=$(nix eval --json .#checks.x86_64-linux --apply builtins.attrNames) echo "checks=$checks" >> "$GITHUB_OUTPUT" check: needs: list name: ${{ matrix.check }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: check: ${{ fromJSON(needs.list.outputs.checks) }} steps: - uses: actions/checkout@v4 with: # Fetch all history for git-based operations fetch-depth: 0 - uses: cachix/install-nix-action@v31 - run: nix build -L --no-link '.#checks.x86_64-linux.${{ matrix.check }}' outputs: name: packages and devShells runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: # Fetch all history for git-based operations fetch-depth: 0 - uses: cachix/install-nix-action@v31 - run: | for output in packages devShells; do echo "$output:" # shellcheck disable=SC2016 # ${...} is Nix interpolation nix eval --raw ".#$output.x86_64-linux" --apply 'xs: builtins.deepSeq (builtins.mapAttrs (_: x: x.drvPath) xs) "${toString (builtins.length (builtins.attrNames xs))} evaluated\n"' done