mirror of
https://github.com/nix-community/dream2nix.git
synced 2024-12-22 22:11:50 +03:00
formatting: add flake apps + prepare hooks
This commit is contained in:
parent
058bc6cf9b
commit
68478d0772
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,4 +1,6 @@
|
||||
.*/
|
||||
!.github/
|
||||
|
||||
/.pre-commit-config.yaml
|
||||
result
|
||||
interpreter
|
||||
|
80
flake.lock
80
flake.lock
@ -1,5 +1,26 @@
|
||||
{
|
||||
"nodes": {
|
||||
"alejandra": {
|
||||
"inputs": {
|
||||
"flakeCompat": "flakeCompat",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1646360966,
|
||||
"narHash": "sha256-fJ/WHSU45bMJRDqz9yA3B2lwXtW5DKooU+Pzn13GyZI=",
|
||||
"owner": "kamadorueda",
|
||||
"repo": "alejandra",
|
||||
"rev": "511c3f6a88b6964e1496fb6f441f4ae5e58bd3ea",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "kamadorueda",
|
||||
"repo": "alejandra",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"crane": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
@ -16,6 +37,37 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils-pre-commit": {
|
||||
"locked": {
|
||||
"lastModified": 1644229661,
|
||||
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flakeCompat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1641205782,
|
||||
"narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"gomod2nix": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
@ -95,14 +147,40 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pre-commit-hooks": {
|
||||
"inputs": {
|
||||
"flake-utils": [
|
||||
"flake-utils-pre-commit"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1646153636,
|
||||
"narHash": "sha256-AlWHMzK+xJ1mG267FdT8dCq/HvLCA6jwmx2ZUy5O8tY=",
|
||||
"owner": "cachix",
|
||||
"repo": "pre-commit-hooks.nix",
|
||||
"rev": "b6bc0b21e1617e2b07d8205e7fae7224036dfa4b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"repo": "pre-commit-hooks.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"alejandra": "alejandra",
|
||||
"crane": "crane",
|
||||
"flake-utils-pre-commit": "flake-utils-pre-commit",
|
||||
"gomod2nix": "gomod2nix",
|
||||
"mach-nix": "mach-nix",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"node2nix": "node2nix",
|
||||
"poetry2nix": "poetry2nix"
|
||||
"poetry2nix": "poetry2nix",
|
||||
"pre-commit-hooks": "pre-commit-hooks"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
149
flake.nix
149
flake.nix
@ -4,6 +4,18 @@
|
||||
inputs = {
|
||||
nixpkgs.url = "nixpkgs/nixos-unstable";
|
||||
|
||||
### dev dependencies
|
||||
alejandra.url = github:kamadorueda/alejandra;
|
||||
alejandra.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix";
|
||||
pre-commit-hooks.inputs.nixpkgs.follows = "nixpkgs";
|
||||
# upstream flake-utils dep not supporting `aarch64-darwin` yet
|
||||
flake-utils-pre-commit.url = "github:numtide/flake-utils";
|
||||
pre-commit-hooks.inputs.flake-utils.follows = "flake-utils-pre-commit";
|
||||
|
||||
|
||||
### framework dependencies
|
||||
# required for builder go/gomod2nix
|
||||
gomod2nix = { url = "github:tweag/gomod2nix"; flake = false; };
|
||||
|
||||
@ -22,16 +34,20 @@
|
||||
|
||||
outputs = {
|
||||
self,
|
||||
alejandra,
|
||||
gomod2nix,
|
||||
mach-nix,
|
||||
nixpkgs,
|
||||
node2nix,
|
||||
poetry2nix,
|
||||
pre-commit-hooks,
|
||||
crane,
|
||||
...
|
||||
}@inp:
|
||||
let
|
||||
|
||||
b = builtins;
|
||||
l = lib // builtins;
|
||||
|
||||
lib = nixpkgs.lib;
|
||||
|
||||
@ -40,9 +56,10 @@
|
||||
|
||||
supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
||||
|
||||
forAllSystems = f: lib.genAttrs supportedSystems (system:
|
||||
f system nixpkgs.legacyPackages.${system}
|
||||
);
|
||||
forSystems = systems: f: lib.genAttrs systems
|
||||
(system: f system nixpkgs.legacyPackages.${system});
|
||||
|
||||
forAllSystems = forSystems supportedSystems;
|
||||
|
||||
# To use dream2nix in non-flake + non-IFD enabled repos, the source code of dream2nix
|
||||
# must be installed into these repos (using nix run dream2nix#install).
|
||||
@ -111,6 +128,24 @@
|
||||
};
|
||||
});
|
||||
|
||||
pre-commit-check = forAllSystems (system: pkgs:
|
||||
pre-commit-hooks.lib.${system}.run {
|
||||
src = ./.;
|
||||
hooks = {
|
||||
treefmt = {
|
||||
enable = true;
|
||||
name = "treefmt";
|
||||
pass_filenames = true;
|
||||
entry = l.toString (pkgs.writeScript "treefmt" ''
|
||||
#!${pkgs.bash}/bin/bash
|
||||
export PATH="$PATH:${alejandra.defaultPackage.${system}}/bin"
|
||||
${pkgs.treefmt}/bin/treefmt --fail-on-change "$@"
|
||||
'');
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
in
|
||||
{
|
||||
# System independent dream2nix api.
|
||||
@ -139,11 +174,41 @@
|
||||
tests-impure.type = "app";
|
||||
tests-impure.program = b.toString
|
||||
(dream2nixFor."${system}".callPackageDream ./tests/impure {});
|
||||
|
||||
tests-unit.type = "app";
|
||||
tests-unit.program = b.toString
|
||||
(dream2nixFor."${system}".callPackageDream ./tests/unit {
|
||||
inherit self;
|
||||
});
|
||||
|
||||
tests-all.type = "app";
|
||||
tests-all.program = l.toString
|
||||
(dream2nixFor.${system}.utils.writePureShellScript
|
||||
[
|
||||
alejandra.defaultPackage.${system}
|
||||
pkgs.coreutils
|
||||
pkgs.gitMinimal
|
||||
pkgs.nix
|
||||
]
|
||||
''
|
||||
echo "running unit tests"
|
||||
${self.apps.${system}.tests-unit.program}
|
||||
|
||||
echo "running impure CLI tests"
|
||||
${self.apps.${system}.tests-impure.program}
|
||||
|
||||
echo "running nix flake check"
|
||||
cd $WORKDIR
|
||||
nix flake check
|
||||
'');
|
||||
|
||||
# passes through extra flags to treefmt
|
||||
format.type = "app";
|
||||
format.program = l.toString
|
||||
(pkgs.writeScript "format" ''
|
||||
export PATH="${alejandra.defaultPackage.${system}}/bin"
|
||||
${pkgs.treefmt}/bin/treefmt "$@"
|
||||
'');
|
||||
}
|
||||
);
|
||||
|
||||
@ -151,37 +216,67 @@
|
||||
# use via 'nix develop . -c $SHELL'
|
||||
devShell = forAllSystems (system: pkgs: pkgs.mkShell {
|
||||
|
||||
buildInputs = with pkgs;
|
||||
buildInputs =
|
||||
(with pkgs; [
|
||||
nixUnstable
|
||||
nix
|
||||
treefmt
|
||||
])
|
||||
++ [
|
||||
alejandra.defaultPackage."${system}"
|
||||
]
|
||||
# using linux is highly recommended as cntr is amazing for debugging builds
|
||||
++ lib.optionals stdenv.isLinux [ cntr ];
|
||||
++ lib.optionals pkgs.stdenv.isLinux [ pkgs.cntr ];
|
||||
|
||||
shellHook = ''
|
||||
export NIX_PATH=nixpkgs=${nixpkgs}
|
||||
export d2nExternalDir=${externalDirFor."${system}"}
|
||||
export dream2nixWithExternals=${dream2nixFor."${system}".dream2nixWithExternals}
|
||||
shellHook =
|
||||
# TODO: enable this once code base is formatted
|
||||
# self.checks.${system}.pre-commit-check.shellHook
|
||||
''
|
||||
export NIX_PATH=nixpkgs=${nixpkgs}
|
||||
export d2nExternalDir=${externalDirFor."${system}"}
|
||||
export dream2nixWithExternals=${dream2nixFor."${system}".dream2nixWithExternals}
|
||||
|
||||
if [ -e ./overrides ]; then
|
||||
export d2nOverridesDir=$(realpath ./overrides)
|
||||
else
|
||||
export d2nOverridesDir=${./overrides}
|
||||
echo -e "\nManually execute 'export d2nOverridesDir={path to your dream2nix overrides dir}'"
|
||||
fi
|
||||
if [ -e ./overrides ]; then
|
||||
export d2nOverridesDir=$(realpath ./overrides)
|
||||
else
|
||||
export d2nOverridesDir=${./overrides}
|
||||
echo -e "\nManually execute 'export d2nOverridesDir={path to your dream2nix overrides dir}'"
|
||||
fi
|
||||
|
||||
if [ -e ../dream2nix ]; then
|
||||
export dream2nixWithExternals=$(realpath ./src)
|
||||
else
|
||||
export dream2nixWithExternals=${./src}
|
||||
echo -e "\nManually execute 'export dream2nixWithExternals={path to your dream2nix checkout}'"
|
||||
fi
|
||||
'';
|
||||
if [ -e ../dream2nix ]; then
|
||||
export dream2nixWithExternals=$(realpath ./src)
|
||||
else
|
||||
export dream2nixWithExternals=${./src}
|
||||
echo -e "\nManually execute 'export dream2nixWithExternals={path to your dream2nix checkout}'"
|
||||
fi
|
||||
'';
|
||||
});
|
||||
|
||||
checks = forAllSystems (system: pkgs: import ./tests/pure {
|
||||
inherit lib pkgs;
|
||||
dream2nix = dream2nixFor."${system}";
|
||||
});
|
||||
checks = l.recursiveUpdate
|
||||
(forAllSystems (system: pkgs:
|
||||
(import ./tests/pure {
|
||||
inherit lib pkgs;
|
||||
dream2nix = dream2nixFor."${system}";
|
||||
})))
|
||||
{}
|
||||
# TODO: enable this once code base is formatted
|
||||
# (forAllSystems (system: pkgs:{
|
||||
# pre-commit-check =
|
||||
# pre-commit-hooks.lib.${system}.run {
|
||||
# src = ./.;
|
||||
# hooks = {
|
||||
# treefmt = {
|
||||
# enable = true;
|
||||
# name = "treefmt";
|
||||
# pass_filenames = false;
|
||||
# entry = l.toString (pkgs.writeScript "treefmt" ''
|
||||
# #!${pkgs.bash}/bin/bash
|
||||
# export PATH="$PATH:${alejandra.defaultPackage.${system}}/bin"
|
||||
# ${pkgs.treefmt}/bin/treefmt --fail-on-change
|
||||
# '');
|
||||
# };
|
||||
# };
|
||||
# };
|
||||
# }))
|
||||
;
|
||||
};
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ let
|
||||
]
|
||||
''
|
||||
S=$(mktemp)
|
||||
async -s=$S server --start -j4
|
||||
async -s=$S server --start -j$(nproc)
|
||||
|
||||
for test in ${toString allTests}; do
|
||||
async -s=$S cmd -- $test
|
||||
|
4
treefmt.toml
Normal file
4
treefmt.toml
Normal file
@ -0,0 +1,4 @@
|
||||
[formatter.nix]
|
||||
command = "alejandra"
|
||||
includes = ["*.nix"]
|
||||
excludes = ["overrides/nodejs/electron/*"]
|
Loading…
Reference in New Issue
Block a user