Add bump gpui script (#39833)

Release Notes:

- N/A
This commit is contained in:
Mikayla Maki
2025-10-09 04:15:37 +00:00
committed by GitHub
parent 3d200a5466
commit 15c4aadb57
3 changed files with 48 additions and 69 deletions
+28
View File
@@ -0,0 +1,28 @@
#!/usr/bin/env bash
# Ensure we're in a clean state on an up-to-date `main` branch.
if [[ -n $(git status --short --untracked-files=no) ]]; then
echo "can't bump versions with uncommitted changes"
exit 1
fi
if [[ $(git rev-parse --abbrev-ref HEAD) != "main" ]]; then
echo "this command must be run on main"
exit 1
fi
git pull -q --ff-only origin main
# Parse the current version
version=$(script/get-crate-version gpui)
major=$(echo $version | cut -d. -f1)
minor=$(echo $version | cut -d. -f2)
next_minor=$(expr $minor + 1)
next_minor_branch_name="gpui-v${major}.${next_minor}.0"
git checkout -b ${next_minor_branch_name}
script/lib/bump-version.sh gpui v "-gpui" minor true
git checkout -q main
+16
View File
@@ -6,6 +6,7 @@ package=$1
tag_prefix=$2
tag_suffix=$3
version_increment=$4
gpui_release=${5:-false}
if [[ -n $(git status --short --untracked-files=no) ]]; then
echo "can't bump version with uncommitted changes"
@@ -25,6 +26,20 @@ tag_name=${tag_prefix}${new_version}${tag_suffix}
git commit --quiet --all --message "${package} ${new_version}"
git tag ${tag_name}
if [[ "$gpui_release" == "true" ]]; then
cat <<MESSAGE
Locally committed and tagged ${package} version ${new_version}
To push this (don't forget to open a PR!):
git push origin ${tag_name}; gh pr create -H ${branch_name}
To undo this:
git branch -D ${branch_name} && git tag -d ${tag_name}
MESSAGE
else
cat <<MESSAGE
Locally committed and tagged ${package} version ${new_version}
@@ -37,3 +52,4 @@ To undo this:
git reset --hard ${old_sha} && git tag -d ${tag_name}
MESSAGE
fi
+4 -69
View File
@@ -27,14 +27,10 @@ pub fn run_publish_gpui(args: PublishGpuiArgs) -> Result<()> {
ensure_cargo_set_version()?;
check_git_clean()?;
let current_version = read_gpui_version()?;
let new_version = bump_version(&current_version, args.pre_release.as_deref())?;
println!(
"Updating GPUI version: {} -> {}",
current_version, new_version
);
publish_dependencies(&new_version, args.dry_run)?;
publish_gpui(&new_version, args.dry_run)?;
let version = read_gpui_version()?;
println!("Updating GPUI to version: {}", version);
publish_dependencies(&version, args.dry_run)?;
publish_gpui(&version, args.dry_run)?;
println!("GPUI published in {}s", start_time.elapsed().as_secs_f32());
Ok(())
}
@@ -56,31 +52,6 @@ fn read_gpui_version() -> Result<String> {
Ok(version.to_string())
}
fn bump_version(current_version: &str, pre_release: Option<&str>) -> Result<String> {
// Strip any existing metadata and pre-release
let without_metadata = current_version.split('+').next().unwrap();
let base_version = without_metadata.split('-').next().unwrap();
// Parse major.minor.patch
let parts: Vec<&str> = base_version.split('.').collect();
if parts.len() != 3 {
bail!("Invalid version format: {}", current_version);
}
let major: u32 = parts[0].parse().context("Failed to parse major version")?;
let minor: u32 = parts[1].parse().context("Failed to parse minor version")?;
// Always bump minor version
let new_version = format!("{}.{}.0", major, minor + 1);
// Add pre-release if specified
if let Some(pre) = pre_release {
Ok(format!("{}-{}", new_version, pre))
} else {
Ok(new_version)
}
}
fn publish_dependencies(new_version: &str, dry_run: bool) -> Result<()> {
let gpui_dependencies = vec![
("zed-collections", "collections"),
@@ -347,40 +318,4 @@ mod tests {
assert_eq!(result, output);
}
#[test]
fn test_bump_version() {
// Test bumping minor version (default behavior)
assert_eq!(bump_version("0.1.0", None).unwrap(), "0.2.0");
assert_eq!(bump_version("0.1.5", None).unwrap(), "0.2.0");
assert_eq!(bump_version("1.42.7", None).unwrap(), "1.43.0");
// Test stripping pre-release and bumping minor
assert_eq!(bump_version("0.1.0-alpha.1", None).unwrap(), "0.2.0");
assert_eq!(bump_version("0.1.0-beta", None).unwrap(), "0.2.0");
// Test stripping existing metadata and bumping
assert_eq!(bump_version("0.1.0+old.metadata", None).unwrap(), "0.2.0");
// Test bumping minor with pre-release
assert_eq!(bump_version("0.1.0", Some("alpha")).unwrap(), "0.2.0-alpha");
// Test bumping minor with complex pre-release identifier
assert_eq!(
bump_version("0.1.0", Some("test.1")).unwrap(),
"0.2.0-test.1"
);
// Test bumping from existing pre-release adds new pre-release
assert_eq!(
bump_version("0.1.0-alpha", Some("beta")).unwrap(),
"0.2.0-beta"
);
// Test bumping and stripping metadata while adding pre-release
assert_eq!(
bump_version("0.1.0+metadata", Some("alpha")).unwrap(),
"0.2.0-alpha"
);
}
}