aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flake.nix102
-rw-r--r--misc/clangbuildanalyzer.nix3
-rw-r--r--misc/pre-commit.nix99
3 files changed, 117 insertions, 87 deletions
diff --git a/flake.nix b/flake.nix
index 1c090cadf..79ac9caea 100644
--- a/flake.nix
+++ b/flake.nix
@@ -96,6 +96,10 @@
];
forAllSystems = lib.genAttrs systems;
+ # Same as forAllSystems, but removes nulls, in case something is broken
+ # on that system.
+ forAvailableSystems =
+ f: lib.filterAttrs (name: value: value != null && value != { }) (forAllSystems f);
forAllCrossSystems = lib.genAttrs crossSystems;
@@ -282,99 +286,21 @@
);
};
- pre-commit = forAllSystems (
+ pre-commit = forAvailableSystems (
system:
let
pkgs = nixpkgsFor.${system}.native;
- # Import pre-commit bypassing the flake because flakes don't let
- # you have overlays. Also their implementation forces an
- # unnecessary reimport of nixpkgs for our use cases.
- tools = import (pre-commit-hooks + "/nix/call-tools.nix") pkgs;
- pre-commit-run = pkgs.callPackage (pre-commit-hooks + "/nix/run.nix") {
- inherit tools;
- isFlakes = true;
- # unused!
- gitignore-nix-src = builtins.throw "gitignore-nix-src is unused";
- };
+ pre-commit-check = import ./misc/pre-commit.nix { inherit self pkgs pre-commit-hooks; };
+ # dotnet-sdk_6, a nativeBuildInputs of pre-commit, is broken on i686-linux.
+ available = lib.meta.availableOn { inherit system; } pkgs.dotnet-sdk_6;
in
- pre-commit-run {
- src = self;
- hooks = {
- no-commit-to-branch = {
- enable = true;
- settings.branch = [ "main" ];
- };
- check-case-conflicts.enable = true;
- check-executables-have-shebangs = {
- enable = true;
- stages = [ "commit" ];
- };
- check-shebang-scripts-are-executable = {
- enable = true;
- stages = [ "commit" ];
- };
- check-symlinks = {
- enable = true;
- excludes = [ "^tests/functional/lang/symlink-resolution/broken$" ];
- };
- check-merge-conflicts.enable = true;
- end-of-file-fixer = {
- enable = true;
- excludes = [
- "\\.drv$"
- "^tests/functional/lang/"
- ];
- };
- mixed-line-endings = {
- enable = true;
- excludes = [ "^tests/functional/lang/" ];
- };
- release-notes = {
- enable = true;
- package = pkgs.build-release-notes;
- files = "^doc/manual/rl-next(-dev)?";
- pass_filenames = false;
- entry = ''
- ${lib.getExe pkgs.build-release-notes} doc/manual/rl-next doc/manual/rl-next-dev
- '';
- };
- check-headers = {
- enable = true;
- package = pkgs.check-headers;
- files = "^src/";
- types = [
- "c++"
- "file"
- "header"
- ];
- # generated files; these will never actually be seen by this
- # check, and are left here as documentation
- excludes = [
- "(parser|lexer)-tab\\.hh$"
- "\\.gen\\.hh$"
- ];
- entry = lib.getExe pkgs.check-headers;
- };
- # TODO: Once the test suite is nicer, clean up and start
- # enforcing trailing whitespace on tests that don't explicitly
- # check for it.
- trim-trailing-whitespace = {
- enable = true;
- stages = [ "commit" ];
- excludes = [ "^tests/functional/lang/" ];
- };
- treefmt = {
- enable = true;
- settings.formatters = [ pkgs.nixfmt ];
- };
- };
- }
+ lib.optionalAttrs available pre-commit-check
);
};
# NOTE *do not* add fresh derivations to checks, always add them to
# hydraJobs first (so CI will pick them up) and only link them here
- checks = forAllSystems (
+ checks = forAvailableSystems (
system:
{
binaryTarball = self.hydraJobs.binaryTarball.${system};
@@ -382,6 +308,7 @@
nixpkgsLibTests = self.hydraJobs.tests.nixpkgsLibTests.${system};
rl-next = self.hydraJobs.rl-next.${system}.user;
rl-next-dev = self.hydraJobs.rl-next.${system}.dev;
+ # Will be empty attr set on i686-linux, and filtered out by forAvailableSystems.
pre-commit = self.hydraJobs.pre-commit.${system};
}
// (lib.optionalAttrs (builtins.elem system linux64BitSystems)) {
@@ -481,9 +408,10 @@
pkgs.buildPackages.meson
pkgs.buildPackages.ninja
pkgs.buildPackages.cmake
-
- pkgs.buildPackages.clangbuildanalyzer
- ];
+ ]
+ ++
+ lib.optionals (lib.meta.availableOn pkgs.stdenv.hostPlatform pkgs.buildPackages.clangbuildanalyzer)
+ [ pkgs.buildPackages.clangbuildanalyzer ];
src = null;
diff --git a/misc/clangbuildanalyzer.nix b/misc/clangbuildanalyzer.nix
index cee8a0d77..d73fa8bbb 100644
--- a/misc/clangbuildanalyzer.nix
+++ b/misc/clangbuildanalyzer.nix
@@ -25,6 +25,9 @@ stdenv.mkDerivation (finalAttrs: {
maintainers = with lib.maintainers; [ lf- ];
license = lib.licenses.unlicense;
platforms = lib.platforms.unix;
+ # `long long int` != `size_t`
+ # There's no convenient lib.platforms.32bit or anything, but it's easy enough to do ourselves.
+ badPlatforms = lib.filter (plat: (lib.systems.elaborate plat).is32bit) lib.platforms.all;
mainProgram = "ClangBuildAnalyzer";
};
})
diff --git a/misc/pre-commit.nix b/misc/pre-commit.nix
new file mode 100644
index 000000000..b287f3cec
--- /dev/null
+++ b/misc/pre-commit.nix
@@ -0,0 +1,99 @@
+{
+ /**
+ Path to Lix's source, normally the flake's "self" argument
+ */
+ self ? pkgs.lib.cleanSource ./.,
+ /**
+ Already instantiated Nixpkgs
+ */
+ pkgs,
+ /**
+ pre-commit-hooks source path, normally from the flake input
+ */
+ pre-commit-hooks,
+}:
+let
+ inherit (pkgs) lib;
+ # Import pre-commit bypassing the flake because flakes don't let
+ # you have overlays. Also their implementation forces an
+ # unnecessary reimport of nixpkgs for our use cases.
+ tools = import (pre-commit-hooks + "/nix/call-tools.nix") pkgs;
+ pre-commit-run = pkgs.callPackage (pre-commit-hooks + "/nix/run.nix") {
+ inherit tools;
+ isFlakes = true;
+ # unused!
+ gitignore-nix-src = builtins.throw "gitignore-nix-src is unused";
+ };
+in
+pre-commit-run {
+ src = self;
+ hooks = {
+ no-commit-to-branch = {
+ enable = true;
+ settings.branch = [ "main" ];
+ };
+ check-case-conflicts.enable = true;
+ check-executables-have-shebangs = {
+ enable = true;
+ stages = [ "commit" ];
+ };
+ check-shebang-scripts-are-executable = {
+ enable = true;
+ stages = [ "commit" ];
+ };
+ check-symlinks = {
+ enable = true;
+ excludes = [ "^tests/functional/lang/symlink-resolution/broken$" ];
+ };
+ check-merge-conflicts.enable = true;
+ end-of-file-fixer = {
+ enable = true;
+ excludes = [
+ "\\.drv$"
+ "^tests/functional/lang/"
+ ];
+ };
+ mixed-line-endings = {
+ enable = true;
+ excludes = [ "^tests/functional/lang/" ];
+ };
+ release-notes = {
+ enable = true;
+ package = pkgs.build-release-notes;
+ files = "^doc/manual/rl-next(-dev)?";
+ pass_filenames = false;
+ entry = ''
+ ${lib.getExe pkgs.build-release-notes} doc/manual/rl-next doc/manual/rl-next-dev
+ '';
+ };
+ check-headers = {
+ enable = true;
+ package = pkgs.check-headers;
+ files = "^src/";
+ types = [
+ "c++"
+ "file"
+ "header"
+ ];
+ # generated files; these will never actually be seen by this
+ # check, and are left here as documentation
+ excludes = [
+ "(parser|lexer)-tab\\.hh$"
+ "\\.gen\\.hh$"
+ ];
+ entry = lib.getExe pkgs.check-headers;
+ };
+ # TODO: Once the test suite is nicer, clean up and start
+ # enforcing trailing whitespace on tests that don't explicitly
+ # check for it.
+ trim-trailing-whitespace = {
+ enable = true;
+ stages = [ "commit" ];
+ excludes = [ "^tests/functional/lang/" ];
+ };
+ treefmt = {
+ enable = true;
+ settings.formatters = [ pkgs.nixfmt ];
+ };
+ };
+}