From 028cfb0dcd041057e03b6b71e066bb6bc21a7c79 Mon Sep 17 00:00:00 2001 From: Simo Lin Date: Sat, 14 Mar 2026 19:29:16 -0700 Subject: [PATCH 1/2] fix(ci): add VERSION_OVERRIDE to check-versions for manual version control When commits use `feat:` conventional prefix but the changes are minor (e.g., small additions to existing features), the auto-detected bump level can be too aggressive (minor instead of patch). This adds a VERSION_OVERRIDE parameter that bypasses conventional commit detection and uses the specified version for all bumps. What changed: - Makefile: check-versions target accepts VERSION_OVERRIDE parameter, passes it as an environment variable to the script - scripts/check_release_versions.sh: bump_version() returns the override when VERSION_OVERRIDE is set, skipping level-based computation. Displays override notice in output header. Usage: make check-versions VERSION_OVERRIDE=1.3.1 Signed-off-by: Simo Lin --- Makefile | 9 ++++++--- scripts/check_release_versions.sh | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 47f5bec23d..f5b4e24672 100644 --- a/Makefile +++ b/Makefile @@ -222,9 +222,12 @@ bump-version: ## Bump version across all files (usage: make bump-version VERSION @echo "" @echo "Verify with: make show-version" -check-versions: ## Check workspace crate versions against latest tag (usage: make check-versions [TAG=v1.0.0]) - @if [ -n "$(TAG)" ]; then \ - ./scripts/check_release_versions.sh "$(TAG)"; \ +check-versions: ## Check workspace crate versions against latest tag (usage: make check-versions [TAG=v1.0.0] [VERSION_OVERRIDE=1.3.1]) + @args=""; \ + if [ -n "$(TAG)" ]; then args="$$args $(TAG)"; fi; \ + if [ -n "$(VERSION_OVERRIDE)" ]; then export VERSION_OVERRIDE="$(VERSION_OVERRIDE)"; fi; \ + if [ -n "$$args" ]; then \ + ./scripts/check_release_versions.sh $$args; \ else \ ./scripts/check_release_versions.sh; \ fi diff --git a/scripts/check_release_versions.sh b/scripts/check_release_versions.sh index d63978f58d..c414656735 100755 --- a/scripts/check_release_versions.sh +++ b/scripts/check_release_versions.sh @@ -123,6 +123,9 @@ if ! git rev-parse "$TAG" >/dev/null 2>&1; then fi echo -e "${BOLD}Checking workspace versions against tag: ${BLUE}$TAG${NC}" +if [[ -n "$VERSION_OVERRIDE" ]]; then + echo -e "${BOLD}Version override: ${CYAN}$VERSION_OVERRIDE${NC} (ignoring conventional commit detection)" +fi echo "" # --------------------------------------------------------------------------- @@ -169,6 +172,12 @@ get_workspace_dep_version() { | sed 's/version = "\(.*\)"/\1/' } +# --------------------------------------------------------------------------- +# VERSION_OVERRIDE: skip conventional-commit detection and use this version +# for all bumps. Set via: VERSION_OVERRIDE=1.3.1 ./check_release_versions.sh +# --------------------------------------------------------------------------- +VERSION_OVERRIDE="${VERSION_OVERRIDE:-}" + # Detect semver bump level from conventional commits touching a directory. # Scans commit subjects and bodies for: # - "feat!:", "fix!:", "!:" or "BREAKING CHANGE" → major @@ -217,10 +226,15 @@ detect_bump_level() { echo "$level" } -# Bump version by level: major, minor, or patch +# Bump version by level: major, minor, or patch. +# If VERSION_OVERRIDE is set, always returns the override (ignoring level). bump_version() { local version="$1" local level="$2" + if [[ -n "$VERSION_OVERRIDE" ]]; then + echo "$VERSION_OVERRIDE" + return + fi if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then echo "ERROR: bump_version only supports X.Y.Z format, got: $version" >&2 return 1 From bee4fd6d6f78be205f0fe4b4a435f8fa958e48d4 Mon Sep 17 00:00:00 2001 From: Simo Lin Date: Sat, 14 Mar 2026 19:36:37 -0700 Subject: [PATCH 2/2] fix(ci): address PR review feedback for VERSION_OVERRIDE What changed: - scripts/check_release_versions.sh: move VERSION_OVERRIDE initialization before first use (fixes unbound variable error under set -u), add X.Y.Z format validation to reject invalid version strings - Makefile: simplify check-versions target to single line by passing VERSION_OVERRIDE as env var and TAG as positional arg directly Signed-off-by: Simo Lin --- Makefile | 9 +-------- scripts/check_release_versions.sh | 16 ++++++++++------ 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/Makefile b/Makefile index f5b4e24672..118a6725d7 100644 --- a/Makefile +++ b/Makefile @@ -223,11 +223,4 @@ bump-version: ## Bump version across all files (usage: make bump-version VERSION @echo "Verify with: make show-version" check-versions: ## Check workspace crate versions against latest tag (usage: make check-versions [TAG=v1.0.0] [VERSION_OVERRIDE=1.3.1]) - @args=""; \ - if [ -n "$(TAG)" ]; then args="$$args $(TAG)"; fi; \ - if [ -n "$(VERSION_OVERRIDE)" ]; then export VERSION_OVERRIDE="$(VERSION_OVERRIDE)"; fi; \ - if [ -n "$$args" ]; then \ - ./scripts/check_release_versions.sh $$args; \ - else \ - ./scripts/check_release_versions.sh; \ - fi + @VERSION_OVERRIDE="$(VERSION_OVERRIDE)" ./scripts/check_release_versions.sh $(TAG) diff --git a/scripts/check_release_versions.sh b/scripts/check_release_versions.sh index c414656735..a82cdd4442 100755 --- a/scripts/check_release_versions.sh +++ b/scripts/check_release_versions.sh @@ -122,6 +122,16 @@ if ! git rev-parse "$TAG" >/dev/null 2>&1; then exit 1 fi +# --------------------------------------------------------------------------- +# VERSION_OVERRIDE: skip conventional-commit detection and use this version +# for all bumps. Set via: VERSION_OVERRIDE=1.3.1 ./check_release_versions.sh +# --------------------------------------------------------------------------- +VERSION_OVERRIDE="${VERSION_OVERRIDE:-}" +if [[ -n "$VERSION_OVERRIDE" && ! "$VERSION_OVERRIDE" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo -e "${RED}ERROR: VERSION_OVERRIDE must be in X.Y.Z format, got: '$VERSION_OVERRIDE'${NC}" >&2 + exit 1 +fi + echo -e "${BOLD}Checking workspace versions against tag: ${BLUE}$TAG${NC}" if [[ -n "$VERSION_OVERRIDE" ]]; then echo -e "${BOLD}Version override: ${CYAN}$VERSION_OVERRIDE${NC} (ignoring conventional commit detection)" @@ -172,12 +182,6 @@ get_workspace_dep_version() { | sed 's/version = "\(.*\)"/\1/' } -# --------------------------------------------------------------------------- -# VERSION_OVERRIDE: skip conventional-commit detection and use this version -# for all bumps. Set via: VERSION_OVERRIDE=1.3.1 ./check_release_versions.sh -# --------------------------------------------------------------------------- -VERSION_OVERRIDE="${VERSION_OVERRIDE:-}" - # Detect semver bump level from conventional commits touching a directory. # Scans commit subjects and bodies for: # - "feat!:", "fix!:", "!:" or "BREAKING CHANGE" → major