diff --git a/crates/ty/build.rs b/crates/ty/build.rs index a66db0e7ad..bd2f8d1d30 100644 --- a/crates/ty/build.rs +++ b/crates/ty/build.rs @@ -8,6 +8,7 @@ fn main() { // The workspace root directory is not available without walking up the tree // https://github.com/rust-lang/cargo/issues/3946 let workspace_root = Path::new(&std::env::var("CARGO_MANIFEST_DIR").unwrap()) + .join("..") .join("..") .join(".."); @@ -48,7 +49,8 @@ fn commit_info(workspace_root: &Path) { .arg("-1") .arg("--date=short") .arg("--abbrev=9") - .arg("--format=%H %h %cd %(describe)") + .arg("--format=%H %h %cd %(describe:tags)") + .current_dir(workspace_root) .output() { Ok(output) if output.status.success() => output, @@ -65,7 +67,9 @@ fn commit_info(workspace_root: &Path) { // https://git-scm.com/docs/pretty-formats#Documentation/pretty-formats.txt-emdescribeoptionsem if let Some(describe) = parts.next() { let mut describe_parts = describe.split('-'); - let _last_tag = describe_parts.next().unwrap(); + let last_tag = describe_parts.next().unwrap(); + + println!("cargo::rustc-env=TY_LAST_TAG={last_tag}"); // If this is the tagged commit, this component will be missing println!( diff --git a/crates/ty/src/version.rs b/crates/ty/src/version.rs index 871fb78af2..cc52949e0a 100644 --- a/crates/ty/src/version.rs +++ b/crates/ty/src/version.rs @@ -6,6 +6,7 @@ pub(crate) struct CommitInfo { short_commit_hash: String, commit_date: String, commits_since_last_tag: u32, + last_tag: Option, } /// ty's version. @@ -43,9 +44,6 @@ pub(crate) fn version() -> VersionInfo { }; } - // This version is pulled from Cargo.toml and set by Cargo - let version = option_env_str!("CARGO_PKG_VERSION").unwrap(); - // Commit info is pulled from git and set by `build.rs` let commit_info = option_env_str!("TY_COMMIT_SHORT_HASH").map(|short_commit_hash| CommitInfo { short_commit_hash, @@ -53,8 +51,20 @@ pub(crate) fn version() -> VersionInfo { commits_since_last_tag: option_env_str!("TY_LAST_TAG_DISTANCE") .as_deref() .map_or(0, |value| value.parse::().unwrap_or(0)), + last_tag: option_env_str!("TY_LAST_TAG"), }); + let version = commit_info + .as_ref() + .and_then(|info| { + info.last_tag.as_ref().map(|tag| { + tag.strip_prefix("v") + .map(std::string::ToString::to_string) + .unwrap_or(tag.clone()) + }) + }) + .unwrap_or("unknown".to_string()); + VersionInfo { version, commit_info, @@ -84,6 +94,7 @@ mod tests { short_commit_hash: "53b0f5d92".to_string(), commit_date: "2023-10-19".to_string(), commits_since_last_tag: 0, + last_tag: None, }), }; assert_snapshot!(version, @"0.0.0 (53b0f5d92 2023-10-19)"); @@ -97,6 +108,7 @@ mod tests { short_commit_hash: "53b0f5d92".to_string(), commit_date: "2023-10-19".to_string(), commits_since_last_tag: 24, + last_tag: None, }), }; assert_snapshot!(version, @"0.0.0+24 (53b0f5d92 2023-10-19)");