From f5610036b9206cef35b79e5fd923c3d038ca17aa Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 19:11:09 +0000 Subject: [PATCH] Update bump-go.sh to handle missing toolchain directive - Add early trap setup to avoid exit code issues - Handle missing toolchain directive gracefully with `|| true` - Add logic to detect when toolchain is expected to be missing - Add informative messages about missing toolchain - Implement smart toolchain handling: - Skip toolchain when go version matches latest (redundant) - Add toolchain when go version is older than latest - Update toolchain when it exists but is outdated Co-authored-by: williammartin <1611510+williammartin@users.noreply.github.com> --- .github/workflows/scripts/bump-go.sh | 49 ++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/.github/workflows/scripts/bump-go.sh b/.github/workflows/scripts/bump-go.sh index f0762f3d3..853a26de8 100755 --- a/.github/workflows/scripts/bump-go.sh +++ b/.github/workflows/scripts/bump-go.sh @@ -49,23 +49,39 @@ echo " → toolchain : $TOOLCHAIN_VERSION" # ---- Prepare Git branch --------------------------------------------------- CURRENT_GO_DIRECTIVE=$(grep -E '^go ' "$GO_MOD" | cut -d ' ' -f2) -CURRENT_TOOLCHAIN_DIRECTIVE=$(grep -E '^toolchain ' "$GO_MOD" | cut -d ' ' -f2) - -if [[ "$CURRENT_GO_DIRECTIVE" = "$GO_DIRECTIVE_VERSION" && \ - "$CURRENT_TOOLCHAIN_DIRECTIVE" = "go$TOOLCHAIN_VERSION" ]]; then - echo "Already on latest Go version: $CURRENT_GO_DIRECTIVE (toolchain: $CURRENT_TOOLCHAIN_DIRECTIVE)" - exit 0 -fi +CURRENT_TOOLCHAIN_DIRECTIVE=$(grep -E '^toolchain ' "$GO_MOD" | cut -d ' ' -f2 || true) BRANCH="bump-go-$TOOLCHAIN_VERSION" +BRANCH_CREATED=0 + +# Set up cleanup trap early (before any potential exits) cleanup() { - git checkout - >/dev/null 2>&1 || true - git branch -D "$BRANCH" >/dev/null 2>&1 || true + if [[ $BRANCH_CREATED -eq 1 ]]; then + git checkout - >/dev/null 2>&1 || true + git branch -D "$BRANCH" >/dev/null 2>&1 || true + fi } trap cleanup EXIT +# Check if we're already up to date +# Note: toolchain directive may be missing when go directive == latest toolchain. +# This is expected behavior - `go mod tidy` removes the toolchain line when +# the minimum Go version matches the latest toolchain, as it's redundant. +if [[ "$CURRENT_GO_DIRECTIVE" = "$GO_DIRECTIVE_VERSION" ]]; then + if [[ -z "$CURRENT_TOOLCHAIN_DIRECTIVE" ]]; then + # No toolchain directive present - this is expected when go version == latest + echo "Already on latest Go version: $CURRENT_GO_DIRECTIVE" + echo " → Note: No toolchain directive (expected when go version matches latest toolchain)" + exit 0 + elif [[ "$CURRENT_TOOLCHAIN_DIRECTIVE" = "go$TOOLCHAIN_VERSION" ]]; then + echo "Already on latest Go version: $CURRENT_GO_DIRECTIVE (toolchain: $CURRENT_TOOLCHAIN_DIRECTIVE)" + exit 0 + fi +fi + echo "Creating branch $BRANCH" git switch -c "$BRANCH" >/dev/null 2>&1 +BRANCH_CREATED=1 # ---- Patch go.mod ----------------------------------------------------------- if [[ "$CURRENT_GO_DIRECTIVE" != "$GO_DIRECTIVE_VERSION" ]]; then @@ -73,7 +89,20 @@ if [[ "$CURRENT_GO_DIRECTIVE" != "$GO_DIRECTIVE_VERSION" ]]; then echo " • go directive $CURRENT_GO_DIRECTIVE → $GO_DIRECTIVE_VERSION" fi -if [[ "$CURRENT_TOOLCHAIN_DIRECTIVE" != "go$TOOLCHAIN_VERSION" ]]; then +# Handle toolchain directive - may need to add, update, or skip +if [[ -z "$CURRENT_TOOLCHAIN_DIRECTIVE" ]]; then + # No toolchain directive exists + if [[ "$GO_DIRECTIVE_VERSION" = "$(cut -d. -f1-2 <<< "$TOOLCHAIN_VERSION").0" ]]; then + # go directive matches latest toolchain - toolchain line is redundant + echo " • toolchain directive not needed (go version matches latest toolchain)" + else + # go directive is older than latest toolchain - add toolchain directive after go line + sed -Ei.bak "/^go [0-9]+\.[0-9]+/a\\ +toolchain go$TOOLCHAIN_VERSION" "$GO_MOD" + echo " • toolchain directive added: go$TOOLCHAIN_VERSION" + fi +elif [[ "$CURRENT_TOOLCHAIN_DIRECTIVE" != "go$TOOLCHAIN_VERSION" ]]; then + # Toolchain directive exists but needs updating sed -Ei.bak "s/^toolchain go[0-9]+\.[0-9]+\.[0-9]+.*$/toolchain go$TOOLCHAIN_VERSION/" "$GO_MOD" echo " • toolchain $CURRENT_TOOLCHAIN_DIRECTIVE → go$TOOLCHAIN_VERSION" fi