#!/usr/bin/env bash set -e architecture() { case `uname -m` in x86_64) echo x86_64 ;; i686 | i386) echo i686 ;; #Probably expand out more options for arm and aarch64 armv7*) echo arm32 ;; aarch64) echo arm64 ;; *) error "unknown architecture detected" ;; esac } get_os() { case `uname -s` in Linux) case `uname -o` in Android) echo Android ;; GNU/Linux) echo Linux ;; esac ;; MINGW* | MSYS* | CYGWIN*) echo Windows ;; Darwin) echo Darwin ;; esac } system() { case $(get_os) in Linux) echo linux ;; Android) echo android ;; Darwin) echo apple ;; Windows) echo pc-windows-msvc ;; *) error "machine os type is not supported" ;; esac } get_latest_version() { curl --silent "https://api.github.com/repos/foundpatterns/torchbear/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/' } get_url() { local arch=$(architecture) local os=$(system) #Maybe instead of getting the latest version, we could get the latest stable release instead to reduce the chance of #exposed bugs being sent to users local version=$(get_latest_version) #TODO: Use github api to get the uri for the download instead. echo "https://github.com/foundpatterns/torchbear/releases/download/${version}/torchbear-${version}-${arch}-${os}-stable.zip" } download_and_extract() { if [ ! -d $1 ]; then error "Path or directory does not exist." fi if [ -x "$(command -v curl)" ]; then curl -L $(get_url) -o temp.zip case $(get_os) in Linux | Darwin ) sudo unzip -o temp.zip -d $1 ;; * ) unzip -o temp.zip -d $1 ;; esac rm temp.zip else error "Curl is not installed. Please install curl. If curl is installed, check your path and try again" fi } install_machu_picchu () { URL="https://github.com/foundpatterns/mp-installer/archive/master.zip" TEMP=temp.zip DIR=.mp-installer if [ -x "$(command -v curl)" ]; then echo Downloading Machu Picchu curl -L $URL -o $TEMP echo Installing Machu Picchu mkdir $DIR unzip -q -o temp.zip -d $DIR rm $TEMP cd $DIR/mp-installer-master case $(get_os) in Linux | Darwin ) sudo torchbear;; * ) torchbear;; esac STATUS=$? cd ../.. rm -rf $DIR else error "Curl is not installed. Please install curl. If curl is installed, check your path and try again" fi if [ $STATUS = "0" ]; then echo Machu Picchu installed succesfully else error Machu Picchu install was unsuccesfull fi } install_path() { case $(get_os) in Linux | Darwin) echo "/usr/local/bin" ;; Android) echo "/data/data/com.termux/files/usr/bin" ;; Windows) if [ -d "$CMDER_ROOT" ]; then echo "$CMDER_ROOT/bin" else error Cmder is required to run this installer. fi ;; *) error "System is not supported at this time" ;; esac } torchbear_path() { case $(get_os) in Linux | Darwin | Android) echo "$(install_path)/torchbear" ;; Windows) echo "$(install_path)/torchbear.exe" ;; esac } uninstall_torchbear() { if [ -f "$(torchbear_path)" ]; then echo Uninstalling Torchbear. case $(get_os) in Linux | Darwin) sudo rm $(torchbear_path) ;; * ) rm $(torchbear_path) ;; esac if [ -f "$(torchbear_path)" ]; then error Torchbear could not be uninstalled. else echo Torchbear is now uninstalled. fi else error Torchbear is not installed. fi } uninstall_mp() { if [ -f "$(install_path)/mp" ]; then echo Uninstalling machu picchu. case $(get_os) in Linux | Darwin) sudo rm $(install_path)/mp sudo rm -rf $(install_path)/machu-pichu ;; * ) rm $(install_path)/mp rm -rf $(install_path)/machu-pichu ;; esac if [ -f "$(install_path)/mp" ]; then error Machu Picchu could not be uninstalled. else echo Machu Picchu is now uninstalled. fi else error Machu Picchu is not installed. fi } install_torchbear() { if [ -f "$(torchbear_path)" ]; then local curr_version=($(echo $($(torchbear_path) -V))) local repo_version=$(get_latest_version) if [ "${curr_version[1]}" == "$repo_version" ]; then error "Torchbear is up to date." fi echo "New version of available" echo "Current Version: ${curr_version[1]}" echo "Latest Version: $repo_version" fi echo Downloading torchbear download_and_extract $(install_path) if [ -f "$(torchbear_path)" ]; then local version=($(echo $($(torchbear_path) -V))) echo Torchbear ${version[1]} has been installed. fi } install_mp() { if [ -f "$(torchbear_path)" ]; then # Only install mp if not detected # TODO: Check for updates for mp if [ ! -x "$(command -v mp)" ]; then echo "Now that you have Torchbear installed, would you like to install Machu Picchu package manager? You can use it to install more apps, safely and easily." echo "To read more about it, check http://github.com/foundpatterns/machu-picchu. If you choose to install now, then running mp --help will show you what to do next with it" read -t 10 -e -p "Do you want to install machu-picchu (Y/n)? " -i "Y" choice &2 ; exit 1; } case $1 in "--install-torchbear") install_torchbear ;; "--install-mp") install_mp ;; "--uninstall") uninstall_torchbear uninstall_mp ;; "--uninstall-mp") uninstall_mp ;; * ) install_torchbear install_mp ;; esac