From 6ee5ab066a4a9cb3a2f13f9310865ca2c172241c Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Sun, 2 Feb 2025 19:52:41 +0100 Subject: [PATCH] nix: fix tests and reorganize flake outputs --- default.nix | 54 ++++++++++++++++--------------------------------- flake.nix | 41 ++++++++++++++++++------------------- nix/common.nix | 10 ++++----- nix/compile.nix | 19 +++++++++++------ shell.nix | 2 +- 5 files changed, 56 insertions(+), 70 deletions(-) diff --git a/default.nix b/default.nix index 8ddc0af8..9d8508d9 100644 --- a/default.nix +++ b/default.nix @@ -1,48 +1,28 @@ -{ system ? builtins.currentSystem, git_version ? null, }: +{ system ? builtins.currentSystem, git_version ? "unknown", }: with import ./nix/common.nix; let - pkgs = import pkgsSrc { }; + pkgs = import nixpkgs { }; compile = import ./nix/compile.nix; - build_debug_and_release = (target: { - debug = (compile { - inherit system target git_version pkgsSrc cargo2nixOverlay; - release = false; - }).workspace.garage { compileMode = "build"; }; + compileWith = args: compile ({ + inherit system git_version nixpkgs; + crane = flake.inputs.crane; + rust-overlay = flake.inputs.rust-overlay; + } // args); - release = (compile { - inherit system target git_version pkgsSrc cargo2nixOverlay; - release = true; - }).workspace.garage { compileMode = "build"; }; - }); - - test = (rustPkgs: - pkgs.symlinkJoin { - name = "garage-tests"; - paths = - builtins.map (key: rustPkgs.workspace.${key} { compileMode = "test"; }) - (builtins.attrNames rustPkgs.workspace); - }); + build_release = target: (compile { + inherit target; + release = true; + }).garage; in { - pkgs = { - amd64 = build_debug_and_release "x86_64-unknown-linux-musl"; - i386 = build_debug_and_release "i686-unknown-linux-musl"; - arm64 = build_debug_and_release "aarch64-unknown-linux-musl"; - arm = build_debug_and_release "armv6l-unknown-linux-musleabihf"; - }; - test = { - amd64 = test (compile { - inherit system git_version pkgsSrc cargo2nixOverlay; - target = "x86_64-unknown-linux-musl"; - features = [ - "garage/bundled-libs" - "garage/k2v" - "garage/lmdb" - "garage/sqlite" - ]; - }); + releasePackages = { + amd64 = build_release "x86_64-unknown-linux-musl"; + i386 = build_release "i686-unknown-linux-musl"; + arm64 = build_release "aarch64-unknown-linux-musl"; + arm = build_release "armv6l-unknown-linux-musleabihf"; }; + flakePackages = flake.packages.${system}; } diff --git a/flake.nix b/flake.nix index 4f046bbd..278fe11d 100644 --- a/flake.nix +++ b/flake.nix @@ -23,29 +23,28 @@ flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; + compileFor = target: release: (compile { + inherit system git_version target nixpkgs crane rust-overlay release; + }); + packageFor = target: release: (compileFor target release).garage; in { - packages = - let - packageFor = target: release: (compile { - inherit system git_version target nixpkgs crane rust-overlay release; - }).garage; - in - { - # default = native release build - default = packageFor null true; - # other = cross-compiled, statically-linked builds - amd64 = packageFor "x86_64-unknown-linux-musl" true; - i386 = packageFor "i686-unknown-linux-musl" true; - arm64 = packageFor "aarch64-unknown-linux-musl" true; - arm = packageFor "armv6l-unknown-linux-musl" true; - # non-optimized packages - dev = packageFor null false; - dev-amd64 = packageFor "x86_64-unknown-linux-musl" false; - dev-i386 = packageFor "i686-unknown-linux-musl" false; - dev-arm64 = packageFor "aarch64-unknown-linux-musl" false; - dev-arm = packageFor "armv6l-unknown-linux-musl" false; - }; + packages = { + # default = native release build + default = packageFor null true; + + # = cross-compiled, statically-linked release builds + amd64 = packageFor "x86_64-unknown-linux-musl" true; + i386 = packageFor "i686-unknown-linux-musl" true; + arm64 = packageFor "aarch64-unknown-linux-musl" true; + arm = packageFor "armv6l-unknown-linux-musl" true; + + # dev = native dev build + dev = packageFor null false; + + # test = cargo test + test = (compileFor null false).garage-test; + }; # ---- developpment shell, for making native builds only ---- devShells = diff --git a/nix/common.nix b/nix/common.nix index 1ad809bb..2c03f04e 100644 --- a/nix/common.nix +++ b/nix/common.nix @@ -10,9 +10,9 @@ let flake = (import flake-compat { system = builtins.currentSystem; src = ../.; }); in -rec { - pkgsSrc = flake.defaultNix.inputs.nixpkgs; - cargo2nix = flake.defaultNix.inputs.cargo2nix; - cargo2nixOverlay = cargo2nix.overlays.default; - devShells = builtins.getAttr builtins.currentSystem flake.defaultNix.devShells; + +{ + flake = flake.defaultNix; + nixpkgs = flake.defaultNix.inputs.nixpkgs; + devShells = flake.defaultNix.devShells.${builtins.currentSystem}; } diff --git a/nix/compile.nix b/nix/compile.nix index de61de3a..ab9ef1ef 100644 --- a/nix/compile.nix +++ b/nix/compile.nix @@ -46,7 +46,7 @@ let inherit (pkgs) lib stdenv; toolchainFn = (p: p.rust-bin.stable."1.78.0".default.override { - targets = lib.optional (target != null) [ rustTarget ]; + targets = lib.optionals (target != null) [ rustTarget ]; extensions = [ "rust-src" "rustfmt" @@ -109,10 +109,10 @@ let { inherit src; pname = "garage"; - version = git_version; + version = "none"; strictDeps = true; - cargoExtraArgs = "--features ${featuresStr}"; + cargoExtraArgs = "--locked --features ${featuresStr}"; nativeBuildInputs = with pkgs; ([ pkg-config @@ -123,8 +123,6 @@ let mold ]); - GIT_VERSION = git_version; - CARGO_PROFILE = if release then "release" else "dev"; CARGO_BUILD_RUSTFLAGS = lib.concatStringsSep @@ -161,11 +159,20 @@ in rec { garage = craneLib.buildPackage (commonArgs // { cargoArtifacts = garage-deps; doCheck = false; + version = git_version; + GIT_VERSION = git_version; + }); + + garage-test-deps = craneLib.buildDepsOnly (commonArgs // { + pname = "garage-test"; + cargoArtifacts = garage; + cargoExtraArgs = "${commonArgs.cargoExtraArgs} --tests --workspace"; + CARGO_PROFILE = "test"; }); garage-test = craneLib.cargoTest (commonArgs // { cargoTestExtraArgs = "--workspace"; - cargoArtifacts = garage; + cargoArtifacts = garage-test-deps; CARGO_PROFILE = "test"; }); } diff --git a/shell.nix b/shell.nix index cc06f0fb..ab0bc71f 100644 --- a/shell.nix +++ b/shell.nix @@ -3,7 +3,7 @@ with import ./nix/common.nix; let - pkgs = import pkgsSrc { + pkgs = import nixpkgs { inherit system; }; winscp = (import ./nix/winscp.nix) pkgs;