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 373e9c4
Showing 1 changed file with 17 additions and 34 deletions.
51 changes: 17 additions & 34 deletions lib/releases.sh
Original file line number Diff line number Diff line change
@@ -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}"
}
Expand Down

0 comments on commit 373e9c4

Please sign in to comment.