14
14
set -u
15
15
16
16
SCARB_REPO=" https://github.com/software-mansion/scarb"
17
+ SCARB_NIGHTLIES_REPO=" https://github.com/software-mansion/scarb-nightlies"
17
18
XDG_DATA_HOME=" ${XDG_DATA_HOME:- " ${HOME} /.local/share" } "
18
19
INSTALL_ROOT=" ${XDG_DATA_HOME} /scarb-install"
19
20
LOCAL_BIN=" ${HOME} /.local/bin"
@@ -56,7 +57,6 @@ main() {
56
57
esac
57
58
done
58
59
59
- local _requested_ref=" latest"
60
60
local _requested_version=" latest"
61
61
local _do_modify_path=1
62
62
while getopts " :hpv:" opt; do
@@ -69,7 +69,6 @@ main() {
69
69
exit 0
70
70
;;
71
71
v)
72
- _requested_ref=" tag/v${OPTARG} "
73
72
_requested_version=" $OPTARG "
74
73
;;
75
74
\? )
@@ -81,7 +80,7 @@ main() {
81
80
esac
82
81
done
83
82
84
- resolve_version " $_requested_version " " $_requested_ref " || return 1
83
+ resolve_version " $_requested_version " || return 1
85
84
local _resolved_version=$RETVAL
86
85
assert_nz " $_resolved_version " " resolved_version"
87
86
@@ -400,19 +399,47 @@ get_architecture() {
400
399
401
400
resolve_version () {
402
401
local _requested_version=$1
403
- local _requested_ref=$2
402
+
403
+ local _ref
404
+ local _repo
405
+
406
+ if echo " $_requested_version " | grep -q " nightly" ; then
407
+ if [ " $_requested_version " = " nightly" ]; then
408
+ _requested_version=" $( get_latest_nightly) "
409
+ fi
410
+ _repo=" $SCARB_NIGHTLIES_REPO "
411
+ _ref=" tag/${_requested_version} "
412
+ else
413
+ _repo=" $SCARB_REPO "
414
+ if [ " $_requested_version " = " latest" ]; then
415
+ _ref=" latest"
416
+ else
417
+ _ref=" tag/v${_requested_version} "
418
+ fi
419
+ fi
404
420
405
421
local _response
406
422
407
- say " retrieving $_requested_version version from ${SCARB_REPO } ..."
408
- _response=$( ensure curl -Ls -H ' Accept: application/json' " ${SCARB_REPO } /releases/${_requested_ref } " )
423
+ say " retrieving $_requested_version version from ${_repo } ..."
424
+ _response=$( ensure curl -Ls -H ' Accept: application/json' " ${_repo } /releases/${_ref } " )
409
425
if [ " {\" error\" :\" Not Found\" }" = " $_response " ]; then
410
426
err " version $_requested_version not found"
411
427
fi
412
428
413
429
RETVAL=$( echo " $_response " | sed -e ' s/.*"tag_name":"\([^"]*\)".*/\1/' )
414
430
}
415
431
432
+ sort_versions () {
433
+ sed ' h; s/[+-]/./g; s/.p\([[:digit:]]\)/.z\1/; s/$/.z/; G; s/\n/ /' |
434
+ LC_ALL=C sort -t. -k 1,1 -k 2,2n -k 3,3n -k 4,4n -k 5,5n | awk ' {print $2}'
435
+ }
436
+
437
+ get_latest_nightly () {
438
+ git ls-remote --tags --refs " $SCARB_NIGHTLIES_REPO " |
439
+ grep -o ' refs/tags/.*' | cut -d/ -f3- |
440
+ sort_versions | tail -n1 | xargs echo
441
+ }
442
+
416
443
create_install_dir () {
417
444
local _requested_version=$1
418
445
@@ -434,8 +461,16 @@ download() {
434
461
local _installdir=$3
435
462
local _tempdir=$4
436
463
464
+ local _repo
465
+
466
+ if echo " $_requested_version " | grep -q " nightly" ; then
467
+ _repo=" $SCARB_NIGHTLIES_REPO "
468
+ else
469
+ _repo=" $SCARB_REPO "
470
+ fi
471
+
437
472
local _tarball=" scarb-${_resolved_version} -${_arch} .tar.gz"
438
- local _url=" ${SCARB_REPO } /releases/download/${_resolved_version} /${_tarball} "
473
+ local _url=" ${_repo } /releases/download/${_resolved_version} /${_tarball} "
439
474
local _dl=" $_tempdir /scarb.tar.gz"
440
475
441
476
say " downloading ${_tarball} ..."
0 commit comments