diff options
Diffstat (limited to 'xtask/src/release.rs')
-rw-r--r-- | xtask/src/release.rs | 98 |
1 files changed, 47 insertions, 51 deletions
diff --git a/xtask/src/release.rs b/xtask/src/release.rs index 8bf4444..acb8888 100644 --- a/xtask/src/release.rs +++ b/xtask/src/release.rs @@ -4,9 +4,9 @@ use anyhow::Result; use clap::{Args, Subcommand}; use semver::Version; -use self::version::{Bump, Level, Replacement}; +use self::bump::{Bump, Level}; -mod version; +mod bump; #[derive(Debug, Clone, Args)] pub struct Release { @@ -15,7 +15,7 @@ pub struct Release { /// Level of version bump version. #[arg(global = true, required = false)] - level: version::Level, + level: bump::Level, /// Options passed to git commit. #[arg(global = true, last = true)] @@ -42,7 +42,7 @@ pub enum Step { /// Bump version in package files and commit changes. Bump { #[arg(from_global)] - level: version::Level, + level: bump::Level, }, /// Make a release commit. @@ -54,7 +54,7 @@ pub enum Step { /// Create git tag for release. Tag { #[arg(from_global)] - level: version::Level, + level: bump::Level, }, } @@ -85,54 +85,50 @@ impl Step { pub fn bump(level: Level) -> Result<Bump> { let mut bump = Bump::from(level); - bump.bump_file("README.md", &[Replacement::Version])?; - bump.bump_file("pkg/archlinux/projectr/PKGBUILD", &[Replacement::Version])?; - bump.bump_file( - "pkg/archlinux/projectr-bin/PKGBUILD", - &[Replacement::Version], - )?; - - let stdout = std::process::Command::new("git") - .arg("describe") - .arg("--long") - .arg("--abbrev=7") - .output()? - .stdout; - let pkgver = std::str::from_utf8(&stdout)? - .trim() - .trim_start_matches('v') - .replacen("-g", ".g", 1) - .replacen('-', "-r", 1) - .replace('-', "."); - - bump.bump_file( - "pkg/archlinux/projectr-git/PKGBUILD", - &[Replacement::FindLine( - |l| l.starts_with("pkgver="), - format!("pkgver={pkgver}"), - )], - )?; - - bump.bump_file( - "CHANGELOG.md", - &[ - Replacement::Append( - "## [Unreleased]".to_string(), - format!( - "\n## [{}] - {}", - bump.next, - chrono::Utc::now().format("%Y-%m-%d") + bump.bump_file("Cargo.toml", bump::replace_cargo)?; + bump.bump_file("README.md", bump::replace)?; + bump.bump_file("pkg/archlinux/projectr/PKGBUILD", bump::replace)?; + bump.bump_file("pkg/archlinux/projectr-bin/PKGBUILD", bump::replace)?; + bump.bump_file("pkg/archlinux/projectr-git/PKGBUILD", |buf, _| { + let stdout = std::process::Command::new("git") + .arg("describe") + .arg("--long") + .arg("--abbrev=7") + .output()? + .stdout; + + let pkgver = std::str::from_utf8(&stdout)? + .trim() + .trim_start_matches('v') + .replacen("-g", ".g", 1) + .replacen('-', "-r", 1) + .replace('-', "."); + + if let Some(from) = buf.lines().find(|l| l.starts_with("pkgver=")) { + Ok(buf.replace(from, &format!("pkgver={pkgver}"))) + } else { + Ok(buf) + } + })?; + + bump.bump_file("CHANGELOG.md", |buf, Bump { version: _, next }| { + let date = chrono::Utc::now().format("%Y-%m-%d"); + Ok(buf + .replace( + "## [Unreleased]", + &format!( + "## [Unreleased]\n\n\ + ## [{next}] - {date}" ), - ), - Replacement::Append( - "[Unreleased]: https://git.sr.ht/~tobyvin/projectr/log/HEAD".to_string(), - format!( - "[{0}]: https://git.sr.ht/~tobyvin/projectr/log/v{0}", - bump.next + ) + .replace( + "[Unreleased]: https://git.sr.ht/~tobyvin/projectr/log/HEAD", + &format!( + "[Unreleased]: https://git.sr.ht/~tobyvin/projectr/log/HEAD\n\ + [{next}]: https://git.sr.ht/~tobyvin/projectr/log/v{next}" ), - ), - ], - )?; + )) + })?; Ok(bump) } |