diff options
author | casey <casey@users.noreply.github.com> | 2024-02-20 05:42:14 +0000 |
---|---|---|
committer | casey <casey@users.noreply.github.com> | 2024-02-20 05:42:14 +0000 |
commit | 0f83e6f4b822dce7e48ffceb8ce1620e32d791dd (patch) | |
tree | 296f96d58d5ed1f3c8e57bf7abfab67f6153dd65 | |
parent | a1cd254683165f2104bc48de65d532d4fa4f3f1e (diff) |
-rwxr-xr-x | install.sh | 48 |
1 files changed, 26 insertions, 22 deletions
@@ -1,11 +1,15 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh -set -euo pipefail +set -eu -if [ ! -z ${GITHUB_ACTIONS-} ]; then +if [ -n "${GITHUB_ACTIONS-}" ]; then set -x fi +# Check pipefail support in a subshell, ignore if unsupported +# shellcheck disable=SC3040 +(set -o pipefail 2> /dev/null) && set -o pipefail + help() { cat <<'EOF' Install a binary release of a just hosted on GitHub @@ -24,26 +28,25 @@ OPTIONS: EOF } -git=casey/just crate=just url=https://github.com/casey/just releases=$url/releases say() { - echo "install: $@" >&2 + echo "install: $*" >&2 } err() { - if [ ! -z ${td-} ]; then + if [ -n "${td-}" ]; then rm -rf "$td" fi - say "error: $@" + say "error: $*" exit 1 } need() { - if ! command -v $1 > /dev/null 2>&1; then + if ! command -v "$1" > /dev/null 2>&1; then err "need $1 (command not found)" fi } @@ -82,20 +85,20 @@ need mkdir need mktemp need tar -if [ -z ${tag-} ]; then +if [ -z "${tag-}" ]; then need grep need cut fi -if [ -z ${target-} ]; then +if [ -z "${target-}" ]; then need cut fi -if [ -z ${dest-} ]; then +if [ -z "${dest-}" ]; then dest="$HOME/bin" fi -if [ -z ${tag-} ]; then +if [ -z "${tag-}" ]; then tag=$( curl --proto =https --tlsv1.2 -sSf \ https://api.github.com/repos/casey/just/releases/latest | @@ -104,12 +107,12 @@ if [ -z ${tag-} ]; then ) fi -if [ -z ${target-} ]; then +if [ -z "${target-}" ]; then # bash compiled with MINGW (e.g. git-bash, used in github windows runners), # unhelpfully includes a version suffix in `uname -s` output, so handle that. # e.g. MINGW64_NT-10-0.19044 kernel=$(uname -s | cut -d- -f1) - uname_target="`uname -m`-$kernel" + uname_target="$(uname -m)-$kernel" case $uname_target in aarch64-Linux) target=aarch64-unknown-linux-musl;; @@ -119,7 +122,8 @@ if [ -z ${target-} ]; then x86_64-MINGW64_NT) target=x86_64-pc-windows-msvc;; x86_64-Windows_NT) target=x86_64-pc-windows-msvc;; *) - err 'Could not determine target from output of `uname -m`-`uname -s`, please use `--target`:' $uname_target + # shellcheck disable=SC2016 + err 'Could not determine target from output of `uname -m`-`uname -s`, please use `--target`:' "$uname_target" ;; esac fi @@ -141,17 +145,17 @@ say "Archive: $archive" td=$(mktemp -d || mktemp -d -t tmp) if [ "$extension" = "zip" ]; then - curl --proto =https --tlsv1.2 -sSfL $archive > $td/just.zip - unzip -d $td $td/just.zip + curl --proto =https --tlsv1.2 -sSfL "$archive" > "$td/just.zip" + unzip -d "$td" "$td/just.zip" else - curl --proto =https --tlsv1.2 -sSfL $archive | tar -C $td -xz + curl --proto =https --tlsv1.2 -sSfL "$archive" | tar -C "$td" -xz fi -if [ -e "$dest/just" ] && [ $force = false ]; then +if [ -e "$dest/just" ] && [ "$force" = false ]; then err "\`$dest/just\` already exists" else - mkdir -p $dest - install -m 755 "$td/just" $dest + mkdir -p "$dest" + install -m 755 "$td/just" "$dest" fi -rm -rf $td +rm -rf "$td" |