Skip to content

Commit a2a7ed8

Browse files
committed
fix: robust latest tag resolution in installer for API and HTML fallback
1 parent 23f9ffa commit a2a7ed8

1 file changed

Lines changed: 17 additions & 9 deletions

File tree

install.sh

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,28 +37,36 @@ command -v uv >/dev/null 2>&1 || {
3737
}
3838
UV_BIN="$(command -v uv)"
3939

40-
# 2. resolve the release tag (GitHub API is used first; fallback keeps old behaviour).
40+
# 2. resolve the release tag (GitHub API is used first; fallback parses latest release page).
4141
if [ "$VERSION" = "latest" ]; then
42+
TAG=""
4243
api_response="$(mktemp)"
43-
if ! curl -fsSL \
44+
if curl -fsSL \
4445
-H "Accept: application/vnd.github+json" \
4546
-H "User-Agent: git-auto-sync-installer" \
4647
"https://api.github.com/repos/$REPO/releases/latest" \
4748
-o "$api_response"; then
49+
TAG="$(grep -m1 -o '\"tag_name\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' "$api_response" \
50+
| sed 's/.*\"tag_name\"[[:space:]]*:[[:space:]]*\"\\([^\"]*\\)\"/\\1/')"
51+
else
4852
rm -f "$api_response"
49-
err "Couldn't reach GitHub to resolve the latest release."
53+
err "Couldn't reach GitHub API to resolve the latest release."
5054
exit 1
5155
fi
52-
TAG="$(sed -n 's/.*"tag_name"[[:space:]]*:[[:space:]]*"\\([^"]*\\)".*/\\1/p' "$api_response" | head -n 1)"
5356
rm -f "$api_response"
5457
if [ -z "$TAG" ] || [ "${TAG#v}" = "$TAG" ]; then
55-
info "GitHub API did not return a release tag, falling back to web redirect resolution."
56-
url="$(curl -fsSLI -o /dev/null -w '%{url_effective}' \
57-
"https://github.com/$REPO/releases/latest")" || {
58+
TAG=""
59+
fi
60+
if [ -z "$TAG" ]; then
61+
info "GitHub API did not return a release tag, resolving from latest release page."
62+
page="$(mktemp)"
63+
if ! curl -fsSL -A "git-auto-sync-installer" "https://github.com/$REPO/releases/latest" -o "$page"; then
64+
rm -f "$page"
5865
err "Couldn't resolve the latest release."
5966
exit 1
60-
}
61-
TAG="${url##*/}"
67+
fi
68+
TAG="$(grep -m1 -o '/'"$REPO"'/releases/tag/v[^\"[:space:]]*' "$page" | sed 's#.*/tag/##' | head -n 1)"
69+
rm -f "$page"
6270
fi
6371
else
6472
TAG="$VERSION"

0 commit comments

Comments
 (0)