#!/bin/sh set -e # Code generated by godownloader on 2019-07-23T16:35:03Z. DO NOT EDIT. # usage() { this=$1 cat < /dev/null || sudo mkdir -p "$BINDIR" binexe="fossa" if [ "$OS" = "windows" ]; then binexe="${binexe}.exe" fi log_debug "installing binary: $binexe" # Use mv instead of cp, as copying when a binary already exists in that spot can create an invalid binary on macOS mv "${srcdir}/${binexe}" "${BINDIR}/${binexe}" 2> /dev/null || sudo cp "${srcdir}/${binexe}" "${BINDIR}/" log_info "installed ${BINDIR}/${binexe}" } is_supported_platform() { platform=$1 found=1 case "$platform" in windows/amd64) found=0 ;; darwin/amd64) found=0 ;; darwin/arm64) found=0 ;; linux/amd64) found=0 ;; 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" else log_info "checking GitHub for tag '${TAG}'" fi REALTAG=$(github_release "$OWNER/$REPO" "${TAG}") && true if test -z "$REALTAG"; then log_crit "unable to find '${TAG}' - use 'latest' or see https://github.com/${PREFIX}/releases for details" exit 1 fi # if version starts with 'v', remove it TAG="$REALTAG" VERSION=${TAG#v} } adjust_format() { # change format (tar.gz or zip) based on ARCH case ${ARCH} in windows) FORMAT=zip ;; esac true } adjust_os() { # adjust archive name based on OS case $(uname_os) in linux) # Before 3.4.7 fossa was distributed in .zip archives on linux. # 3.4.7 and later distributed fossa in tar.gz because it is more common than zip on linux. if version_less_than "$VERSION" "3.4.7" then FORMAT=zip else FORMAT=tar.gz fi ;; esac true } adjust_arch() { # adjust archive name based on ARCH true } cat /dev/null </dev/null } echoerr() { echo "$@" 1>&2 } _logp=6 log_set_priority() { _logp="$1" } log_priority() { if test -z "$1"; then echo "$_logp" return fi [ "$1" -le "$_logp" ] } log_tag() { case $1 in 0) echo "emerg" ;; 1) echo "alert" ;; 2) echo "crit" ;; 3) echo "err" ;; 4) echo "warning" ;; 5) echo "notice" ;; 6) echo "info" ;; 7) echo "debug" ;; *) echo "$1" ;; esac } log_debug() { log_priority 7 || return 0 echoerr "$(log_prefix)" "$(log_tag 7)" "$@" } log_info() { log_priority 6 || return 0 echoerr "$(log_prefix)" "$(log_tag 6)" "$@" } log_err() { log_priority 3 || return 0 echoerr "$(log_prefix)" "$(log_tag 3)" "$@" } log_crit() { log_priority 2 || return 0 echoerr "$(log_prefix)" "$(log_tag 2)" "$@" } 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" ;; arm64) arch="arm64" ;; x86) arch="386" ;; i686) arch="386" ;; i386) arch="386" ;; aarch64) arch="arm64" ;; armv5*) arch="armv5" ;; armv6*) arch="armv6" ;; armv7*) arch="armv7" ;; 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 -o "${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_curl() { local_file=$1 source_url=$2 header=$3 if [ -n "$header" ]; then HTTP_CODE=$(curl -w '%{HTTP_CODE}' -sL -H "$header" -H "Cache-Control: no-cache" -o "$local_file" "$source_url") || (log_debug "curl command failed." && return 1) fi if [ -z "$header" ]; then HTTP_CODE=$(curl -w '%{HTTP_CODE}' -sL -H "Cache-Control: no-cache" -o "$local_file" "$source_url") || (log_debug "curl command failed." && return 1) fi return 0 } http_download_wget() { local_file=$1 source_url=$2 header=$3 if [ -n "$header" ]; then HTTP_CODE=$(wget -q --header "$header" --no-cache --server-response -O "$local_file" "$source_url" 2>&1 | awk 'NR==1{print $2}') || (log_debug "wget command failed." && return 1) fi if [ -z "$header" ]; then HTTP_CODE=$(wget -q --no-cache --server-response -O "$local_file" "$source_url" 2>&1 | awk 'NR==1{print $2}') || (log_debug "wget command failed." && return 1) fi return 0 } http_download() { log_debug "http_download $2" if is_command curl; then http_download_curl "$@" elif is_command wget; then http_download_wget "$@" else log_crit "http_download unable to find wget or curl" return 1 fi # tar.gz releases were added starting from v3.4.7. # Context: https://github.com/fossas/fossa-cli/pull/1066 case $source_url in *.tar.gz) if [ "$HTTP_CODE" = "404" ]; then log_debug "http_download received 404 from $source_url, trying to download a zip file instead..." FORMAT="zip" TARBALL=${NAME}.${FORMAT} TARBALL_URL=${GITHUB_DOWNLOAD}/${TAG}/${TARBALL} http_download "${tmpdir}/${TARBALL}" "${TARBALL_URL}" "$3" fi ;; esac # wget returns the first status code it finds even if it redirected. Checking # for 302 seems to work consistently with GitHub's API. if [ -n "$HTTP_CODE" ] && [ "$HTTP_CODE" != 200 ] && [ "$HTTP_CODE" != 302 ]; then log_err "http_download received HTTP status $HTTP_CODE from $2" return 1 fi } http_copy() { tmp=$(mktemp) if [ ! -w "$tmp" ]; then log_crit "Generated tempory file ${tmp} is not writable!" fi if [ ! -r "$tmp" ]; then log_crit "Generated tempory file ${tmp} is not readable!" fi http_download "${tmp}" "$1" "$2" || return 1 body=$(cat "$tmp") rm -f "${tmp}" echo "$body" } github_release() { owner_repo=$1 version=$2 test -z "$version" && version="latest" giturl="https://github.com/${owner_repo}/releases/${version}" json=$(http_copy "$giturl" "Accept:application/json") test -z "$json" && return 1 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 <