-
-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Sync fetch-configlet script to all tracks (#267)
Changes to the fetch-configlet scripts on tracks: Print success message Make some variables local Support new configlet release naming scheme
- Loading branch information
1 parent
4cda626
commit ceface8
Showing
1 changed file
with
90 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
#!/usr/bin/env bash | ||
|
||
# This file is a copy of the | ||
# https://github.com/exercism/configlet/blob/main/scripts/fetch-configlet file. | ||
# Please submit bugfixes/improvements to the above file to ensure that all tracks benefit from the changes. | ||
|
||
set -eo pipefail | ||
|
||
curlopts=( | ||
--silent | ||
--show-error | ||
--fail | ||
--location | ||
--retry 3 | ||
) | ||
|
||
if [[ -n "${GITHUB_TOKEN}" ]]; then | ||
curlopts+=(--header "authorization: Bearer ${GITHUB_TOKEN}") | ||
fi | ||
|
||
get_download_url() { | ||
local os="$1" | ||
local ext="$2" | ||
local latest='https://api.github.com/repos/exercism/configlet/releases/latest' | ||
local arch | ||
case "$(uname -m)" in | ||
x86_64) arch='x86-64' ;; | ||
*686*) arch='i386' ;; | ||
*386*) arch='i386' ;; | ||
*) arch='x86-64' ;; | ||
esac | ||
local suffix="${os}_${arch}.${ext}" | ||
curl "${curlopts[@]}" --header 'Accept: application/vnd.github.v3+json' "${latest}" | | ||
grep "\"browser_download_url\": \".*/download/.*/configlet.*${suffix}\"$" | | ||
cut -d'"' -f4 | ||
} | ||
|
||
main() { | ||
local output_dir | ||
if [[ -d ./bin ]]; then | ||
output_dir="./bin" | ||
elif [[ $PWD == */bin ]]; then | ||
output_dir="$PWD" | ||
else | ||
echo "Error: no ./bin directory found. This script should be ran from a repo root." >&2 | ||
return 1 | ||
fi | ||
|
||
local os | ||
case "$(uname)" in | ||
Darwin*) os='macos' ;; | ||
Linux*) os='linux' ;; | ||
Windows*) os='windows' ;; | ||
MINGW*) os='windows' ;; | ||
MSYS_NT-*) os='windows' ;; | ||
*) os='linux' ;; | ||
esac | ||
|
||
local ext | ||
case "${os}" in | ||
windows*) ext='zip' ;; | ||
*) ext='tar.gz' ;; | ||
esac | ||
|
||
echo "Fetching configlet..." >&2 | ||
local download_url | ||
download_url="$(get_download_url "${os}" "${ext}")" | ||
local output_path="${output_dir}/latest-configlet.${ext}" | ||
curl "${curlopts[@]}" --output "${output_path}" "${download_url}" | ||
|
||
case "${ext}" in | ||
*zip) unzip "${output_path}" -d "${output_dir}" ;; | ||
*) tar xzf "${output_path}" -C "${output_dir}" ;; | ||
esac | ||
|
||
rm -f "${output_path}" | ||
|
||
local executable_ext | ||
case "${os}" in | ||
windows*) executable_ext='.exe' ;; | ||
*) executable_ext='' ;; | ||
esac | ||
|
||
local configlet_path="${output_dir}/configlet${executable_ext}" | ||
local configlet_version | ||
configlet_version="$(${configlet_path} --version)" | ||
echo "Downloaded configlet ${configlet_version} to ${configlet_path}" | ||
} | ||
|
||
main |