blob: 305a748f6d7049b6835a622696d73ca9f86fb057 [file] [log] [blame] [edit]
#!/bin/bash
set -eu
function github-rest-api {
local GITHUB_REST_API=$1
local GITHUB_API_HEADER_ACCEPT="Accept: application/vnd.github.v3+json"
# Grab the GH_TOKEN or else default to an empty string.
local GITHUB_TOKEN="${GH_TOKEN:-}"
if [ -z "$GITHUB_TOKEN" ]; then
curl -s $GITHUB_REST_API -H $GITHUB_API_HEADER_ACCEPT
else
curl -s $GITHUB_REST_API \
-H $GITHUB_API_HEADER_ACCEPT \
-H "authorization: Bearer $GITHUB_TOKEN"
fi
}
function github-latest-release-tag {
local REPO_NAME=$1
# Grab the last two latest releases:
# (We skip the latest release if we haven't set release notes yet).
local RELEASE_API="https://api.github.com/repos/$REPO_NAME/releases?per_page=2"
# This gets the latest release info (as json) from github.
local RELEASE_JSON=$(github-rest-api $RELEASE_API)
# This pulls out the "body" from the json (i.e. the release notes)
local RELEASE_NOTES=$(echo $RELEASE_JSON | jq '.[0].body')
if [ "$RELEASE_NOTES" ]
then
# Return the latest release tag
echo $RELEASE_JSON | jq '.[0].tag_name'
else
# If there are no release notes in the latest release then we use the
# 2nd most latest version since we don't want to update the version until
# the release notes are set.
echo "Ignoring the latest release since the release notes have not been set."
echo "Using the previous release's version as latest."
# Return the 2nd most recent release tag
echo $RELEASE_JSON | jq '.[1].tag_name'
fi
}
function dagger-latest-release {
# Get the latest Dagger release tag, e.g. "dagger-2.31.2" or "dagger-2.32"
local DAGGER_RELEASE_TAG=$(github-latest-release-tag "google/dagger")
# Converts the "tag_name" to a version, e.g. "dagger-2.32" => "2.32"
echo $DAGGER_RELEASE_TAG | grep -oP "(?<=dagger-)\d+\.\d+(\.\d+)?"
}
type jq >/dev/null 2>&1 || {
echo >&2 "jq is not installed. Try 'sudo apt-get install jq'.";
exit 1;
}
dagger-latest-release