Skip to content

Commit

Permalink
simplify getting releases by reducing api queries to github api
Browse files Browse the repository at this point in the history
  • Loading branch information
Sunnatillo committed Apr 18, 2023
1 parent 0d4d90c commit b6a2354
Showing 1 changed file with 10 additions and 34 deletions.
44 changes: 10 additions & 34 deletions lib/releases.sh
Original file line number Diff line number Diff line change
@@ -1,44 +1,20 @@
#!/bin/bash

function get_latest_release() {
# get last page
# set url to get all releases from github
url="${1}?per_page=1000"

# 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 "${2:-}" -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 "${2:-}" -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}"
}
Expand Down

0 comments on commit b6a2354

Please sign in to comment.