diff options
-rw-r--r-- | xtask/src/dist.rs | 90 | ||||
-rw-r--r-- | xtask/src/lib.rs | 30 | ||||
-rw-r--r-- | xtask/src/main.rs | 3 | ||||
-rw-r--r-- | xtask/src/release/bump.rs | 8 |
4 files changed, 3 insertions, 128 deletions
diff --git a/xtask/src/dist.rs b/xtask/src/dist.rs deleted file mode 100644 index 119eece..0000000 --- a/xtask/src/dist.rs +++ /dev/null @@ -1,90 +0,0 @@ -use std::{ - env::consts::ARCH, - fs::File, - path::{Path, PathBuf}, -}; - -use anyhow::{ensure, Result}; -use flate2::{write::GzEncoder, Compression}; -use tar::Builder; - -use crate::{BIN_NAME, PKG_INCLUDE, PKG_VER}; - -pub fn generate_tar_gz(profile: &str, tag: Option<&str>) -> Result<PathBuf> { - let pkg_name = format!("{BIN_NAME}-{PKG_VER}-{ARCH}.tar.gz"); - - let target_dir = PathBuf::from("target").canonicalize()?; - let profile_dir = target_dir.join(profile); - let dist_dir = target_dir.join("dist"); - let out_dir = find_out_dir(&profile_dir)?; - - let bin_path = profile_dir.join(BIN_NAME); - let pkg_path = dist_dir.join(pkg_name); - - ensure!( - !tag.is_some_and(|t| t.trim_start_matches('v') != PKG_VER), - "Package version does not match provided tag: {PKG_VER} != {}", - tag.unwrap().trim_start_matches('v') - ); - - ensure!( - bin_path.exists(), - "Package binary does not exist: {}", - bin_path.display() - ); - - ensure!( - out_dir.exists(), - "Build's out directory does not exist: {}", - out_dir.display() - ); - - let _ = std::fs::remove_dir_all(&dist_dir); - std::fs::create_dir_all(&dist_dir)?; - - let tar_gz = File::create(&pkg_path)?; - let enc = GzEncoder::new(tar_gz, Compression::default()); - let mut tar = Builder::new(enc); - - tar.append_path_with_name(bin_path, PathBuf::from("bin").join(BIN_NAME))?; - tar.append_dir_all(".", out_dir)?; - PKG_INCLUDE.iter().try_for_each(|p| tar.append_path(p))?; - - tar.into_inner()?.finish()?; - - Ok(pkg_path) -} - -pub fn find_out_dir<P: AsRef<Path>>(profile: P) -> Result<PathBuf> { - let build_dir = PathBuf::from("target").join(profile).join("build"); - - build_dir - .canonicalize() - .and_then(|p| p.read_dir()) - .map_err(|_| { - anyhow::anyhow!( - "Package build directory does not exist: {}", - build_dir.display() - ) - })? - .flatten() - .filter_map(|d| { - d.file_name() - .to_str()? - .starts_with(BIN_NAME) - .then(|| d.path().join("invoked.timestamp")) - .filter(|p| p.exists()) - }) - .reduce(|acc, path_buf| { - std::cmp::max_by_key(path_buf, acc, |p| { - p.metadata() - .and_then(|m| m.modified()) - .unwrap_or(std::time::SystemTime::UNIX_EPOCH) - }) - }) - .map(|p| p.with_file_name("out")) - .ok_or(anyhow::anyhow!( - "Package out directory not found in build directory: {}", - build_dir.display() - )) -} diff --git a/xtask/src/lib.rs b/xtask/src/lib.rs deleted file mode 100644 index 26dcbd1..0000000 --- a/xtask/src/lib.rs +++ /dev/null @@ -1,30 +0,0 @@ -const BIN_NAME: &str = "projectr"; -const PKG_VER: &str = env!("CARGO_PKG_VERSION"); -const PKG_INCLUDE: &[&str] = &[ - "bin/tmux-projectr", - "CONTRIBUTING.md", - "README.md", - "LICENSE", -]; - -pub mod dist; -pub mod release; - -/// Parse version from git describe output. -pub fn git_version() -> anyhow::Result<semver::Version> { - let stdout = std::process::Command::new("git") - .arg("describe") - .arg("--long") - .arg("--abbrev=7") - .output()? - .stdout; - - std::str::from_utf8(&stdout)? - .trim() - .trim_start_matches('v') - .replacen("-g", ".g", 1) - .replacen('-', "-r", 1) - .parse() - .map_err(Into::into) -} - diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 1de4147..5dd79c2 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -15,7 +15,8 @@ use clap::{Parser, Subcommand}; use flate2::{write::GzEncoder, Compression}; use once_cell::sync::Lazy; use tar::Builder; -use xtask::release; + +mod release; const PKG_NAME: &str = "projectr"; const PKG_VER: &str = env!("CARGO_PKG_VERSION"); diff --git a/xtask/src/release/bump.rs b/xtask/src/release/bump.rs index 7a817e7..76218eb 100644 --- a/xtask/src/release/bump.rs +++ b/xtask/src/release/bump.rs @@ -1,7 +1,7 @@ use std::{ fmt::Display, fs::File, - io::{BufRead, BufReader, BufWriter, Read, Write}, + io::{BufReader, BufWriter, Read, Write}, path::Path, process::Command, str::FromStr, @@ -50,12 +50,6 @@ pub struct Bump { } impl Bump { - pub fn new(major: u64, minor: u64, patch: u64, level: Level) -> Self { - let version = Version::new(major, minor, patch); - let next = level.bump(&version); - Self { version, next } - } - fn check_modified<P>(path: P) -> Result<bool> where P: AsRef<Path>, |