|
2 | 2 | description = "Nix derivations for PureScript core language tools."; |
3 | 3 |
|
4 | 4 | inputs = { |
5 | | - nixpkgs.url = "github:nixos/nixpkgs/release-23.05"; |
| 5 | + nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; |
6 | 6 |
|
7 | 7 | slimlock.url = "github:thomashoneyman/slimlock"; |
8 | 8 | slimlock.inputs.nixpkgs.follows = "nixpkgs"; |
|
11 | 11 | flake-compat.flake = false; |
12 | 12 | }; |
13 | 13 |
|
14 | | - outputs = { |
15 | | - self, |
16 | | - nixpkgs, |
17 | | - slimlock, |
18 | | - flake-compat, |
19 | | - }: let |
20 | | - inherit (nixpkgs) lib; |
21 | | - eachDefaultSystem = perSystem: |
22 | | - lib.pipe ["x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"] [ |
23 | | - (map (sys: builtins.mapAttrs (_: value: {${sys} = value;}) (perSystem sys))) |
24 | | - (builtins.foldl' nixpkgs.lib.recursiveUpdate {}) |
25 | | - ]; |
26 | | - in |
27 | | - eachDefaultSystem (system: let |
28 | | - pkgs = import nixpkgs { |
29 | | - inherit system; |
30 | | - overlays = [ |
31 | | - self.overlays.default |
32 | | - slimlock.overlays.default |
33 | | - ]; |
34 | | - }; |
35 | | - in { |
36 | | - # A warning-free top-level flake output suitable for running unit tests via |
37 | | - # e.g. `nix eval .#lib`. |
38 | | - lib = pkgs.callPackage ./nix/tests {}; |
39 | | - |
40 | | - packages = |
41 | | - { |
42 | | - inherit (pkgs) purs purs-unstable spago spago-unstable purs-tidy purs-tidy-unstable purs-backend-es purs-backend-es-unstable purescript-language-server purescript-language-server-unstable; |
| 14 | + outputs = |
| 15 | + { |
| 16 | + self, |
| 17 | + nixpkgs, |
| 18 | + slimlock, |
| 19 | + ... |
| 20 | + }: |
| 21 | + let |
| 22 | + inherit (nixpkgs) lib; |
| 23 | + eachDefaultSystem = |
| 24 | + perSystem: |
| 25 | + lib.pipe |
| 26 | + [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ] |
| 27 | + [ |
| 28 | + (map (sys: builtins.mapAttrs (_: value: { ${sys} = value; }) (perSystem sys))) |
| 29 | + (builtins.foldl' nixpkgs.lib.recursiveUpdate { }) |
| 30 | + ]; |
| 31 | + in |
| 32 | + eachDefaultSystem ( |
| 33 | + system: |
| 34 | + let |
| 35 | + pkgs = import nixpkgs { |
| 36 | + inherit system; |
| 37 | + overlays = [ |
| 38 | + self.overlays.default |
| 39 | + slimlock.overlays.default |
| 40 | + ]; |
| 41 | + }; |
| 42 | + in |
| 43 | + { |
| 44 | + # A warning-free top-level flake output suitable for running unit tests via |
| 45 | + # e.g. `nix eval .#lib`. |
| 46 | + lib = pkgs.callPackage ./nix/tests { }; |
| 47 | + |
| 48 | + packages = { |
| 49 | + inherit (pkgs) |
| 50 | + purs |
| 51 | + purs-unstable |
| 52 | + spago |
| 53 | + spago-unstable |
| 54 | + purs-tidy |
| 55 | + purs-tidy-unstable |
| 56 | + purs-backend-es |
| 57 | + purs-backend-es-unstable |
| 58 | + purescript-language-server |
| 59 | + purescript-language-server-unstable |
| 60 | + ; |
43 | 61 | } |
44 | 62 | // pkgs.purs-bin |
45 | 63 | // pkgs.spago-bin |
46 | 64 | // pkgs.purs-tidy-bin |
47 | 65 | // pkgs.purs-backend-es-bin |
48 | 66 | // pkgs.purescript-language-server-bin; |
49 | 67 |
|
50 | | - apps = let |
51 | | - mkApp = bin: { |
52 | | - type = "app"; |
53 | | - program = "${bin}/bin/${bin.pname or bin.name}"; |
54 | | - }; |
55 | | - apps = pkgs.lib.mapAttrs (_: mkApp) self.packages.${system}; |
56 | | - scripts = {generate = mkApp (pkgs.callPackage ./generate {});}; |
57 | | - in |
58 | | - apps // scripts; |
59 | | - |
60 | | - checks = let |
61 | | - package-checks = |
62 | | - lib.mapAttrs (key: bin: let |
63 | | - name = bin.pname or bin.name; |
64 | | - version = bin.version or "0.0.0"; |
| 68 | + apps = |
| 69 | + let |
| 70 | + mkApp = bin: { |
| 71 | + type = "app"; |
| 72 | + program = "${bin}/bin/${bin.pname or bin.name}"; |
| 73 | + meta = bin.meta or { }; |
| 74 | + }; |
| 75 | + apps = pkgs.lib.mapAttrs (_: mkApp) self.packages.${system}; |
| 76 | + scripts = { |
| 77 | + generate = mkApp (pkgs.callPackage ./generate { }); |
| 78 | + }; |
65 | 79 | in |
66 | | - pkgs.runCommand "test-${name}-${version}" {} '' |
67 | | - touch $out |
68 | | - set -e |
69 | | - set -x |
70 | | -
|
71 | | - # Some package versions are not supported on some systems, ie. the |
72 | | - # "stable" version of Spago is not supported on aarch64. |
73 | | - if [ ${builtins.toString (builtins.hasAttr "unsupported" bin)} ]; then |
74 | | - echo "Skipping ${bin.name} because it is not supported on ${system}" |
75 | | - exit 0 |
76 | | - fi |
77 | | -
|
78 | | - # Different packages at different versions use different 'version' |
79 | | - # flags to print their version |
80 | | - if [ ${builtins.toString (name == "spago" && pkgs.lib.versionOlder version "0.90.0")} ]; then |
81 | | - VERSION="$(${lib.getExe bin} version --global-cache skip)" |
82 | | - # spago@0.93.21 incorrectly reports its version |
83 | | - elif [ ${builtins.toString (name == "spago" && version == "0.93.21")} ]; then |
84 | | - VERSION="0.93.21" |
85 | | - else |
86 | | - # spago-next writes --version to stderr, oddly enough, so we need to |
87 | | - # capture both in the VERSION var. |
88 | | - VERSION="$(${lib.getExe bin} --version 2>&1)" |
89 | | - fi |
90 | | -
|
91 | | - # purs-tidy includes a 'v' prefix in its output beginning with version 0.9.0 |
92 | | - if [ ${builtins.toString (name == "purs-tidy" && !(pkgs.lib.versionOlder version "0.9.0"))} ]; then |
93 | | - EXPECTED_VERSION="v${version}" |
94 | | - # purs-backend-es always includes it |
95 | | - elif [ ${builtins.toString (name == "purs-backend-es")} ]; then |
96 | | - EXPECTED_VERSION="v${version}" |
97 | | - else |
98 | | - EXPECTED_VERSION="${version}" |
99 | | - fi |
100 | | -
|
101 | | - echo "$VERSION should match expected output $EXPECTED_VERSION" |
102 | | - test "$VERSION" = "$EXPECTED_VERSION" |
103 | | - '') |
104 | | - # TODO: Remove once the purescript build of spago is stable |
105 | | - (pkgs.lib.filterAttrs (k: v: !(k == "spago" && system == "aarch64-darwin")) self.packages.${system}); |
106 | | - |
107 | | - example-checks = pkgs.callPackages ./nix/examples {}; |
108 | | - |
109 | | - script-checks = { |
110 | | - generate = let |
111 | | - bin = pkgs.callPackage ./generate {}; |
112 | | - manifests = ./manifests; |
| 80 | + apps // scripts; |
| 81 | + |
| 82 | + checks = |
| 83 | + let |
| 84 | + package-checks = |
| 85 | + lib.mapAttrs |
| 86 | + ( |
| 87 | + key: bin: |
| 88 | + let |
| 89 | + name = bin.pname or bin.name; |
| 90 | + version = bin.version or "0.0.0"; |
| 91 | + in |
| 92 | + pkgs.runCommand "test-${name}-${version}" { } '' |
| 93 | + touch $out |
| 94 | + set -e |
| 95 | + set -x |
| 96 | +
|
| 97 | + # Some package versions are not supported on some systems, ie. the |
| 98 | + # "stable" version of Spago is not supported on aarch64. |
| 99 | + if [ ${builtins.toString (builtins.hasAttr "unsupported" bin)} ]; then |
| 100 | + echo "Skipping ${bin.name} because it is not supported on ${system}" |
| 101 | + exit 0 |
| 102 | + fi |
| 103 | +
|
| 104 | + # Different packages at different versions use different 'version' |
| 105 | + # flags to print their version |
| 106 | + if [ ${builtins.toString (name == "spago" && pkgs.lib.versionOlder version "0.90.0")} ]; then |
| 107 | + VERSION="$(${lib.getExe bin} version --global-cache skip)" |
| 108 | + # spago@0.93.21 incorrectly reports its version |
| 109 | + elif [ ${builtins.toString (name == "spago" && version == "0.93.21")} ]; then |
| 110 | + VERSION="0.93.21" |
| 111 | + else |
| 112 | + # spago-next writes --version to stderr, oddly enough, so we need to |
| 113 | + # capture both in the VERSION var. |
| 114 | + VERSION="$(${lib.getExe bin} --version 2>&1)" |
| 115 | + fi |
| 116 | +
|
| 117 | + # purs-tidy includes a 'v' prefix in its output beginning with version 0.9.0 |
| 118 | + if [ ${builtins.toString (name == "purs-tidy" && !(pkgs.lib.versionOlder version "0.9.0"))} ]; then |
| 119 | + EXPECTED_VERSION="v${version}" |
| 120 | + # purs-backend-es always includes it |
| 121 | + elif [ ${builtins.toString (name == "purs-backend-es")} ]; then |
| 122 | + EXPECTED_VERSION="v${version}" |
| 123 | + else |
| 124 | + EXPECTED_VERSION="${version}" |
| 125 | + fi |
| 126 | +
|
| 127 | + echo "$VERSION should match expected output $EXPECTED_VERSION" |
| 128 | + test "$VERSION" = "$EXPECTED_VERSION" |
| 129 | + '' |
| 130 | + ) |
| 131 | + # TODO: Remove once the purescript build of spago is stable |
| 132 | + ( |
| 133 | + pkgs.lib.filterAttrs (k: v: !(k == "spago" && system == "aarch64-darwin")) self.packages.${system} |
| 134 | + ); |
| 135 | + |
| 136 | + example-checks = pkgs.callPackages ./nix/examples { }; |
| 137 | + |
| 138 | + script-checks = { |
| 139 | + generate = |
| 140 | + let |
| 141 | + bin = pkgs.callPackage ./generate { }; |
| 142 | + manifests = ./manifests; |
| 143 | + in |
| 144 | + pkgs.runCommand "test-generate" { } '' |
| 145 | + mkdir -p $out/bin |
| 146 | + set -e |
| 147 | + set -x |
| 148 | + cp ${bin}/bin/${bin.name} $out/bin/test-generate |
| 149 | + ${bin}/bin/${bin.name} verify ${manifests} |
| 150 | + ''; |
| 151 | + }; |
| 152 | + |
| 153 | + format-checks = { |
| 154 | + nix-format = |
| 155 | + pkgs.runCommand "nix-format" |
| 156 | + { |
| 157 | + src = lib.fileset.toSource { |
| 158 | + root = ./.; |
| 159 | + fileset = lib.fileset.fileFilter (f: f.hasExt "nix") ./.; |
| 160 | + }; |
| 161 | + nativeBuildInputs = [ pkgs.nixfmt ]; |
| 162 | + } |
| 163 | + '' |
| 164 | + nixfmt --check $(find $src -type f) && touch $out |
| 165 | + ''; |
| 166 | + }; |
113 | 167 | in |
114 | | - pkgs.runCommand "test-generate" {} '' |
115 | | - mkdir -p $out/bin |
116 | | - set -e |
117 | | - set -x |
118 | | - cp ${bin}/bin/${bin.name} $out/bin/test-generate |
119 | | - ${bin}/bin/${bin.name} verify ${manifests} |
120 | | - ''; |
121 | | - }; |
122 | | - in |
123 | | - package-checks // example-checks // script-checks; |
124 | | - |
125 | | - devShells = { |
126 | | - default = pkgs.mkShell { |
127 | | - name = "purescript-overlay"; |
128 | | - buildInputs = [ |
129 | | - # FIXME: Change when lockfile format stabilizes |
130 | | - self.packages.${system}.spago-0_93_37 |
131 | | - self.packages.${system}.purs-unstable |
132 | | - self.packages.${system}.purs-tidy-unstable |
133 | | - self.packages.${system}.purs-backend-es-unstable |
134 | | - self.packages.${system}.purescript-language-server-unstable |
135 | | - |
136 | | - pkgs.nodejs |
137 | | - pkgs.prefetch-npm-deps |
138 | | - ]; |
| 168 | + package-checks // example-checks // script-checks // format-checks; |
| 169 | + |
| 170 | + devShells = { |
| 171 | + default = pkgs.mkShell { |
| 172 | + name = "purescript-overlay"; |
| 173 | + buildInputs = [ |
| 174 | + # FIXME: Change when lockfile format stabilizes |
| 175 | + self.packages.${system}.spago-0_93_37 |
| 176 | + self.packages.${system}.purs-unstable |
| 177 | + self.packages.${system}.purs-tidy-unstable |
| 178 | + self.packages.${system}.purs-backend-es-unstable |
| 179 | + self.packages.${system}.purescript-language-server-unstable |
| 180 | + |
| 181 | + pkgs.nodejs |
| 182 | + pkgs.prefetch-npm-deps |
| 183 | + pkgs.nixfmt |
| 184 | + ]; |
| 185 | + }; |
139 | 186 | }; |
140 | | - }; |
141 | 187 |
|
142 | | - formatter = pkgs.alejandra; |
143 | | - }) |
| 188 | + formatter = pkgs.alejandra; |
| 189 | + } |
| 190 | + ) |
144 | 191 | // { |
145 | 192 | overlays.default = import ./overlay.nix; |
146 | 193 | }; |
|
0 commit comments