Created
March 29, 2021 01:41
-
-
Save augustohp/6e11c0b523896f6b4e461af4dcb31129 to your computer and use it in GitHub Desktop.
List terraform versions available (from GitHub releases).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash -e | |
# | |
# Lists terraform releasesusing GitHub API. | |
APP_NAME=$(basename $0) | |
APP_VERSION="1.0.0" | |
OPTION_NUMBER_ONLY="" | |
OPTION_STABLE_ONLY="" | |
OPTION_ORDER="" | |
[[ -n "${DEBUG}" ]] && { set -x; } | |
# Usage: display_help | |
display_help() | |
{ | |
cat <<-EOT | |
Usage: ${APP_NAME} | |
${APP_NAME} <-h|--help> | |
${APP_NAME} <-v|--version> | |
${APP_NAME} [options] | |
Will output latest terraform releases on GitHub. | |
Options: | |
-v | --version Displays script version information. | |
-h | --help Displays this message. | |
-n | --number-only Removes "v" prefix from versions. | |
-s | --stable-only Avoids alpha, beta and release candidates. | |
-o | --order Numerical order versions, olders first. | |
Bugs and suggestions can be sent to https://github.com/augustohp. | |
EOT | |
} | |
# Usage: assert_environment | |
assert_environment() | |
{ | |
for dependency in curl jq sed | |
do | |
command -v "${dependency}" 2>&1 > /dev/null \ | |
|| { echo "Error! Missing dependency ${dependency}." >&2; exit 42; } | |
done | |
} | |
# Usage: list_latest_releases | filter_stable_releases | |
filter_stable_releases() | |
{ | |
if [ -n $OPTION_STABLE_ONLY ] | |
then | |
grep -v '\-alpha' \ | |
| grep -v '\-beta' \ | |
| grep -v '\-rc' | |
fi | |
} | |
# Usage: list_latest_releases | filter_numbers_only | |
filter_numbers_only() | |
{ | |
if [ -n $OPTION_NUMBER_ONLY ] | |
then | |
sed 's/^v//' | |
fi | |
} | |
# Usage: list_latest_releases | filter_order | |
filter_order() | |
{ | |
if [ -n $OPTION_ORDER ] | |
then | |
sort | |
fi | |
} | |
# Usage: list_latest_releases | |
list_latest_releases() | |
{ | |
assert_environment | |
curl \ | |
--silent \ | |
-H "Accept: application/vnd.github.v3+json" \ | |
https://api.github.com/repos/hashicorp/terraform/releases \ | |
| jq ".[] | .tag_name" \ | |
| sed 's/"//g' \ | |
| filter_numbers_only \ | |
| filter_stable_releases \ | |
| filter_order | |
} | |
# Parses options and arguments | |
while :; | |
do | |
# If no argument/option left, stop | |
if [ $# -eq 0 ] | |
then | |
break | |
fi | |
# Matches current option/argument, configuring environment | |
case "$1" in | |
-h|--help|help) | |
display_help | |
exit 1 | |
;; | |
-v|--version|version) | |
echo "${APP_NAME} ${APP_VERSION}" | |
exit 1 | |
;; | |
-n|--number-only) | |
OPTION_NUMBER_ONLY=1 | |
;; | |
-s|--stable-only) | |
OPTION_STABLE_ONLY=1 | |
;; | |
-o|--order) | |
OPTION_ORDER=1 | |
;; | |
*) | |
echo "Error! Unrecognized '${1}' as option or argument." >&2 | |
exit 2 | |
;; | |
esac | |
# Pop argument list, parses next argument on following iteration | |
shift | |
done | |
list_latest_releases |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment