asdf-golang/bin/list-all
Kenny Parnell b1990b0a23
Add bin/download per latest asdf guidelines (#45)
- Creates a temporary directory if using an older version of asdf.
- Install delegates to bin/download if using an older version of asdf.
2021-01-04 17:36:54 -05:00

68 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eu
[ "${BASH_VERSINFO[0]}" -ge 3 ] && set -o pipefail
IFS=$'\n\t'
# This method is not stable, according to https://github.com/golang/go/issues/21667#issuecomment-325457742
BASE_URL='https://storage.googleapis.com/golang?marker='
NEXT_MARKER=''
TRUNCATED='true'
# Shamelessly stolen from: https://stackoverflow.com/questions/893585/how-to-parse-xml-in-bash {
function read_dom() {
local IFS=\>
read -rd \< ENTITY CONTENT
local RET=$?
TAG_NAME=${ENTITY%% *}
return $RET
}
function parse_dom() {
if [[ $TAG_NAME = "IsTruncated" ]] ; then
#echo "Is this page truncated: $CONTENT"
TRUNCATED=$CONTENT
elif [[ $TAG_NAME = "NextMarker" ]] ; then
#echo "What is the next marker: $CONTENT"
NEXT_MARKER=$CONTENT
elif [[ $TAG_NAME = "Key" ]] ; then
VERSIONS+=("${CONTENT}")
fi
}
function get_versions() {
XML=$(curl --silent "${BASE_URL}${NEXT_MARKER}")
while read_dom; do
parse_dom
done <<< "$XML"
}
# }
function loop_versions() {
if [[ $TRUNCATED = 'true' ]] ; then
get_versions
loop_versions
fi
}
mysed () {
if [ "$(uname | tr '[:upper:]' '[:lower:]' | sed -E 's/(darwin|freebsd)/HERE/')" = "HERE" ] ; then
sed -Ee "$1"
else
sed -re "$1"
fi
}
loop_versions
echo "${VERSIONS[@]}" \
| tr ' ' '\n' \
| grep '.tar.gz' \
| grep '\(linux\|darwin\|freebsd\)' \
| grep '\-\(amd64\|386\|armv6l\|armv7l\|arm64\)\.' \
| mysed 's/^go([^.]*).([^.]*).([^.]*).*/\1.\2.\3/' \
| mysed 's/.(linux|darwin|freebsd|src).*$//' \
| uniq \
| sort -t. -k 1,1 -k 2,2n -k 3,3n -k 4,4n -k 5,5n \
| tr '\n' ' '