This repository has no description
8.0 kB
253 lines
1{
2 description = "inline_ipld";
3
4 inputs = {
5 nixpkgs.url = "nixpkgs/nixos-24.11";
6 nixos-unstable.url = "nixpkgs/nixos-unstable-small";
7
8 command-utils.url = "github:expede/nix-command-utils";
9 flake-utils.url = "github:numtide/flake-utils";
10
11 rust-overlay = {
12 url = "github:oxalica/rust-overlay";
13 inputs.nixpkgs.follows = "nixpkgs";
14 inputs.flake-utils.follows = "flake-utils";
15 };
16 };
17
18 outputs = {
19 self,
20 nixpkgs,
21 nixos-unstable,
22 command-utils,
23 flake-utils,
24 rust-overlay,
25 } @ inputs:
26 flake-utils.lib.eachDefaultSystem (system:
27 let
28 pkgs = import nixpkgs {
29 inherit system;
30 overlays = [
31 (import rust-overlay)
32 ];
33 };
34
35 unstable = import nixos-unstable {
36 inherit system;
37 };
38
39 rust-toolchain =
40 (pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml).override {
41 extensions = [
42 "cargo"
43 "clippy"
44 "llvm-tools-preview"
45 "rust-src"
46 "rust-std"
47 "rustfmt"
48 ];
49
50 targets = [
51 "wasm32-unknown-unknown"
52 ];
53 };
54
55 nightly-rustfmt = pkgs.rust-bin.nightly.latest.rustfmt;
56
57 format-pkgs = [
58 pkgs.nixpkgs-fmt
59 pkgs.alejandra
60 ];
61
62 darwin-installs = [
63 pkgs.darwin.apple_sdk.frameworks.Security
64 pkgs.darwin.apple_sdk.frameworks.CoreFoundation
65 pkgs.darwin.apple_sdk.frameworks.Foundation
66 ];
67
68 cargo-installs = [
69 pkgs.cargo-bootimage
70 unstable.cargo-component
71 pkgs.cargo-criterion
72 pkgs.cargo-deny
73 pkgs.cargo-expand
74 pkgs.cargo-outdated
75 pkgs.cargo-sort
76 pkgs.cargo-udeps
77 pkgs.cargo-watch
78 pkgs.llvmPackages.bintools
79 pkgs.twiggy
80 pkgs.wasm-tools
81 ];
82
83 cargo = "${pkgs.cargo}/bin/cargo";
84 node = "${unstable.nodejs_20}/bin/node";
85 wasm-pack = "${pkgs.wasm-pack}/bin/wasm-pack";
86 wasm-opt = "${pkgs.binaryen}/bin/wasm-opt";
87
88 cmd = command-utils.cmd.${system};
89
90 release = {
91 "release:host" = cmd "Build release for ${system}"
92 "${cargo} build --release";
93
94 "release:wasm:web" = cmd "Build release for wasm32-unknown-unknown with web bindings"
95 "${wasm-pack} build --release --target=web";
96
97 "release:wasm:nodejs" = cmd "Build release for wasm32-unknown-unknown with Node.js bindgings"
98 "${wasm-pack} build --release --target=nodejs";
99 };
100
101 build = {
102 "build:host" = cmd "Build for ${system}"
103 "${cargo} build";
104
105 "build:wasm:web" = cmd "Build for wasm32-unknown-unknown with web bindings"
106 "${wasm-pack} build --dev --target=web";
107
108 "build:wasm:nodejs" = cmd "Build for wasm32-unknown-unknown with Node.js bindgings"
109 "${wasm-pack} build --dev --target=nodejs";
110
111 "build:node" = cmd "Build JS-wrapped Wasm library"
112 "${pkgs.nodePackages.pnpm}/bin/pnpm install && ${node} run build";
113
114 "build:wasi" = cmd "Build for Wasm32-WASI"
115 "${cargo} build --target wasm32-wasi";
116 };
117
118 bench = {
119 "bench" = cmd "Run benchmarks, including test utils"
120 "${cargo} bench --features test_utils";
121
122 # FIXME align with `bench`?
123 "bench:host" = cmd "Run host Criterion benchmarks"
124 "${cargo} criterion";
125
126 "bench:host:open" = cmd "Open host Criterion benchmarks in browser"
127 "${pkgs.xdg-utils}/bin/xdg-open ./target/criterion/report/index.html";
128 };
129
130 lint = {
131 "lint" = cmd "Run Clippy"
132 "${cargo} clippy";
133
134 "lint:pedantic" = cmd "Run Clippy pedantically"
135 "${cargo} clippy -- -W clippy::pedantic";
136
137 "lint:fix" = cmd "Apply non-pendantic Clippy suggestions"
138 "${cargo} clippy --fix";
139 };
140
141 watch = {
142 "watch:build:host" = cmd "Rebuild host target on save"
143 "${cargo} watch --clear";
144
145 "watch:build:wasm" = cmd "Rebuild Wasm target on save"
146 "${cargo} watch --clear --features=serde -- cargo build --target=wasm32-unknown-unknown";
147
148 "watch:lint" = cmd "Lint on save"
149 "${cargo} watch --clear --exec clippy";
150
151 "watch:lint:pedantic" = cmd "Pedantic lint on save"
152 "${cargo} watch --clear --exec 'clippy -- -W clippy::pedantic'";
153
154 "watch:test:host" = cmd "Run all host tests on save"
155 "${cargo} watch --clear --exec 'test --all-features'";
156
157 "watch:test:docs" = cmd "Run all host tests on save"
158 "${cargo} watch --clear --exec 'test --doc --all-features'";
159
160 "watch:test:wasm" = cmd "Run all Wasm tests on save"
161 "${cargo} watch --clear --exec 'test --all-features --target=wasm32-unknown-unknown'";
162 };
163
164 test = {
165 "test:all" = cmd "Run Cargo tests"
166 "test:host && test:docs && test:wasm";
167
168 "test:host" = cmd "Run Cargo tests for host target"
169 "${cargo} test --features=test_utils";
170
171 "test:wasm" = cmd "Run wasm-pack tests on all targets"
172 "test:wasm:node && test:wasm:chrome";
173
174 "test:wasm:node" = cmd "Run wasm-pack tests in Node.js"
175 "${wasm-pack} test --node";
176
177 "test:wasm:chrome" = cmd "Run wasm-pack tests in headless Chrome"
178 "${wasm-pack} test --headless --chrome";
179
180 "test:docs" = cmd "Run Cargo doctests"
181 "${cargo} test --doc --features=test_utils";
182 };
183
184 docs = {
185 "docs:build:host" = cmd "Refresh the docs"
186 "${cargo} doc";
187
188 "docs:build:wasm" = cmd "Refresh the docs with the wasm32-unknown-unknown target"
189 "${cargo} doc --target=wasm32-unknown-unknown";
190
191 "docs:open:host" = cmd "Open refreshed docs"
192 "${cargo} doc --open";
193
194 "docs:open:wasm" = cmd "Open refreshed docs"
195 "${cargo} doc --open --target=wasm32-unknown-unknown";
196 };
197
198 command_menu = command-utils.commands.${system}
199 (release // build // bench // lint // watch // test // docs);
200
201 in rec {
202 devShells.default = pkgs.mkShell {
203 name = "inline_ipld";
204
205 nativeBuildInputs = [
206 rust-toolchain
207 self.packages.${system}.irust
208 (pkgs.hiPrio pkgs.rust-bin.nightly.latest.rustfmt)
209
210 pkgs.binaryen
211 pkgs.wasm-pack
212 pkgs.protobuf
213
214 pkgs.chromedriver
215 pkgs.nodejs_20
216 pkgs.nodePackages.pnpm
217
218 command_menu
219 ]
220 ++ format-pkgs
221 ++ cargo-installs
222 ++ pkgs.lib.optionals pkgs.stdenv.isDarwin darwin-installs;
223
224 shellHook = ''
225 export RUSTC_WRAPPER="${pkgs.sccache}/bin/sccache"
226 unset SOURCE_DATE_EPOCH
227 menu
228 ''
229 + pkgs.lib.strings.optionalString pkgs.stdenv.isDarwin ''
230 # See https://github.com/nextest-rs/nextest/issues/267
231 export DYLD_FALLBACK_LIBRARY_PATH="$(rustc --print sysroot)/lib"
232 export NIX_LDFLAGS="-F${pkgs.darwin.apple_sdk.frameworks.CoreFoundation}/Library/Frameworks -framework CoreFoundation $NIX_LDFLAGS";
233 '';
234 };
235
236 formatter = pkgs.alejandra;
237
238 packages.irust = pkgs.rustPlatform.buildRustPackage rec {
239 pname = "irust";
240 version = "1.71.19";
241 src = pkgs.fetchFromGitHub {
242 owner = "sigmaSd";
243 repo = "IRust";
244 rev = "irust@${version}";
245 sha256 = "sha256-R3EAovCI5xDCQ5R69nMeE6v0cGVcY00O3kV8qHf0akc=";
246 };
247
248 doCheck = false;
249 cargoSha256 = "sha256-2aVCNz/Lw7364B5dgGaloVPcQHm2E+b/BOxF6Qlc8Hs=";
250 };
251 }
252 );
253}