diff --git a/flake.lock b/flake.lock index daa2c07..766bc25 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,64 @@ { "nodes": { + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "NixOS", + "repo": "flake-compat", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "flake-compat", + "type": "github" + } + }, + "git-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1770726378, + "narHash": "sha256-kck+vIbGOaM/dHea7aTBxdFYpeUl/jHOy5W3eyRvVx8=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "5eaaedde414f6eb1aea8b8525c466dc37bba95ae", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1770841267, @@ -64,6 +123,7 @@ }, "root": { "inputs": { + "git-hooks": "git-hooks", "nixpkgs": "nixpkgs", "pyproject-build-systems": "pyproject-build-systems", "pyproject-nix": "pyproject-nix", diff --git a/flake.nix b/flake.nix index 1c9b15f..d4b9400 100644 --- a/flake.nix +++ b/flake.nix @@ -21,6 +21,11 @@ inputs.uv2nix.follows = "uv2nix"; inputs.nixpkgs.follows = "nixpkgs"; }; + + git-hooks = { + url = "github:cachix/git-hooks.nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = @@ -30,6 +35,7 @@ pyproject-nix, uv2nix, pyproject-build-systems, + git-hooks, ... }: let @@ -97,6 +103,35 @@ ) ); + mkGitHooksCheck = + system: + let + pkgs = nixpkgs.legacyPackages.${system}; + pythonSet = pythonSets.${system}; + venv = pythonSet.mkVirtualEnv "bulkgen-check-env" workspace.deps.default; + in + git-hooks.lib.${system}.run { + src = ./.; + hooks = { + basedpyright = { + enable = true; + entry = "${pkgs.basedpyright}/bin/basedpyright --pythonpath ${venv}/bin/python --project ${ + pkgs.writeText "pyrightconfig.json" ( + builtins.toJSON { + reportMissingTypeStubs = false; + reportUnnecessaryTypeIgnoreComment = false; + } + ) + }"; + files = "\\.py$"; + types = [ "file" ]; + }; + ruff.enable = true; + ruff-format.enable = true; + commitizen.enable = true; + }; + }; + in { packages = forAllSystems ( @@ -127,6 +162,7 @@ in { inherit (pythonSet.bulkgen.passthru.tests) pytest; + pre-commit = mkGitHooksCheck system; } ); @@ -151,6 +187,7 @@ shellHook = '' unset PYTHONPATH export REPO_ROOT=$(git rev-parse --show-toplevel) + ${(mkGitHooksCheck system).shellHook} ''; }; }