#!/bin/bash { set -e set -u #WEBI_PKG= #WEBI_NAME= # TODO should this be BASEURL instead? #WEBI_HOST= #WEBI_RELEASES= #WEBI_CSV= #WEBI_TAG= #WEBI_VERSION= #WEBI_MAJOR= #WEBI_MINOR= #WEBI_PATCH= # TODO not sure if BUILD is the best name for this #WEBI_BUILD= #WEBI_LTS= #WEBI_CHANNEL= #WEBI_EXT= #WEBI_PKG_URL= #WEBI_PKG_FILE= export WEBI_HOST ## ## Set up tmp, download, and install directories ## WEBI_TMP=${WEBI_TMP:-"$(mktemp -d -t webinstall-${WEBI_PKG:-}.XXXXXXXX)"} mkdir -p "$HOME/Downloads" mkdir -p "$HOME/.local/bin" mkdir -p "$HOME/.local/opt" ## ## Detect http client ## set +e export WEBI_CURL="$(command -v curl)" export WEBI_WGET="$(command -v wget)" set -e webi_check() { # Test for existing version set +e my_current_cmd="$(command -v "$pkg_cmd_name")" set -e if [ -n "$my_current_cmd" ]; then pkg_current_version="$(pkg_get_current_version)" # remove trailing '.0's for golang's sake my_current_version="$(echo $pkg_current_version | sed 's:\.0::g')" my_new_version="$(echo $WEBI_VERSION | sed 's:\.0::g')" if [ -n "$(command -v pkg_format_cmd_version)" ]; then my_canonical_name="$(pkg_format_cmd_version "$WEBI_VERSION")" else #my_canonical_name="$WEBI_NAME $WEBI_VERSION" my_canonical_name="$pkg_cmd_name v$WEBI_VERSION" fi if [ "$my_new_version" == "$my_current_version" ]; then echo "$my_canonical_name already installed at $my_current_cmd" exit 0 else if [ "$my_current_cmd" != "$pkg_common_cmd" ]; then echo "WARN: possible conflict between $my_canonical_name and $pkg_current_version at $my_current_cmd" fi if [ -x "$pkg_new_cmd" ]; then pkg_link_new_version echo "switched to $my_canonical_name at $pkg_new_opt" exit 0 fi fi fi } webi_download() { if [ -n "${1:-}" ]; then my_url="$1" else if [ "error" == "$WEBI_CHANNEL" ]; then echo "Could not find $WEBI_NAME v$WEBI_VERSION" exit 1 fi my_url="$WEBI_PKG_URL" echo "Downloading $WEBI_NAME v$WEBI_VERSION" fi if [ -n "${2:-}" ]; then my_dl="$2" else my_dl="$HOME/Downloads/$WEBI_PKG_FILE" fi if [ -n "$WEBI_WGET" ]; then # wget has resumable downloads # TODO wget -c --content-disposition "$my_url" set +e wget -q --show-progress -c "$my_url" --user-agent="wget $WEBI_UA" -O "$my_dl" if ! [ $? -eq 0 ]; then echo "failed to download from $WEBI_PKG_URL" exit 1 fi set -e else # BSD curl is non-resumable, hence we don't bother # TODO curl -fsSL --remote-name --remote-header-name --write-out "$my_url" curl -fSL "$my_url" -H "User-Agent: curl $WEBI_UA" -o "$my_dl" fi } webi_extract() { pushd "$WEBI_TMP" 2>&1 >/dev/null if [ "tar" == "$WEBI_EXT" ]; then echo "Extracting $HOME/Downloads/$WEBI_PKG_FILE" tar xf "$HOME/Downloads/$WEBI_PKG_FILE" elif [ "zip" == "$WEBI_EXT" ]; then echo "Extracting $HOME/Downloads/$WEBI_PKG_FILE" unzip "$HOME/Downloads/$WEBI_PKG_FILE" elif [ "exe" == "$WEBI_EXT" ]; then # do nothing (but don't leave an empty if block either) echo -n "" elif [ "xz" == "$WEBI_EXT" ]; then echo "Inflating $HOME/Downloads/$WEBI_PKG_FILE" unxz -c "$HOME/Downloads/$WEBI_PKG_FILE" > $(basename "$WEBI_PKG_FILE") else # do nothing echo "Failed to extract $HOME/Downloads/$WEBI_PKG_FILE" exit 1 fi popd 2>&1 >/dev/null } webi_path_add() { # make sure that we don't recursively install pathman with webi my_path="$PATH" export PATH="$HOME/.local/bin:$PATH" set +e my_pathman=$(command -v pathman) set -e export PATH="$my_path" # install pathman if not already installed if [ -z "$my_pathman" ]; then "$HOME/.local/bin/webi" pathman "$HOME/.local/bin/pathman" add "$HOME/.local/bin" export PATH="$HOME/.local/bin:$PATH" fi # in case pathman was recently installed and the PATH not updated "$HOME/.local/bin/pathman" add "$1" } ## ## ## BEGIN user-submited script ## ## {{ installer }} ## ## ## END user-submitted script ## ## if [ -n "$(command -v pkg_install)" ]; then pkg_cmd_name="${pkg_cmd_name:-$WEBI_NAME}" pkg_common_opt="${pkg_common_opt:-$HOME/.local/opt/$pkg_cmd_name}" pkg_common_bin="${pkg_common_bin:-$pkg_common_opt/bin}" pkg_common_cmd="${pkg_common_cmd:-$pkg_common_bin/$pkg_cmd_name}" pkg_new_opt="${pkg_new_opt:-$HOME/.local/opt/$pkg_cmd_name-v$WEBI_VERSION}" pkg_new_bin="${pkg_new_bin:-$pkg_new_opt/bin}" pkg_new_cmd="${pkg_new_cmd:-$pkg_new_bin/$pkg_cmd_name}" [ -n "$(command -v pkg_pre_install)" ] && pkg_pre_install echo "Installing '$pkg_cmd_name' v$WEBI_VERSION as $pkg_new_cmd" pkg_install [ -n "$(command -v pkg_post_install)" ] && pkg_post_install if [ -n "$(command -v pkg_post_install_message)" ]; then pkg_post_install_message else echo "Installed '$pkg_cmd_name' v$WEBI_VERSION as $pkg_new_cmd" fi echo "" fi rm -rf "$WEBI_TMP" }