@@ -19,12 +19,13 @@ if [ -n "${GITHUB_API_TOKEN:-}" ]; then
19
19
curl_opts=(" ${curl_opts[@]} " -H " Authorization: Bearer $GITHUB_API_TOKEN " )
20
20
fi
21
21
22
- # todo sort by only Ammonite version, not Scala version
23
22
sort_versions () {
24
- # Flip it so Ammonite tag comes before Scala version, and use - as the delimiter everywhere
25
- awk -F ' [-.]' ' { print $3 "-" $4 "-" $5 "-" $1 "-" $2 }' |
26
- LC_ALL=C sort -t' -' -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n |
27
- awk -F ' -' ' { print $4 "." $5 "-" $1 "." $2 "." $3 }' # Flip it back to normal
23
+ # Use - as the delimiter everywhere for sort
24
+ awk -F ' [-.]' ' { print $1 "-" $2 "-" $3 "-" $4 "-" $5 }' |
25
+ LC_ALL=C sort -t' -' -k 3,3n -k 4,4n -k 5,5n -k 1,1n -k 2,2n |
26
+ # Put the delimiters back
27
+ awk -F ' -' ' { print $1 "." $2 "-" $3 "." $4 "." $5 }' |
28
+ uniq
28
29
}
29
30
30
31
# Make a query to the GitHub API
@@ -44,18 +45,55 @@ list_all_versions() {
44
45
grep -oE ' "name": "[0-9]+\.[0-9]+-[0-9]+\.[0-9]+\.[0-9]+"' |
45
46
# Extract the asset names
46
47
cut -d ' "' -f 4 |
47
- uniq |
48
+ sort_versions
49
+ }
50
+
51
+ # Get names of assets from unstable releases
52
+ filter_unstable_assets () {
53
+ grep -oE ' "name": "[0-9]+\.[0-9]+-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-[a-z0-9]+"' |
54
+ # Extract the asset names
55
+ cut -d ' "' -f 4
56
+ }
57
+
58
+ list_all_unstable_versions () {
59
+ # The releases response also includes all the assets, so we can just use that
60
+ # instead of querying the assets for each release separately
61
+ releases=$( gh_query releases)
62
+ # e.g. 3.0.0
63
+ latest_unstable_release=$(
64
+ echo $releases |
65
+ grep -oE ' "name": "[0-9]+\.[0-9]\.+[0-9]+"' |
66
+ cut -d ' "' -f 4 |
67
+ sort -t' .' -k 1,1n -k 2,2n -k 3,3n |
68
+ tail -n 1)
69
+ gh_query " releases" |
70
+ filter_unstable_assets |
71
+ # Only keep assets for the latest release
72
+ grep $latest_unstable_release |
73
+ cut -d ' "' -f 1,2 |
48
74
sort_versions
49
75
}
50
76
51
77
download_release () {
52
- local version filename tag url
78
+ local version filename tag url latest
53
79
version=" $1 "
54
80
filename=" $2 "
55
-
56
81
# The Ammonite version is <Scala version>-<Ammonite tag>
57
82
tag=$( cut -d " -" -f 2 <<< " $version" )
58
- url=" $GH_REPO /releases/download/$tag /$version "
83
+
84
+ releases=$( gh_query " releases" )
85
+
86
+ if [[ $releases =~ " \" $version \" " ]]; then
87
+ url=" $GH_REPO /releases/download/$tag /$version "
88
+ else
89
+ latest=$(
90
+ echo $releases |
91
+ filter_unstable_assets |
92
+ grep $version |
93
+ sort -t' -' -k 3,3n -k 4,4 |
94
+ tail -n 1)
95
+ url=" $GH_REPO /releases/download/$tag /$latest "
96
+ fi
59
97
60
98
echo " * Downloading $TOOL_NAME release $version ..."
61
99
curl " ${curl_opts[@]} " \
0 commit comments