2016-02-29 15:35:45 +08:00
|
|
|
#!/usr/bin/env bash
|
2018-01-22 22:45:18 +08:00
|
|
|
set -eu
|
|
|
|
[ "${BASH_VERSINFO[0]}" -ge 3 ] && set -o pipefail
|
2017-09-03 17:30:59 +08:00
|
|
|
IFS=$'\n\t'
|
2016-02-29 15:35:45 +08:00
|
|
|
|
2017-09-03 17:30:59 +08:00
|
|
|
# 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=\>
|
2021-01-05 06:36:54 +08:00
|
|
|
read -rd \< ENTITY CONTENT
|
2017-09-03 17:30:59 +08:00
|
|
|
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() {
|
2021-01-05 06:36:54 +08:00
|
|
|
XML=$(curl --silent "${BASE_URL}${NEXT_MARKER}")
|
2017-09-03 17:30:59 +08:00
|
|
|
|
|
|
|
while read_dom; do
|
|
|
|
parse_dom
|
2021-01-05 06:36:54 +08:00
|
|
|
done <<< "$XML"
|
2017-09-03 17:30:59 +08:00
|
|
|
}
|
|
|
|
# }
|
|
|
|
|
|
|
|
function loop_versions() {
|
|
|
|
if [[ $TRUNCATED = 'true' ]] ; then
|
|
|
|
get_versions
|
|
|
|
loop_versions
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2018-01-23 10:48:35 +08:00
|
|
|
mysed () {
|
|
|
|
if [ "$(uname | tr '[:upper:]' '[:lower:]' | sed -E 's/(darwin|freebsd)/HERE/')" = "HERE" ] ; then
|
2021-01-05 06:36:54 +08:00
|
|
|
sed -Ee "$1"
|
2018-01-23 10:48:35 +08:00
|
|
|
else
|
2021-01-05 06:36:54 +08:00
|
|
|
sed -re "$1"
|
2018-01-23 10:48:35 +08:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2017-09-03 17:30:59 +08:00
|
|
|
loop_versions
|
|
|
|
|
2021-01-05 06:36:54 +08:00
|
|
|
echo "${VERSIONS[@]}" \
|
2018-01-22 23:43:32 +08:00
|
|
|
| tr ' ' '\n' \
|
2016-02-29 15:35:45 +08:00
|
|
|
| grep '.tar.gz' \
|
2018-01-22 23:43:32 +08:00
|
|
|
| grep '\(linux\|darwin\|freebsd\)' \
|
2019-08-23 08:03:14 +08:00
|
|
|
| grep '\-\(amd64\|386\|armv6l\|armv7l\|arm64\)\.' \
|
2018-01-23 10:48:35 +08:00
|
|
|
| mysed 's/^go([^.]*).([^.]*).([^.]*).*/\1.\2.\3/' \
|
|
|
|
| mysed 's/.(linux|darwin|freebsd|src).*$//' \
|
2016-02-29 15:35:45 +08:00
|
|
|
| uniq \
|
2018-06-27 06:37:04 +08:00
|
|
|
| sort -t. -k 1,1 -k 2,2n -k 3,3n -k 4,4n -k 5,5n \
|
2016-02-29 15:35:45 +08:00
|
|
|
| tr '\n' ' '
|