diff --git a/script/bump-gpui-minor-version b/script/bump-gpui-minor-version new file mode 100755 index 0000000000000000000000000000000000000000..1e05388424871e3c123bdf2e693cb0a064b0881f --- /dev/null +++ b/script/bump-gpui-minor-version @@ -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 diff --git a/script/lib/bump-version.sh b/script/lib/bump-version.sh index 5d83dd6f964ad6e9887d7d92fefd9dc43d7d6014..fec732c1c0d7de9411a45be76a6d1d16d8111a51 100755 --- a/script/lib/bump-version.sh +++ b/script/lib/bump-version.sh @@ -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 < Result<()> { ensure_cargo_set_version()?; check_git_clean()?; - let current_version = read_gpui_version()?; - let new_version = bump_version(¤t_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 { Ok(version.to_string()) } -fn bump_version(current_version: &str, pre_release: Option<&str>) -> Result { - // 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" - ); - } }