2021-07-09 13:41:23 +02:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
set -eo pipefail
|
|
|
|
|
2021-07-09 13:49:33 +02:00
|
|
|
SCAFFOLD_VERSION="${SCAFFOLD_VERSION:-0.0.3}"
|
|
|
|
RELEASE_INFO_URL="https://forge.cadoles.com/api/v1/repos/wpetit/scaffold/releases/tags/${SCAFFOLD_VERSION}"
|
2021-07-09 13:41:23 +02:00
|
|
|
|
|
|
|
function assert_command_available {
|
|
|
|
local command=$1
|
|
|
|
local command_path=$(which $command)
|
|
|
|
|
|
|
|
if [ -z "$command_path" ]; then
|
|
|
|
echo "The '$command' command could not be found. Please install it before using this script." 1>&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
function fetch_release_info {
|
|
|
|
curl -s -H "accept: application/json" -XGET "${RELEASE_INFO_URL}"
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_archive_name {
|
|
|
|
local os="$(get_normalized_os)"
|
|
|
|
local arch="$(get_normalized_arch)"
|
|
|
|
echo "scaffold-${os}-${arch}.tar.gz"
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_normalized_os {
|
|
|
|
echo "$(uname -s | tr '[:upper:]' '[:lower:]')"
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_normalized_arch {
|
|
|
|
local arch=$(uname -m)
|
|
|
|
case $(uname -m) in
|
|
|
|
i?86) arch="386" ;;
|
|
|
|
x86_64) arch="amd64" ;;
|
|
|
|
arm[4567]*) arch="arm" ;;
|
|
|
|
arm[8]*) arch="arm64" ;;
|
|
|
|
*) echo 1>&2 "Unsupported architecture '${arch}' !"; exit 1 ;;
|
|
|
|
esac
|
|
|
|
echo "$arch"
|
|
|
|
}
|
|
|
|
|
|
|
|
function find_attachment_url {
|
|
|
|
local release_info=$1
|
|
|
|
local expected_attachment_name=$2
|
|
|
|
|
|
|
|
echo "${release_info}" | jq -r ".assets[] | select(.name == \"${expected_attachment_name}\") | .browser_download_url"
|
|
|
|
}
|
|
|
|
|
|
|
|
function download_attachment {
|
|
|
|
local attachment_url=$1
|
|
|
|
local attachment_name=$2
|
|
|
|
|
|
|
|
curl -o "${attachment_name}" "$attachment_url"
|
|
|
|
}
|
|
|
|
|
|
|
|
function main {
|
|
|
|
assert_command_available 'curl'
|
|
|
|
assert_command_available 'jq'
|
|
|
|
assert_command_available 'tar'
|
|
|
|
assert_command_available 'tr'
|
|
|
|
|
|
|
|
local archive_name="$(get_archive_name)"
|
|
|
|
|
|
|
|
echo "Fetching scaffold release '${SCAFFOLD_VERSION}' informations..."
|
|
|
|
local release_info="$(fetch_release_info)"
|
|
|
|
|
|
|
|
local archive_url=$(find_attachment_url "$release_info" "$archive_name")
|
|
|
|
|
|
|
|
if [ -z "$archive_url" ]; then
|
|
|
|
echo 1>&2 "Could not find archive url !"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
local tmpdir=$(mktemp -d)
|
|
|
|
|
|
|
|
(
|
|
|
|
cd "${tmpdir}";
|
|
|
|
|
|
|
|
echo "Downloading release file '${archive_name}' to '${tmpdir}'..."
|
|
|
|
download_attachment "${archive_url}" "${archive_name}"
|
|
|
|
|
|
|
|
echo "Extracting archive..."
|
|
|
|
tar -xzf "${archive_name}"
|
|
|
|
|
|
|
|
local dirname="$(echo "${archive_name}" | cut -f 1 -d '.')"
|
|
|
|
|
|
|
|
echo "Copying scaffold binary to /usr/local/bin..."
|
|
|
|
sudo cp -i "${dirname}/bin/scaffold" /usr/local/bin/
|
|
|
|
)
|
|
|
|
|
|
|
|
rm -rf "${tmpdir}"
|
|
|
|
|
|
|
|
echo "Done."
|
|
|
|
}
|
|
|
|
|
|
|
|
main
|