diff --git a/.github/workflows/nix-changes.yml b/.github/workflows/nix-changes.yml index a56cea0936c4..6baf34afe3e0 100644 --- a/.github/workflows/nix-changes.yml +++ b/.github/workflows/nix-changes.yml @@ -111,9 +111,10 @@ jobs: - uses: cachix/install-nix-action@13d8dd58da0234aa297dedd986986ccb8e7f3e24 # v31.11.1 - name: Lint Nix files run: | - nix-shell -I nixpkgs=./tools/nix/pkgs.nix -p 'nixfmt-tree' --run ' - treefmt --quiet --ci - ' && EXIT_CODE="$?" || EXIT_CODE="$?" + NIX_LINTER=$(nix-instantiate --eval --raw -E '(import ./shell.nix {}).NIX_LINTER') + # Attempt to get it from cache, and fallback to building `devTools.nix` otherwise. + nix-store --realise "${NIX_LINTER%/bin/*}" || nix-build -I nixpkgs=tools/nix/pkgs.nix ./tools/nix/devTools.nix --no-out-link + "$NIX_LINTER" --quiet --ci && EXIT_CODE="$?" || EXIT_CODE="$?" if [ "$EXIT_CODE" != "0" ] then git --no-pager diff || true diff --git a/shell.nix b/shell.nix index 1829c1efd21b..6f50142046e9 100644 --- a/shell.nix +++ b/shell.nix @@ -167,6 +167,14 @@ pkgs.mkShell { YAMLLINT = pkgs.lib.getExe yamllint; } ) + // ( + let + treefmt = pkgs.lib.lists.findFirst (p: p.meta.mainProgram == "treefmt") null devTools; + in + pkgs.lib.optionalAttrs (treefmt != null) { + NIX_LINTER = pkgs.lib.getExe treefmt; + } + ) // pkgs.lib.optionalAttrs (!withSQLite) { NOSQLITE = "1"; } diff --git a/tools/nix/devTools.nix b/tools/nix/devTools.nix index e33ae720785c..2fd96b279662 100644 --- a/tools/nix/devTools.nix +++ b/tools/nix/devTools.nix @@ -7,6 +7,7 @@ pkgs.gh pkgs.git pkgs.jq + pkgs.nixfmt-tree pkgs.ruff pkgs.shellcheck pkgs.yamllint diff --git a/tools/nix/list-requisites.sh b/tools/nix/list-requisites.sh index 92aa91794326..a66a89eb7def 100755 --- a/tools/nix/list-requisites.sh +++ b/tools/nix/list-requisites.sh @@ -45,7 +45,7 @@ DRV=$( ++ builtins.attrValues ( { # Additional packages we are using across the codebase - inherit (pkgs) nixfmt-tree sccache; + inherit (pkgs) sccache; } // import ./tools/nix/openssl-matrix.nix { } // sharedLibDepsFn (