master
 1#!/bin/bash
 2
 3case "$(uname -s)" in
 4    Linux*)     OS="linux";;
 5    Darwin*)    OS="darwin";;
 6    CYGWIN*|MINGW*|MSYS*) OS="windows";;
 7    *)          OS="unknown";;
 8esac
 9
10# detect architecture
11case "$(uname -m)" in
12    x86_64)    ARCH="amd64";;
13    aarch64)   ARCH="arm64";;
14    arm64)     ARCH="arm64";;
15    *)         ARCH="unknown";;
16esac
17
18REPO="kahnwong/swissknife"
19GITHUB="https://api.github.com"
20VERSION=`
21  curl --silent "${GITHUB}/repos/{$REPO}/releases/latest" |
22      grep '"tag_name":' |
23      sed -E 's/.*"([^"]+)".*/\1/'
24`
25VERSION_BINARY=$(echo "${VERSION}" | sed 's/^v//')
26BINARY_NAME="swissknife"
27FILE="${BINARY_NAME}_${VERSION_BINARY}_${OS}_${ARCH}.tar.gz"
28
29# create an isolated extraction directory under /tmp
30TEMP_DIR=$(mktemp -d /tmp/swissknife.XXXXXX) || exit 1
31trap 'rm -rf "$TEMP_DIR"' EXIT
32
33# download
34curl -L -s -o "${TEMP_DIR}/${FILE}" "https://github.com/${REPO}/releases/download/${VERSION}/${FILE}"
35
36# extract
37echo "Extracting ${FILE}..."
38if ! tar -xzvf "${TEMP_DIR}/${FILE}" -C "$TEMP_DIR"; then
39    echo "Error: Failed to extract ${FILE}."
40    exit 1
41fi
42
43# move binary to the current directory
44mv "${TEMP_DIR}/${BINARY_NAME}" ./ || exit 1
45
46# success message
47echo "Successfully downloaded and extracted ${FILE}."