Skip to content

Commit

Permalink
[eclipse-iceoryx#475] Make PackageVersion independent of env vars
Browse files Browse the repository at this point in the history
  • Loading branch information
elfenpiff committed Oct 16, 2024
1 parent b43f92c commit b3dfa90
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 33 deletions.
11 changes: 6 additions & 5 deletions doc/how-to-create-an-iceoryx2-release.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,11 @@ number is `Xold.Yold.Zold`.
10. Adjust the `<version>` to `X.Y.Z` in `$GIT_ROOT$/package.xml`.
11. Call `rg "Xold\.Yold\.Zold"` and adjust all findings.
* C and C++ examples, `BUILD.bazel` & `CMakeLists.txt`
12. **Merge all changes to `main`.**
13. Set tag on GitHub and add the release document as notes to the tag
12. Adjust the major, minor and patch version number in `iceoryx2_bb_elementary::PackageVersion`
13. **Merge all changes to `main`.**
14. Set tag on GitHub and add the release document as notes to the tag
description. Add also a link to the file.
14. Check the order of all dependencies in
15. Check the order of all dependencies in
`$GIT_ROOT$/./internal/scripts/crates_io_publish_script.sh`.
When calling `cargo publish -p $PACKAGE$` all dependencies, also dev-dependencies,
must be already published to `crates.io` via `cargo publish -p`. Verify the
Expand All @@ -92,7 +93,7 @@ number is `Xold.Yold.Zold`.
* If the publish script was started and a crate requires a dependency which
is not available on `crates.io` the release has to be redone and the patch
version has to increase by one for the whole workspace.
15. Call `$GIT_ROOT$/./internal/scripts/crates_io_publish_script.sh` and publish
16. Call `$GIT_ROOT$/./internal/scripts/crates_io_publish_script.sh` and publish
all crates on `crates.io` and `docs.rs`.
16. Verify that the release looks fine on `docs.rs` (click through the
17. Verify that the release looks fine on `docs.rs` (click through the
documentation to check if everything was generated correctly)
33 changes: 5 additions & 28 deletions iceoryx2-bb/elementary/src/package_version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
//
// SPDX-License-Identifier: Apache-2.0 OR MIT

use iceoryx2_pal_concurrency_sync::iox_atomic::IoxAtomicU64;
use std::{fmt::Display, sync::atomic::Ordering};
use std::fmt::Display;

/// Represents the crates version acquired through the internal environment variables set by cargo,
/// ("CARGO_PKG_VERSION_{MAJOR|MINOR|PATCH}").
Expand Down Expand Up @@ -63,33 +62,11 @@ impl PackageVersion {

/// Returns the current [`PackageVersion`]
pub fn get() -> PackageVersion {
static PACKAGE_VERSION: IoxAtomicU64 = IoxAtomicU64::new(0);
const MAJOR: u16 = 0;
const MINOR: u16 = 4;
const PATCH: u16 = 1;

if PACKAGE_VERSION.load(Ordering::Relaxed) == 0 {
let major = option_env!("CARGO_PKG_VERSION_MAJOR")
.and_then(|s| s.parse::<u16>().ok())
.unwrap_or(u16::MAX);
let minor = option_env!("CARGO_PKG_VERSION_MINOR")
.and_then(|s| s.parse::<u16>().ok())
.unwrap_or(u16::MAX);
let patch = option_env!("CARGO_PKG_VERSION_PATCH")
.and_then(|s| s.parse::<u16>().ok())
.unwrap_or(u16::MAX);

if major == 0 && minor == 0 && patch == 0 {
PACKAGE_VERSION.store(
PackageVersion::from_version(u16::MAX, u16::MAX, u16::MAX).0,
Ordering::Relaxed,
);
} else {
PACKAGE_VERSION.store(
PackageVersion::from_version(major, minor, patch).0,
Ordering::Relaxed,
);
}
}

PackageVersion::from_u64(PACKAGE_VERSION.load(Ordering::Relaxed))
PackageVersion::from_version(MAJOR, MINOR, PATCH)
}
}

Expand Down
35 changes: 35 additions & 0 deletions iceoryx2-bb/elementary/tests/package_version_tests.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Copyright (c) 2024 Contributors to the Eclipse Foundation
//
// See the NOTICE file(s) distributed with this work for additional
// information regarding copyright ownership.
//
// This program and the accompanying materials are made available under the
// terms of the Apache Software License 2.0 which is available at
// https://www.apache.org/licenses/LICENSE-2.0, or the MIT license
// which is available at https://opensource.org/licenses/MIT.
//
// SPDX-License-Identifier: Apache-2.0 OR MIT

use iceoryx2_bb_elementary::package_version::PackageVersion;
use iceoryx2_bb_testing::assert_that;

#[test]
fn package_version_works() {
let major = option_env!("CARGO_PKG_VERSION_MAJOR")
.and_then(|s| s.parse::<u16>().ok())
.expect("Contains a valid major version number.");
let minor = option_env!("CARGO_PKG_VERSION_MINOR")
.and_then(|s| s.parse::<u16>().ok())
.expect("Contains a valid minor version number.");
let patch = option_env!("CARGO_PKG_VERSION_PATCH")
.and_then(|s| s.parse::<u16>().ok())
.expect("Contains a valid patch version number.");

let sut = PackageVersion::get();

assert_that!(sut.major(), eq major);
assert_that!(sut.minor(), eq minor);
assert_that!(sut.patch(), eq patch);

assert_that!(major == 0 && minor == 0 && patch == 0, eq false);
}

0 comments on commit b3dfa90

Please sign in to comment.