refactor: finish moving ssh-* scripts to own installers
[webi-installers/.git] / _webi / template.sh
index 2fff9361c76c728eeb5a2541edf1baedd62d068f..eeed37780e8e33a6e6ee7336a9ecab1d98c174d7 100644 (file)
@@ -35,6 +35,8 @@ function __bootstrap_webi() {
     #PKG_ARCHES=
     #PKG_FORMATS=
     WEBI_UA="$(uname -a)"
+    WEBI_PKG_DOWNLOAD=""
+    WEBI_PKG_PATH="${HOME}/Downloads/webi/${PKG_NAME:-error}/${WEBI_VERSION:-latest}"
     export WEBI_HOST
 
     ##
@@ -44,7 +46,7 @@ function __bootstrap_webi() {
     WEBI_TMP=${WEBI_TMP:-"$(mktemp -d -t webinstall-"${WEBI_PKG:-}".XXXXXXXX)"}
     export _webi_tmp="${_webi_tmp:-"$HOME/.local/opt/webi-tmp.d"}"
 
-    mkdir -p "$HOME/Downloads"
+    mkdir -p "${WEBI_PKG_PATH}"
     mkdir -p "$HOME/.local/bin"
     mkdir -p "$HOME/.local/opt"
 
@@ -67,9 +69,9 @@ function __bootstrap_webi() {
         fi
 
         if [ -n "$(command -v pkg_format_cmd_version)" ]; then
-            my_versioned_name="$(pkg_format_cmd_version "$WEBI_VERSION")"
+            my_versioned_name="'$(pkg_format_cmd_version "$WEBI_VERSION")'"
         else
-            my_versioned_name="'$pkg_cmd_name' v$WEBI_VERSION"
+            my_versioned_name="'$pkg_cmd_name v$WEBI_VERSION'"
         fi
 
         echo "$my_versioned_name"
@@ -105,25 +107,31 @@ function __bootstrap_webi() {
         my_current_cmd="$(command -v "$pkg_cmd_name")"
         set -e
         if [ -n "$my_current_cmd" ]; then
-            pkg_current_version="$(pkg_get_current_version 2> /dev/null | head -n 1)"
-            # remove trailing '.0's for golang's sake
-            my_current_version="$(echo "$pkg_current_version" | sed 's:\.0::g')"
-            my_src_version="$(echo "$WEBI_VERSION" | sed 's:\.0::g')"
             my_canonical_name="$(_webi_canonical_name)"
-            if [ "$my_src_version" == "$my_current_version" ]; then
-                echo "$my_canonical_name already installed at $my_current_cmd"
-                exit 0
-            else
-                if [ "$my_current_cmd" != "$pkg_dst_cmd" ]; then
-                    echo >&2 "WARN: possible conflict between $my_canonical_name and $pkg_current_version at $my_current_cmd"
-                fi
-                if [ -x "$pkg_src_cmd" ]; then
-                    # shellcheck disable=2119
-                    # this function takes no args
-                    webi_link
-                    echo "switched to $my_canonical_name at $pkg_src"
-                    exit 0
+            if [ "$my_current_cmd" != "$pkg_dst_cmd" ]; then
+                echo >&2 "WARN: possible PATH conflict between $my_canonical_name and currently installed version"
+                echo >&2 "    ${pkg_dst_cmd} (new)"
+                echo >&2 "    ${my_current_cmd} (existing)"
+                #my_current_version=false
+            fi
+            # 'readlink' can't read links in paths on macOS ðŸ¤¦
+            # but that's okay, 'cmp -s' is good enough for us
+            if cmp -s "${pkg_src_cmd}" "${my_current_cmd}"; then
+                echo "${my_canonical_name} already installed:"
+                echo -n "    ${pkg_dst}"
+                if [[ ${pkg_src_cmd} != "${my_current_cmd}" ]]; then
+                    echo -n " => ${pkg_src}"
                 fi
+                echo ""
+                exit 0
+            fi
+            if [ -x "$pkg_src_cmd" ]; then
+                # shellcheck disable=2119
+                # this function takes no args
+                webi_link
+                echo "switched to $my_canonical_name:"
+                echo "    ${pkg_dst} => ${pkg_src}"
+                exit 0
             fi
         fi
         export PATH="$my_path"
@@ -149,9 +157,12 @@ function __bootstrap_webi() {
         if [ -n "${2:-}" ]; then
             my_dl="$2"
         else
-            my_dl="$HOME/Downloads/$WEBI_PKG_FILE"
+            my_dl="${WEBI_PKG_PATH}/$WEBI_PKG_FILE"
         fi
 
+        WEBI_PKG_DOWNLOAD="${my_dl}"
+        export WEBI_PKG_DOWNLOAD
+
         if [ -e "$my_dl" ]; then
             echo "Found $my_dl"
             return 0
@@ -170,7 +181,7 @@ function __bootstrap_webi() {
             if [[ $- == *i* ]]; then
                 my_show_progress="--show-progress"
             fi
-            if wget -q $my_show_progress --user-agent="wget $WEBI_UA" -c "$my_url" -O "$my_dl.part"; then
+            if wget -q $my_show_progress --user-agent="wget $WEBI_UA" -c "$my_url" -O "$my_dl.part"; then
                 echo >&2 "failed to download from $WEBI_PKG_URL"
                 exit 1
             fi
@@ -196,20 +207,20 @@ function __bootstrap_webi() {
     webi_extract() {
         pushd "$WEBI_TMP" > /dev/null 2>&1
         if [ "tar" == "$WEBI_EXT" ]; then
-            echo "Extracting $HOME/Downloads/$WEBI_PKG_FILE"
-            tar xf "$HOME/Downloads/$WEBI_PKG_FILE"
+            echo "Extracting ${WEBI_PKG_PATH}/$WEBI_PKG_FILE"
+            tar xf "${WEBI_PKG_PATH}/$WEBI_PKG_FILE"
         elif [ "zip" == "$WEBI_EXT" ]; then
-            echo "Extracting $HOME/Downloads/$WEBI_PKG_FILE"
-            unzip "$HOME/Downloads/$WEBI_PKG_FILE" > __unzip__.log
+            echo "Extracting ${WEBI_PKG_PATH}/$WEBI_PKG_FILE"
+            unzip "${WEBI_PKG_PATH}/$WEBI_PKG_FILE" > __unzip__.log
         elif [ "exe" == "$WEBI_EXT" ]; then
-            echo "Moving $HOME/Downloads/$WEBI_PKG_FILE"
-            mv "$HOME/Downloads/$WEBI_PKG_FILE" .
+            echo "Moving ${WEBI_PKG_PATH}/$WEBI_PKG_FILE"
+            mv "${WEBI_PKG_PATH}/$WEBI_PKG_FILE" .
         elif [ "xz" == "$WEBI_EXT" ]; then
-            echo "Inflating $HOME/Downloads/$WEBI_PKG_FILE"
-            unxz -c "$HOME/Downloads/$WEBI_PKG_FILE" > "$(basename "$WEBI_PKG_FILE")"
+            echo "Inflating ${WEBI_PKG_PATH}/$WEBI_PKG_FILE"
+            unxz -c "${WEBI_PKG_PATH}/$WEBI_PKG_FILE" > "$(basename "$WEBI_PKG_FILE")"
         else
             # do nothing
-            echo "Failed to extract $HOME/Downloads/$WEBI_PKG_FILE"
+            echo "Failed to extract ${WEBI_PKG_PATH}/$WEBI_PKG_FILE"
             exit 1
         fi
         popd > /dev/null 2>&1
@@ -301,9 +312,12 @@ function __bootstrap_webi() {
 
     if [[ -z ${WEBI_WELCOME:-} ]]; then
         echo ""
-        echo "Thanks for using webi to install '$PKG_NAME' on '$WEBI_OS/$WEBI_ARCH'."
+        printf "Thanks for using webi to install '\e[32m${WEBI_PKG:-}\e[0m' on '\e[31m$(uname -s)/$(uname -m)\e[0m'.\n"
         echo "Have a problem? Experience a bug? Please let us know:"
-        echo "        https://github.com/webinstall/packages/issues"
+        echo "        https://github.com/webinstall/webi-installers/issues"
+        echo ""
+        printf "\e[31mLovin'\e[0m it? Say thanks with a \e[34mStar on GitHub\e[0m:\n"
+        printf "        \e[32mhttps://github.com/webinstall/webi-installers\e[0m\n"
         echo ""
     fi
 
@@ -325,7 +339,20 @@ function __bootstrap_webi() {
     ##
 
     # run everything with defaults or overrides as needed
-    if [ -n "$(command -v pkg_get_current_version)" ]; then
+    if command -v pkg_install > /dev/null ||
+        command -v pkg_link > /dev/null ||
+        command -v pkg_post_install > /dev/null ||
+        command -v pkg_done_message > /dev/null ||
+        command -v pkg_format_cmd_version > /dev/null ||
+        [[ -n ${WEBI_SINGLE:-} ]] ||
+        [[ -n ${pkg_cmd_name:-} ]] ||
+        [[ -n ${pkg_dst_cmd:-} ]] ||
+        [[ -n ${pkg_dst_dir:-} ]] ||
+        [[ -n ${pkg_dst:-} ]] ||
+        [[ -n ${pkg_src_cmd:-} ]] ||
+        [[ -n ${pkg_src_dir:-} ]] ||
+        [[ -n ${pkg_src:-} ]]; then
+
         pkg_cmd_name="${pkg_cmd_name:-$PKG_NAME}"
 
         if [ -n "$WEBI_SINGLE" ]; then