From 841c357e2da8a37d3ab9c3e6c2d51e3e614a9a03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jalil=20David=20Salam=C3=A9=20Messina?= Date: Sun, 16 Jun 2024 13:50:55 +0200 Subject: [PATCH] [feat] package: reduce rebuilds Only copy Rust sources to reduce rebuilds if only nix stuff (or CI) changed. --- default.nix | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/default.nix b/default.nix index 4cd4398..a374ee4 100644 --- a/default.nix +++ b/default.nix @@ -6,13 +6,30 @@ cargoToml = readToml ./Cargo.toml; pname = cargoToml.package.name; inherit (cargoToml.package) version description; + src = lib.cleanSourceWith { + src = ./.; + name = "${pname}-source"; + # Adapted from + # no need to pull in crane for just this + filter = orig_path: type: let + path = toString orig_path; + base = baseNameOf path; + parentDir = baseNameOf (dirOf path); + matchesSuffix = lib.any (suffix: lib.hasSuffix suffix base) [ + # Rust sources + ".rs" + # TOML files are often used to configure cargo based tools (e.g. .cargo/config.toml) + ".toml" + ]; + isCargoLock = base == "Cargo.lock"; + # .cargo/config.toml is captured above + isOldStyleCargoConfig = parentDir == ".cargo" && base == "config"; + in + type == "directory" || matchesSuffix || isCargoLock || isOldStyleCargoConfig; + }; in rustPlatform.buildRustPackage { - inherit pname version; - src = builtins.path { - path = ./.; - name = "${pname}-source"; - }; + inherit pname version src; cargoLock.lockFile = ./Cargo.lock; useNextest = true;