@@ -70,6 +70,7 @@ function usageText {
70
70
echo ' curl-authenticated - use curl authenticated with the token from the --token option'
71
71
echo ' curl - use curl without token - needs jq to parse rest response'
72
72
echo ' archive=<archive> - use tar archive as release'
73
+ echo ' -v/--release-version Specify explicit release version (uses latest version by default)'
73
74
echo " -s/--service-directory[$service_directory ]"
74
75
echo ' directory for service files'
75
76
echo " -c/--configuration-directory[$configuration_directory ]"
@@ -92,6 +93,7 @@ function usage {
92
93
}
93
94
94
95
authorization_token=' '
96
+ release_version=' '
95
97
release_fetch_mode_set=' false'
96
98
97
99
while [[ $# -gt 0 ]]; do
@@ -124,6 +126,14 @@ while [[ $# -gt 0 ]]; do
124
126
usage ' the --directory option needs an argument'
125
127
fi
126
128
;;
129
+ -v|--release-version)
130
+ if [ " $value " ]; then
131
+ release_version=" $value "
132
+ shift
133
+ else
134
+ usage ' the --release-version option needs an argument'
135
+ fi
136
+ ;;
127
137
-r|--release-fetch-mode)
128
138
release_fetch_mode_set=' true'
129
139
case $value in
@@ -207,6 +217,10 @@ if [ "${release_fetch_mode}" == 'curl-authenticated' ] && [ "${authorization_tok
207
217
usage " '--release-fetch-mode' with option 'curl-authenticated' needs also '--token' to be specified"
208
218
fi
209
219
220
+ if [ " ${release_fetch_mode} " == ' archive' ] && [ " ${release_version} " != ' ' ]; then
221
+ usage " '--release-fetch-mode' with option 'archive' doesn't support a specific release version (--release-version option)"
222
+ fi
223
+
210
224
if [ " ${release_fetch_mode} " == ' unknown' ]; then
211
225
usage " please specify '--release-fetch-mode' as no default option was found"
212
226
fi
254
268
255
269
github_args=(--location ${authorization_args[@]+" ${authorization_args[@]} " } --header ' X-GitHub-Api-Version: 2022-11-28' )
256
270
257
- # shellcheck disable=SC2016
258
- query=' query ($user: String!, $repo: String!) { repository(owner: $user, name: $repo) { latestRelease { releaseAssets(first: 10) { nodes { contentType url } } } } }'
271
+ if [ -z " $release_version " ]; then
272
+ release_rest_path=' latest'
273
+ # shellcheck disable=SC2016
274
+ query=' query ($user: String!, $repo: String!) { repository(owner: $user, name: $repo) { latestRelease { releaseAssets(first: 10) { nodes { contentType url } } } } }'
275
+ else
276
+ release_rest_path=" tags/$release_version "
277
+ # shellcheck disable=SC2016
278
+ query=' query ($user: String!, $repo: String!, $release: String!) { repository(owner: $user, name: $repo) { release(tagName: $release) { releaseAssets(first: 10) { nodes { contentType url } } } } }'
279
+ fi
259
280
260
281
function extractUrlFromGraphqlQuery() {
261
282
local response=$1
262
283
if [[ -n $( command -v jq || echo ' ' ) ]]; then
263
- jq --raw-output ' .data.repository.latestRelease.releaseAssets.nodes | map(select(.contentType == "application/gzip"))[0].url' <<< " $response"
284
+ if [ -z " $release_version " ]; then
285
+ jq --raw-output ' .data.repository.latestRelease.releaseAssets.nodes | map(select(.contentType == "application/gzip"))[0].url' <<< " $response"
286
+ else
287
+ jq --raw-output ' .data.repository.release.releaseAssets.nodes | map(select(.contentType == "application/gzip"))[0].url' <<< " $response"
288
+ fi
264
289
else
265
290
local response_tmp=" ${response#* \" contentType\" : \" application\/ gzip\" ,\" url\" : \" } "
266
291
echo " ${response_tmp%% \" * } "
@@ -281,7 +306,7 @@ archive)
281
306
;;
282
307
gh)
283
308
echo ' download latest release data via gh commandline tool' >&2
284
- response=" $( gh api graphql -F ' user=EdwarDDay' -F ' repo=kotlin-server-scripts' -f " query=$query " ) "
309
+ response=" $( gh api graphql -F ' user=EdwarDDay' -F ' repo=kotlin-server-scripts' -F " release= $release_version " - f " query=$query " ) "
285
310
url=" $( extractUrlFromGraphqlQuery " $response " ) "
286
311
downloadBinary
287
312
;;
@@ -291,7 +316,8 @@ curl-authenticated)
291
316
\" query\" :\" $query \" ,
292
317
\" variables\" :{
293
318
\" user\" :\" EdwarDDay\" ,
294
- \" repo\" :\" kotlin-server-scripts\"
319
+ \" repo\" :\" kotlin-server-scripts\" ,
320
+ \" release\" :\" $release_version \"
295
321
}
296
322
}"
297
323
response=" $( curl --request POST " ${github_args[@]} " --fail --silent --url ' https://api.github.com/graphql' --data " $data " ) "
@@ -301,7 +327,7 @@ curl-authenticated)
301
327
# curl
302
328
* )
303
329
echo ' download latest release data via github rest endpoint and jq' >&2
304
- url=" $( curl --request GET " ${github_args[@]} " --fail --silent --url ' https://api.github.com/repos/EdwarDDay/kotlin-server-scripts/releases/latest ' | jq --raw-output ' .assets | map(select(.content_type == "application/gzip"))[0].url' ) "
330
+ url=" $( curl --request GET " ${github_args[@]} " --fail --silent --url " https://api.github.com/repos/EdwarDDay/kotlin-server-scripts/releases/$release_rest_path " | jq --raw-output ' .assets | map(select(.content_type == "application/gzip"))[0].url' ) "
305
331
downloadBinary
306
332
esac
307
333
0 commit comments