66
77set -eo pipefail
88
9- readonly LATEST=' https://api.github.com/repos/exercism/configlet/releases/latest'
10-
11- case " $( uname) " in
12- Darwin* ) os=' mac' ;;
13- Linux* ) os=' linux' ;;
14- Windows* ) os=' windows' ;;
15- MINGW* ) os=' windows' ;;
16- MSYS_NT-* ) os=' windows' ;;
17- * ) os=' linux' ;;
18- esac
19-
20- case " ${os} " in
21- windows* ) ext=' zip' ;;
22- * ) ext=' tgz' ;;
23- esac
24-
25- case " $( uname -m) " in
26- * 64* ) arch=' 64bit' ;;
27- * 686* ) arch=' 32bit' ;;
28- * 386* ) arch=' 32bit' ;;
29- * ) arch=' 64bit' ;;
30- esac
31-
329curlopts=(
3310 --silent
3411 --show-error
@@ -41,15 +18,25 @@ if [[ -n "${GITHUB_TOKEN}" ]]; then
4118 curlopts+=(--header " authorization: Bearer ${GITHUB_TOKEN} " )
4219fi
4320
44- suffix=" ${os} -${arch} .${ext} "
45-
4621get_download_url () {
47- curl " ${curlopts[@]} " --header ' Accept: application/vnd.github.v3+json' " ${LATEST} " |
22+ local os=" $1 "
23+ local ext=" $2 "
24+ local latest=' https://api.github.com/repos/exercism/configlet/releases/latest'
25+ local arch
26+ case " $( uname -m) " in
27+ x86_64) arch=' x86-64' ;;
28+ * 686* ) arch=' i386' ;;
29+ * 386* ) arch=' i386' ;;
30+ * ) arch=' x86-64' ;;
31+ esac
32+ local suffix=" ${os} _${arch} .${ext} "
33+ curl " ${curlopts[@]} " --header ' Accept: application/vnd.github.v3+json' " ${latest} " |
4834 grep " \" browser_download_url\" : \" .*/download/.*/configlet.*${suffix} \" $" |
4935 cut -d' "' -f4
5036}
5137
5238main () {
39+ local output_dir
5340 if [[ -d ./bin ]]; then
5441 output_dir=" ./bin"
5542 elif [[ $PWD == * /bin ]]; then
@@ -59,8 +46,26 @@ main() {
5946 return 1
6047 fi
6148
62- download_url=" $( get_download_url) "
63- output_path=" ${output_dir} /latest-configlet.${ext} "
49+ local os
50+ case " $( uname) " in
51+ Darwin* ) os=' macos' ;;
52+ Linux* ) os=' linux' ;;
53+ Windows* ) os=' windows' ;;
54+ MINGW* ) os=' windows' ;;
55+ MSYS_NT-* ) os=' windows' ;;
56+ * ) os=' linux' ;;
57+ esac
58+
59+ local ext
60+ case " ${os} " in
61+ windows* ) ext=' zip' ;;
62+ * ) ext=' tar.gz' ;;
63+ esac
64+
65+ echo " Fetching configlet..." >&2
66+ local download_url
67+ download_url=" $( get_download_url " ${os} " " ${ext} " ) "
68+ local output_path=" ${output_dir} /latest-configlet.${ext} "
6469 curl " ${curlopts[@]} " --output " ${output_path} " " ${download_url} "
6570
6671 case " ${ext} " in
@@ -69,6 +74,17 @@ main() {
6974 esac
7075
7176 rm -f " ${output_path} "
77+
78+ local executable_ext
79+ case " ${os} " in
80+ windows* ) executable_ext=' .exe' ;;
81+ * ) executable_ext=' ' ;;
82+ esac
83+
84+ local configlet_path=" ${output_dir} /configlet${executable_ext} "
85+ local configlet_version
86+ configlet_version=" $( ${configlet_path} --version) "
87+ echo " Downloaded configlet ${configlet_version} to ${configlet_path} "
7288}
7389
7490main
0 commit comments