#!/bin/sh set -e # Code generated by godownloader. DO NOT EDIT. # usage() { this=$1 cat <<EOF $this: download go binaries for client9/misspell Usage: $this [-b] bindir [tag] -b sets bindir or installation directory, Defaults to ./bin [tag] is a tag from https://github.com/client9/misspell/releases If tag is missing, then an attempt to find the latest will be found. Consider setting GITHUB_TOKEN to avoid triggering GitHub rate limits. See the following for more details: https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/ Generated by godownloader https://github.com/goreleaser/godownloader EOF exit 2 } parse_args() { #BINDIR is ./bin unless set be ENV # over-ridden by flag below BINDIR=${BINDIR:-./bin} while getopts "b:h?" arg; do case "$arg" in b) BINDIR="$OPTARG" ;; h | \?) usage "$0" ;; esac done shift $((OPTIND - 1)) TAG=$1 } # this function wraps all the destructive operations # if a curl|bash cuts off the end of the script due to # network, either nothing will happen or will syntax error # out preventing half-done work execute() { TMPDIR=$(mktmpdir) log_debug "downloading tarball ${TARBALL_URL}" http_download "${TMPDIR}/${TARBALL}" "${TARBALL_URL}" log_debug "downloading checksum ${CHECKSUM_URL}" http_download "${TMPDIR}/${CHECKSUM}" "${CHECKSUM_URL}" hash_sha256_verify "${TMPDIR}/${TARBALL}" "${TMPDIR}/${CHECKSUM}" (cd "${TMPDIR}" && untar "${TARBALL}") install -d "${BINDIR}" install "${TMPDIR}/${BINARY}" "${BINDIR}/" log_info "installed as ${BINDIR}/${BINARY}" } is_supported_platform() { platform=$1 found=1 case "$platform" in darwin/amd64) found=0 ;; linux/amd64) found=0 ;; windows/amd64) found=0 ;; esac case "$platform" in darwin/386) found=1 ;; windows/386) found=1 ;; esac return $found } check_platform() { if is_supported_platform "$PLATFORM"; then # optional logging goes here true else log_crit "platform $PLATFORM is not supported. Make sure this script is up-to-date and file request at https://github.com/${PREFIX}/issues/new" exit 1 fi } tag_to_version() { if [ -z "${TAG}" ]; then log_info "checking GitHub for latest tag" TAG=$(github_last_release "$OWNER/$REPO") fi # if version starts with 'v', remove it VERSION=${TAG#v} } adjust_format() { # change format (tar.gz or zip) based on ARCH true } adjust_os() { # adjust archive name based on OS case ${OS} in 386) OS=32bit ;; amd64) OS=64bit ;; darwin) OS=mac ;; esac true } adjust_arch() { # adjust archive name based on ARCH case ${ARCH} in 386) ARCH=32bit ;; amd64) ARCH=64bit ;; darwin) ARCH=mac ;; esac true } cat /dev/null <<EOF ------------------------------------------------------------------------ https://github.com/client9/shlib - portable posix shell functions Public domain - http://unlicense.org https://github.com/client9/shlib/blob/master/LICENSE.md but credit (and pull requests) appreciated. ------------------------------------------------------------------------ EOF is_command() { command -v "$1" >/dev/null } echoerr() { echo "$@" 1>&2 } log_prefix() { echo "$0" } _logp=6 log_set_priority() { _logp="$1" } log_priority() { if test -z "$1"; then echo "$_logp" return fi [ "$1" -ge "$_logp" ] } log_debug() { log_priority 7 && echoerr "$(log_prefix)" "DEBUG" "$@" } log_info() { log_priority 6 && echoerr "$(log_prefix)" "INFO" "$@" } log_err() { log_priority 3 && echoerr "$(log_prefix)" "ERR" "$@" } log_crit() { log_priority 2 && echoerr "$(log_prefix)" "CRIT" "$@" } uname_os() { os=$(uname -s | tr '[:upper:]' '[:lower:]') case "$os" in msys_nt) os="windows" ;; esac echo "$os" } uname_arch() { arch=$(uname -m) case $arch in x86_64) arch="amd64" ;; x86) arch="386" ;; i686) arch="386" ;; i386) arch="386" ;; aarch64) arch="arm64" ;; armv5*) arch="arm5" ;; armv6*) arch="arm6" ;; armv7*) arch="arm7" ;; esac echo ${arch} } uname_os_check() { os=$(uname_os) case "$os" in darwin) return 0 ;; dragonfly) return 0 ;; freebsd) return 0 ;; linux) return 0 ;; android) return 0 ;; nacl) return 0 ;; netbsd) return 0 ;; openbsd) return 0 ;; plan9) return 0 ;; solaris) return 0 ;; windows) return 0 ;; esac log_crit "uname_os_check '$(uname -s)' got converted to '$os' which is not a GOOS value. Please file bug at https://github.com/client9/shlib" return 1 } uname_arch_check() { arch=$(uname_arch) case "$arch" in 386) return 0 ;; amd64) return 0 ;; arm64) return 0 ;; armv5) return 0 ;; armv6) return 0 ;; armv7) return 0 ;; ppc64) return 0 ;; ppc64le) return 0 ;; mips) return 0 ;; mipsle) return 0 ;; mips64) return 0 ;; mips64le) return 0 ;; s390x) return 0 ;; amd64p32) return 0 ;; esac log_crit "uname_arch_check '$(uname -m)' got converted to '$arch' which is not a GOARCH value. Please file bug report at https://github.com/client9/shlib" return 1 } untar() { tarball=$1 case "${tarball}" in *.tar.gz | *.tgz) tar -xzf "${tarball}" ;; *.tar) tar -xf "${tarball}" ;; *.zip) unzip "${tarball}" ;; *) log_err "untar unknown archive format for ${tarball}" return 1 ;; esac } mktmpdir() { test -z "$TMPDIR" && TMPDIR="$(mktemp -d)" mkdir -p "${TMPDIR}" echo "${TMPDIR}" } http_download() { local_file=$1 source_url=$2 header=$3 headerflag='' destflag='' if is_command curl; then cmd='curl --fail -sSL' destflag='-o' headerflag='-H' elif is_command wget; then cmd='wget -q' destflag='-O' headerflag='--header' else log_crit "http_download unable to find wget or curl" return 1 fi if [ -z "$header" ]; then $cmd $destflag "$local_file" "$source_url" else $cmd $headerflag "$header" $destflag "$local_file" "$source_url" fi } github_api() { local_file=$1 source_url=$2 header="" case "$source_url" in https://api.github.com*) test -z "$GITHUB_TOKEN" || header="Authorization: token $GITHUB_TOKEN" ;; esac http_download "$local_file" "$source_url" "$header" } github_last_release() { owner_repo=$1 version=$2 test -z "$version" && version="latest" giturl="https://github.com/${owner_repo}/releases/${version}" json=$(http_download "-" "$giturl" "Accept:application/json") version=$(echo "$json" | tr -s '\n' ' ' | sed 's/.*"tag_name":"//' | sed 's/".*//') test -z "$version" && return 1 echo "$version" } hash_sha256() { TARGET=${1:-/dev/stdin} if is_command gsha256sum; then hash=$(gsha256sum "$TARGET") || return 1 echo "$hash" | cut -d ' ' -f 1 elif is_command sha256sum; then hash=$(sha256sum "$TARGET") || return 1 echo "$hash" | cut -d ' ' -f 1 elif is_command shasum; then hash=$(shasum -a 256 "$TARGET" 2>/dev/null) || return 1 echo "$hash" | cut -d ' ' -f 1 elif is_command openssl; then hash=$(openssl -dst openssl dgst -sha256 "$TARGET") || return 1 echo "$hash" | cut -d ' ' -f a else log_crit "hash_sha256 unable to find command to compute sha-256 hash" return 1 fi } hash_sha256_verify() { TARGET=$1 checksums=$2 if [ -z "$checksums" ]; then log_err "hash_sha256_verify checksum file not specified in arg2" return 1 fi BASENAME=${TARGET##*/} want=$(grep "${BASENAME}" "${checksums}" 2>/dev/null | tr '\t' ' ' | cut -d ' ' -f 1) if [ -z "$want" ]; then log_err "hash_sha256_verify unable to find checksum for '${TARGET}' in '${checksums}'" return 1 fi got=$(hash_sha256 "$TARGET") if [ "$want" != "$got" ]; then log_err "hash_sha256_verify checksum for '$TARGET' did not verify ${want} vs $got" return 1 fi } cat /dev/null <<EOF ------------------------------------------------------------------------ End of functions from https://github.com/client9/shlib ------------------------------------------------------------------------ EOF OWNER=client9 REPO="misspell" BINARY=misspell FORMAT=tar.gz OS=$(uname_os) ARCH=$(uname_arch) PREFIX="$OWNER/$REPO" # use in logging routines log_prefix() { echo "$PREFIX" } PLATFORM="${OS}/${ARCH}" GITHUB_DOWNLOAD=https://github.com/${OWNER}/${REPO}/releases/download uname_os_check "$OS" uname_arch_check "$ARCH" parse_args "$@" check_platform tag_to_version adjust_format adjust_os adjust_arch log_info "found version: ${VERSION} for ${TAG}/${OS}/${ARCH}" NAME=${BINARY}_${VERSION}_${OS}_${ARCH} TARBALL=${NAME}.${FORMAT} TARBALL_URL=${GITHUB_DOWNLOAD}/${TAG}/${TARBALL} CHECKSUM=${BINARY}_${VERSION}_checksums.txt CHECKSUM_URL=${GITHUB_DOWNLOAD}/${TAG}/${CHECKSUM} # Adjust binary name if windows if [ "$OS" = "windows" ]; then BINARY="${BINARY}.exe" fi execute