This commit is contained in:
+11
-8
@@ -124,15 +124,18 @@ download() {
|
||||
release_asset_url() {
|
||||
asset_name=$1
|
||||
if [ -n "$RELEASE_API_URL" ]; then
|
||||
asset_url=$(jq -er --arg name "$asset_name" \
|
||||
'.assets[] | select(.name == $name) | .browser_download_url
|
||||
| strings | select(startswith("https://") or startswith("http://"))' \
|
||||
"$WORK_DIR/release-api.json" | head -n 1) || return 1
|
||||
jq -e --arg name "$asset_name" 'any(.assets[]?; .name == $name)' \
|
||||
"$WORK_DIR/release-api.json" >/dev/null || return 1
|
||||
release_tag=$(jq -er '.tag_name | strings
|
||||
| select(test("^v[0-9A-Za-z][0-9A-Za-z._+-]{0,127}$"))' \
|
||||
"$WORK_DIR/release-api.json") || return 1
|
||||
api_origin=$(printf '%s' "$RELEASE_API_URL" | sed -E 's#^(https?://[^/]+).*$#\1#')
|
||||
case "$asset_url" in
|
||||
"$api_origin"/*) printf '%s\n' "$asset_url" ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
repo_path=$(printf '%s' "$RELEASE_API_URL" | sed -nE \
|
||||
's#^https?://[^/]+/api/v1/repos/([A-Za-z0-9._-]+/[A-Za-z0-9._-]+)/releases/(latest|tags/[^/?#]+)$#\1#p')
|
||||
[ -n "$repo_path" ] || return 1
|
||||
encoded_tag=$(jq -rn --arg value "$release_tag" '$value | @uri')
|
||||
encoded_asset=$(jq -rn --arg value "$asset_name" '$value | @uri')
|
||||
printf '%s/%s/releases/download/%s/%s\n' "$api_origin" "$repo_path" "$encoded_tag" "$encoded_asset"
|
||||
else
|
||||
printf '%s/%s\n' "${RELEASE_BASE_URL%/}" "$asset_name"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user