diff options
-rw-r--r-- | Cargo.lock | 76 | ||||
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | build.rs | 44 | ||||
-rwxr-xr-x | version.sh | 2 |
4 files changed, 123 insertions, 1 deletions
@@ -289,6 +289,8 @@ dependencies = [ "clap_complete", "clap_mangen", "dysk-cli", + "serde", + "toml", ] [[package]] @@ -307,6 +309,12 @@ dependencies = [ ] [[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] name = "errno" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -334,6 +342,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9544f10105d33957765016b8a9baea7e689bf1f0f2f32c2fa2f568770c38d2b3" [[package]] +name = "hashbrown" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" + +[[package]] name = "heck" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -346,6 +360,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" [[package]] +name = "indexmap" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] name = "is-terminal" version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -656,6 +680,15 @@ dependencies = [ ] [[package]] +name = "serde_spanned" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +dependencies = [ + "serde", +] + +[[package]] name = "signal-hook" version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -790,6 +823,40 @@ dependencies = [ ] [[package]] +name = "toml" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] name = "unicode-ident" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -959,6 +1026,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] +name = "winnow" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d09770118a7eb1ccaf4a594a221334119a44a814fcb0d31c5b85e83e97227a97" +dependencies = [ + "memchr", +] + +[[package]] name = "xterm-query" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -23,6 +23,8 @@ clap = { version = "4.3", features = ["derive", "cargo"] } clap_complete = "4.3" clap_mangen = "0.2.12" dysk-cli = { version = "2.8.0", path = "cli" } +serde = { version = "1.0", features = ["derive"] } +toml = "0.7" [profile.release] strip = true @@ -7,9 +7,11 @@ use { dysk_cli::args::Args, clap::CommandFactory, clap_complete::{Generator, Shell}, + serde::Deserialize, std::{ env, ffi::OsStr, + fs, path::PathBuf, }, }; @@ -49,7 +51,49 @@ fn build_man_page() -> std::io::Result<()> { Ok(()) } +/// Check that all dysk versions are the same +/// +/// See https://github.com/Canop/dysk/issues/65 +fn check_version_consistency() -> std::io::Result<()> { + #[derive(Deserialize)] + struct Package { + version: String, + } + #[derive(Deserialize)] + struct DependencyRef { + version: String, + } + #[derive(Deserialize)] + struct Dependencies { + #[serde(alias = "dysk-cli")] + dysk_cli: DependencyRef, + } + #[derive(Deserialize)] + struct MainCargo { + package: Package, + dependencies: Dependencies, + #[serde(alias = "build-dependencies")] + build_dependencies: Dependencies, + } + #[derive(Deserialize)] + struct CliCargo { + package: Package, + } + let version = env::var("CARGO_PKG_VERSION").expect("cargo pkg version not available"); + let s = fs::read_to_string("Cargo.toml").unwrap(); + let main_cargo: MainCargo = toml::from_str(&s).unwrap(); + let s = fs::read_to_string("cli/Cargo.toml").unwrap(); + let cli_cargo: CliCargo = toml::from_str(&s).unwrap(); + println!("VERSION MISMATCH - All dysk and dysk-cli versions must be the same"); + assert_eq!(&version, &main_cargo.package.version); + assert_eq!(&version, &main_cargo.dependencies.dysk_cli.version); + assert_eq!(&version, &main_cargo.build_dependencies.dysk_cli.version); + assert_eq!(&version, &cli_cargo.package.version); + Ok(()) +} + fn main() -> std::io::Result<()> { + check_version_consistency()?; build_completion_scripts(); build_man_page()?; Ok(()) @@ -1,4 +1,4 @@ -# extract the version from the Cargo.toml file +# extract the version from the main Cargo.toml file version=$(sed 's/^version = "\([^\"]*\)"/\1/;t;d' Cargo.toml | head -1) echo "$version" |