summaryrefslogtreecommitdiffstats
path: root/xtask/src/release.rs
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2023-06-04 14:15:51 -0500
committerToby Vincent <tobyv13@gmail.com>2023-06-04 14:21:18 -0500
commitae8dd8c6e5c419f91b9a9ca4e270862b18c5c599 (patch)
treecdba9e0ddb78f4c6e09b514b7682629ee489b219 /xtask/src/release.rs
parentc6e8c15b39781ce48cd3f0d829ab5c6574ccd01b (diff)
build: improve ergonomics of version replace
Diffstat (limited to 'xtask/src/release.rs')
-rw-r--r--xtask/src/release.rs98
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)
}