diff --git a/bin/list-all b/bin/list-all index 3db9c04..8d9d4d4 100755 --- a/bin/list-all +++ b/bin/list-all @@ -1,22 +1,19 @@ #!/usr/bin/env bash -auth="" +set -eo pipefail + +cmd="curl --silent --location" +releases_path="https://api.github.com/repos/php/php-src/git/refs/tags" + if [ -n "$GITHUB_API_TOKEN" ]; then - auth="-H 'Authorization: token $GITHUB_API_TOKEN'" + cmd="$cmd --header 'Authorization: token $GITHUB_API_TOKEN'" fi -sed="sed" -if hash gsed 2>/dev/null; then - sed="gsed" -fi +sort_versions() { + sed 'h; s/[+-]/./g; s/.p\([[:digit:]]\)/.z\1/; s/$/.z/; G; s/\n/ /' | + LC_ALL=C sort -t. -k 1,1 -k 2,2n -k 3,3n -k 4,4n -k 5,5n | awk '{print $2}' +} -versions=$(curl $auth -s https://api.github.com/repos/php/php-src/git/refs/tags | # Fetch all tags - grep '"ref":' | # Filter by refs - grep 'php-' | # Filter only those related to php-xxxx - $sed 's/\"ref\"://' | # Remove '"ref":' - $sed 's/\"refs\/tags\/php-//' | # Remove '"refs/tags/php-"' - $sed 's/\",//') # Remove last '",' +versions=$(eval "$cmd $releases_path" | grep '"ref": "refs/tags/php-' | tr -d '"ref": "refs/tags/php-' | tr -d ',' | sort_versions | xargs) -# As per the documentation, all versions should be in a single line separated -# by spaces. We use `xargs` for this. -echo $versions | xargs +echo "$versions"