diff --git a/config.nix b/config.nix index 50706a5c..eb677808 100644 --- a/config.nix +++ b/config.nix @@ -427,9 +427,15 @@ let packageVersion = if ! isNull attrs.version then attrs.version - else toplevelCargotoml.package.version - or toplevelCargotoml."workspace.package".version - or "unknown"; + else + let + toppackver = toplevelCargotoml.package.version or null; + in + if lib.isString toppackver || lib.isInt toppackver then + toppackver + else if (toppackver.workspace or false) then + toplevelCargotoml.workspace.package.version or "unknown" + else "unknown"; }; in buildPlanConfig // { inherit buildConfig; } diff --git a/default.nix b/default.nix index 23502678..0eba148c 100644 --- a/default.nix +++ b/default.nix @@ -35,10 +35,11 @@ let else if builtins.pathExists (toString config.root + "/.cargo/config") then (config.root + "/.cargo/config") else null; + version_ = config.packageVersion; + version = if version_ == "unknown" then builtins.trace config version_ else version_; build = args: import ./build.nix ( { - inherit gitDependencies; - version = config.packageVersion; + inherit gitDependencies version; } // config.buildConfig // defaultBuildAttrs // args ); diff --git a/test/fast/default.nix b/test/fast/default.nix index 85c769cd..f79dde55 100644 --- a/test/fast/default.nix +++ b/test/fast/default.nix @@ -24,5 +24,7 @@ workspace = pkgs.callPackage ./workspace { inherit naersk; }; workspace-build-rs = pkgs.callPackage ./workspace-build-rs { inherit naersk; }; workspace-deps = pkgs.callPackage ./workspace-deps { inherit naersk; }; + workspace-meta = pkgs.callPackage ./workspace-meta { inherit naersk; }; + workspace-meta-single = pkgs.callPackage ./workspace-meta-single { inherit naersk; }; workspace-patched = pkgs.callPackage ./workspace-patched { inherit naersk; }; } diff --git a/test/fast/workspace-meta-single/README.md b/test/fast/workspace-meta-single/README.md new file mode 100644 index 00000000..ab98ce1f --- /dev/null +++ b/test/fast/workspace-meta-single/README.md @@ -0,0 +1,13 @@ +# workspace-meta + +Tests that metadata can be read from the workspace via the workspace's `[package]`: + +```toml +[workspace.package] +version = "0.0.1" +... + +[package] +version = { workspace = true } +... +``` diff --git a/test/fast/workspace-meta-single/default.nix b/test/fast/workspace-meta-single/default.nix new file mode 100644 index 00000000..6b4a0002 --- /dev/null +++ b/test/fast/workspace-meta-single/default.nix @@ -0,0 +1,6 @@ +{ naersk, ... }: + +naersk.buildPackage { + src = ./fixtures; + doCheck = true; +} diff --git a/test/fast/workspace-meta-single/fixtures/Cargo.lock b/test/fast/workspace-meta-single/fixtures/Cargo.lock new file mode 100644 index 00000000..8e06c669 --- /dev/null +++ b/test/fast/workspace-meta-single/fixtures/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "foo" +version = "0.0.1" diff --git a/test/fast/workspace-meta-single/fixtures/Cargo.toml b/test/fast/workspace-meta-single/fixtures/Cargo.toml new file mode 100644 index 00000000..6bbe06a3 --- /dev/null +++ b/test/fast/workspace-meta-single/fixtures/Cargo.toml @@ -0,0 +1,14 @@ +[workspace] + +resolver = "2" + +[workspace.package] +version = "0.0.1" +edition = "2021" + + + +[package] +name = "foo" +version = { workspace = true } +edition = { workspace = true } diff --git a/test/fast/workspace-meta-single/fixtures/src/main.rs b/test/fast/workspace-meta-single/fixtures/src/main.rs new file mode 100644 index 00000000..e7a11a96 --- /dev/null +++ b/test/fast/workspace-meta-single/fixtures/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/test/fast/workspace-meta/README.md b/test/fast/workspace-meta/README.md new file mode 100644 index 00000000..d628583f --- /dev/null +++ b/test/fast/workspace-meta/README.md @@ -0,0 +1,10 @@ +# workspace-meta + +Tests that metadata can be read from the workspace: + +```toml +[package] +name = "foo" +version = { workspace = true } +edition = { workspace = true } +``` diff --git a/test/fast/workspace-meta/default.nix b/test/fast/workspace-meta/default.nix new file mode 100644 index 00000000..6b4a0002 --- /dev/null +++ b/test/fast/workspace-meta/default.nix @@ -0,0 +1,6 @@ +{ naersk, ... }: + +naersk.buildPackage { + src = ./fixtures; + doCheck = true; +} diff --git a/test/fast/workspace-meta/fixtures/Cargo.lock b/test/fast/workspace-meta/fixtures/Cargo.lock new file mode 100644 index 00000000..8e06c669 --- /dev/null +++ b/test/fast/workspace-meta/fixtures/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "foo" +version = "0.0.1" diff --git a/test/fast/workspace-meta/fixtures/Cargo.toml b/test/fast/workspace-meta/fixtures/Cargo.toml new file mode 100644 index 00000000..8b9930ea --- /dev/null +++ b/test/fast/workspace-meta/fixtures/Cargo.toml @@ -0,0 +1,13 @@ +[workspace] + +resolver = "2" + +members = [ + "foo", +] + +[workspace.package] +version = "0.0.1" +edition = "2021" + + diff --git a/test/fast/workspace-meta/fixtures/foo/Cargo.toml b/test/fast/workspace-meta/fixtures/foo/Cargo.toml new file mode 100644 index 00000000..733dd207 --- /dev/null +++ b/test/fast/workspace-meta/fixtures/foo/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "foo" +version = { workspace = true } +edition = { workspace = true } + +[dependencies] diff --git a/test/fast/workspace-meta/fixtures/foo/src/main.rs b/test/fast/workspace-meta/fixtures/foo/src/main.rs new file mode 100644 index 00000000..e7a11a96 --- /dev/null +++ b/test/fast/workspace-meta/fixtures/foo/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +}