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}."