Refactor GitHub release deployment in build.sh
diff --git a/scripts/ci/build.sh b/scripts/ci/build.sh
index cb59145..fe6da09 100755
--- a/scripts/ci/build.sh
+++ b/scripts/ci/build.sh
@@ -149,11 +149,11 @@
local release_branch=$(get_release_branch)
if [ -n "${release_name}" ]; then
- local github_token="$(gsutil cat gs://bazel-trusted-encrypted-secrets/github-trusted-token.enc | \
+ local github_token
+ github_token="$(gsutil cat gs://bazel-trusted-encrypted-secrets/github-trusted-token.enc | \
gcloud kms decrypt --project bazel-public --location global --keyring buildkite --key github-trusted-token --ciphertext-file - --plaintext-file -)"
- export GH_TOKEN="${github_token}"
-
- local latest_flag="true"
+
+ local latest_flag="true"
local prerelease_flag=""
local tag_to_deploy="${release_name}"
@@ -163,34 +163,41 @@
latest_flag="false"
else
echo "+++ Checking if ${release_name} should be marked as Latest"
- # Safety check: ensures jq is available for the next line
- local current_latest_tag=$(gh release view --repo "bazelbuild/bazel" --json tagName --jq .tagName 2>/dev/null || echo "")
-
- if [[ -n "${current_latest_tag}" ]]; then
- highest=$(printf '%s\n%s' "${current_latest_tag}" "${release_name}" | sort -V | tail -n 1)
- if [[ "${release_name}" != "${highest}" ]]; then
- echo "+++ Version ${release_name} is older than ${current_latest_tag}. Will NOT mark as latest."
- latest_flag="false"
+ # Query the current GitHub "latest" release to compare versions.
+ local current_latest_tag
+ if current_latest_tag=$(GH_TOKEN="${github_token}" gh release view --repo "bazelbuild/bazel" --json tagName --jq .tagName 2>/dev/null); then
+ if [[ -n "${current_latest_tag}" ]]; then
+ local highest
+ highest=$(printf '%s\n%s' "${current_latest_tag}" "${release_name}" | sort -V | tail -n 1)
+ if [[ "${release_name}" != "${highest}" ]]; then
+ echo "+++ Version ${release_name} is older than ${current_latest_tag}. Will NOT mark as latest."
+ latest_flag="false"
+ fi
fi
+ else
+ echo "+++ Warning: Could not determine current latest release tag. Will NOT mark as latest to be safe."
+ latest_flag="false"
fi
fi
- # Fix: Use a physical temporary file for notes
- local notes_file=$(mktemp)
- get_release_page > "$notes_file"
+ # Use a subshell so that the EXIT trap for temp file cleanup does not
+ # affect the outer script's traps.
+ (
+ notes_file="$(mktemp)"
+ trap 'rm -f "$notes_file"' EXIT
+ get_release_page > "$notes_file"
- echo "+++ Deploying to GitHub (Tag: ${tag_to_deploy}, Latest: ${latest_flag})"
-
- gh release create "${tag_to_deploy}" \
- "${artifact_dir}"/* \
- --repo "bazelbuild/bazel" \
- --target "${release_branch}" \
- --title "${tag_to_deploy}" \
- --notes-file "$notes_file" \
- ${prerelease_flag} \
- --latest="${latest_flag}"
+ echo "+++ Deploying to GitHub (Tag: ${tag_to_deploy}, Latest: ${latest_flag})"
- rm -f "$notes_file"
+ GH_TOKEN="${github_token}" gh release create "${tag_to_deploy}" \
+ "${artifact_dir}"/* \
+ --repo "bazelbuild/bazel" \
+ --target "${release_branch}" \
+ --title "${tag_to_deploy}" \
+ --notes-file "$notes_file" \
+ ${prerelease_flag} \
+ --latest="${latest_flag}"
+ )
fi
}
@@ -492,4 +499,3 @@
cp "${artifact_dir}"/* "${gcs_working_dir}"
release_to_gcs "${gcs_working_dir}"
}
-