@@ -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
@@ -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
@@ -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(¤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<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"
- );
- }
}