diff --git a/lib/releases.sh b/lib/releases.sh index e213e51fa..9bc2a7437 100644 --- a/lib/releases.sh +++ b/lib/releases.sh @@ -1,44 +1,27 @@ #!/bin/bash function get_latest_release() { - # get last page + + # fail when release_path is not passed + local release_path="${1:?no release path is given}" + + # set url to get all releases from github + url="${release_path}?per_page=100" + + # fail when release is not passed + local release="${2:?no release given}" + + # This gets the latest release as vx.y.z or vx.y.z-rc.0, including any version with a suffix starting with - , for example -rc.0 + # The order is exactly as released in Github. + # Downside is that selecting official releases only isn't possible, while pre-release + # selection is possible given specific enough prefix, like v1.3.0-pre + if [ -z "${GITHUB_TOKEN:-}" ]; then - last_page="$(curl -s -I "${1}" | grep '^link:' | sed -e 's/^link:.*page=//g' -e 's/>.*$//g')" + release_tag=$(curl -sL "${url}" | jq .[].name -r | grep -E "${release}" -m 1) else - last_page="$(curl -s -I "${1}" -H "Authorization: token $GITHUB_TOKEN" | grep '^link:' | sed -e 's/^link:.*page=//g' -e 's/>.*$//g')" + release_tag=$(curl -sL "${url}" -H "Authorization: token ${GITHUB_TOKEN}" | jq .[].name -r | grep -E "${release}" -m 1) fi - # default last page to 1 - last_page="${last_page:-1}" - - set +x - - for current_page in $(seq 1 "$last_page"); do - - url="${1}?page=${current_page}" - if [ -z "${GITHUB_TOKEN:-}" ]; then - release="$(curl -sL "${url}")" || { set -x && exit 1; } - else - release="$(curl -H "Authorization: token ${GITHUB_TOKEN}" -sL "${url}")" || { set -x && exit 1; } - fi - - # This gets the latest release as vx.y.z or vx.y.z-rc.0, including any version with a suffix starting with - , for example -rc.0 - # The order is exactly as released in Github. - # Downside is that selecting official releases only isn't possible, while pre-release - # selection is possible given specific enough prefix, like v1.3.0-pre - release_tag="$(echo "${release}" | jq -r "[.[].tag_name | select( startswith(\"${2:-}\"))] | .[0]")" - # if release tag found - if [[ "${release_tag}" != "null" ]]; then - break - fi - - done - - set -x - # if not found - if [[ "${release_tag}" == "null" ]]; then - exit 1 - fi # shellcheck disable=SC2005 echo "${release_tag}" }