Improvements on install.sh

This commit is contained in:
Sir RaptaG 2023-06-04 15:44:25 +03:00 committed by GitHub
parent e3d8239b9f
commit 6f3e2ab0fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,182 +1,169 @@
#!/bin/bash #!/usr/bin/env bash
# Varibles
fname="$(basename $0)"
installDir='/usr/share/spotube'
desktopFile='/usr/share/applications/spotube.desktop'
appdata='/usr/share/appdata/spotube.appdata.xml'
icon='/usr/share/icons/spotube/spotube-logo.png'
symlink='/usr/bin/spotube'
temp='/tmp/spotube-installer'
latestVer="$(curl --silent "https://api.github.com/repos/KRTirtho/spotube/releases/latest" \ | grep -Po '"tag_name": "\K.*?(?=")')"
INSTLLATION_DIR=/usr/share/spotube # Root check - From CAAIS (https://codeberg.org/RaptaG/CAAIS), under GPL-3.0
DESKTOP_FILE_PATH=/usr/share/applications/spotube.desktop function rootCheck() {
APP_DATA_PATH=/usr/share/appdata/spotube.appdata.xml if [ "${EUID}" -ne 0 ]; then
ICON_PATH=/usr/share/icons/spotube/spotube-logo.png echo "Error: Root permissions are required for ${fname} to work."
BIN_SYMLINK_PATH=/usr/bin/spotube echo "Please run './${fname}' for more information."
exit 1
fi
}
TEMP_DIR=/tmp/spotube-installer # Flags
function help(){
# get latest version from github api echo "Usage: sudo ./${fname} [flags]"
VERSION=$(curl --silent "https://api.github.com/repos/KRTirtho/spotube/releases/latest" \ echo 'Flags:'
| grep -Po '"tag_name": "\K.*?(?=")') echo ' -i, --install <version> Specify what version to download, defaults to the latest.'
echo ' -h, --help This help menu'
function spotube_help(){ echo ' -r, --remove Removes Spotube from your system'
# available flags are -v or --version to specify what version to download
echo "Usage: ./install.sh [flags]"
echo "Flags:"
echo " -v, --version <version> Specify what version to download. Default: $VERSION"
echo " -h, --help Show this help message"
echo " -r, --remove Remove spotube from your system"
exit 0 exit 0
} }
# a function to check if a given command exists or not and returns bool # Checks whether a given command exists or not and returns bool
function command_exists() { function command_exists() {
command -v "$@" >/dev/null 2>&1 command -v "$@" >/dev/null 2>&1
} }
function install_deps(){ function install_deps(){
local DEBIAN_DEPS="curl tar mpv libappindicator3-1 gir1.2-appindicator3-0.1 libsecret-1-0 libnotify-bin libjsoncpp25" local debianDeps='curl tar mpv libappindicator3-1 gir1.2-appindicator3-0.1 libsecret-1-0 libnotify-bin libjsoncpp25'
local RPM_DEPS="curl tar mpv libappindicator jsoncpp libsecret libnotify" local rpmDeps='curl tar mpv libappindicator jsoncpp libsecret libnotify'
local ARCH_DEPS="curl tar mpv libappindicator-gtk3 libsecret jsoncpp libnotify" local archDeps='curl tar mpv libappindicator-gtk3 libsecret jsoncpp libnotify'
if command_exists apt; then if command_exists apt; then
sudo apt install -y $DEBIAN_DEPS sudo apt install -y ${debianDeps}
elif command_exists dnf; then elif command_exists dnf; then
sudo dnf install -y $RPM_DEPS sudo dnf install -y ${debianDeps}
elif command_exists yum; then elif command_exists yum; then
sudo yum install -y $RPM_DEPS sudo yum install -y ${rpmDeps}
elif command_exists zypper; then elif command_exists zypper; then
sudo zypper install -y $RPM_DEPS sudo zypper install -y ${rpmDeps}
elif command_exists pacman; then elif command_exists pacman; then
sudo pacman -Sy $ARCH_DEPS sudo pacman -Sy ${archDeps}
else else
# TODO - install them
echo "Your package manager is not supported by this script. Please install the dependencies manually." echo "Your package manager is not supported by this script. Please install the dependencies manually."
echo "The dependencies are: curl, tar, mpv, appindicator, libsecret, jsoncpp, libnotify" echo "The dependencies are: curl, tar, mpv, appindicator, libsecret, jsoncpp, libnotify"
fi fi
} }
function download_extract_spotube(){ function download_extract_spotube(){
local TAR_PATH=/tmp/spotube-$VERSION.tar.xz local tarPath="/tmp/spotube-${ver}.tar.xz"
local DOWNLOAD_URL=https://github.com/KRTirtho/spotube/releases/download/v$VERSION/spotube-linux-$VERSION-x86_64.tar.xz local donwloadURL="https://github.com/KRTirtho/spotube/releases/download/v${ver}/spotube-linux-${ver}-x86_64.tar.xz"
# check if version is nightly if [ "${ver}" = "nightly" ]; then
downloadURL"=https://github.com/KRTirtho/spotube/releases/download/nightly/spotube-linux-nightly-x86_64.tar.xz"
if [ "$VERSION" = "nightly" ]; then
DOWNLOAD_URL=https://github.com/KRTirtho/spotube/releases/download/nightly/spotube-linux-nightly-x86_64.tar.xz
fi fi
rm -rf ${temp}
rm -rf $TEMP_DIR mkdir -p ${temp}
mkdir -p $TEMP_DIR
# check if already exists downloaded file # check if already exists downloaded file
if [ -f $TAR_PATH ]; then if [ -f ${tarPath} ]; then
echo "Found spotube-$VERSION.tar.xz in /tmp. Skipping download..." echo "Installation file detected. Skipping download..."
else else
echo "Downloading spotube-$VERSION.tar.xz..." echo "Downloading spotube-${ver}.tar.xz..."
curl -L $DOWNLOAD_URL -o $TAR_PATH curl -L ${downloadURL} -o ${tarPath}
fi fi
# Extract the tarball tar -xf ${tarPath} -C ${temp}
tar -xf $TAR_PATH -C $TEMP_DIR
# check if $TEMP_DIR empty or not
# Is $temp empty or not
if [ ! "$(ls -A $TEMP_DIR)" ]; then if [ ! "$(ls -A $TEMP_DIR)" ]; then
echo "Failed to extract the tarball. Redownloading..." echo 'Failed to extract the tarball. Redownloading...'
rm -f $TAR_PATH rm -f ${tarPath}
curl -L $DOWNLOAD_URL -o $TAR_PATH curl -L ${downloadURL} -o ${tarPath}
tar -xf $TAR_PATH -C $TEMP_DIR tar -xf ${tarPath} -C ${temp}
fi fi
# checking one last time # Once again
if [ ! "$(ls -A $TEMP_DIR)" ]; then if [ ! "$(ls -A $TEMP_DIR)" ]; then
echo "Failed to extract the tarball. Aborting installation..." echo 'Failed to extract the tarball. Installation aborted.'
exit 1 exit 1
fi fi
} }
function install_spotube(){ function install_spotube(){
# check if exists and uninstall if user allows if [ -d ${installDir} ]; then
echo -n "Spotube is already installed. Do you want to reinstall it? [y/N]"
read reinstall
if [ -d $INSTLLATION_DIR ]; then case "${reinstall}" in
echo "Spotube is already installed. Do you want to uninstall it and then install? [y/N]" [yY]*)
read -r uninstall
if [ "$uninstall" = "y" ] || [ "$uninstall" = "Y" ]; then
uninstall_spotube uninstall_spotube
else ;;
echo "Aborting installation..." *)
echo 'Aborting installation...'
exit 1 exit 1
fi ;;
esac
fi fi
# Move the files to /usr/share/spotube mkdir -p ${installDir}
mv ${temp}/data ${installDir}
sudo mkdir -p $INSTLLATION_DIR mv ${temp}/lib ${installDir}
mv ${temp}/spotube ${installDir}
sudo mv $TEMP_DIR/data $INSTLLATION_DIR mv ${temp}/spotube.desktop ${desktopDir}
sudo mv $TEMP_DIR/lib $INSTLLATION_DIR mv ${temp}/com.github.KRTirtho.Spotube.appdata.xml ${appdata}
sudo mv $TEMP_DIR/spotube $INSTLLATION_DIR mkdir -p /usr/share/icons/spotube
mv ${temp}/spotube-logo.png ${icon}
# Move the desktop file to /usr/share/applications ln -s /usr/share/spotube/spotube ${symlink}
sudo mv $TEMP_DIR/spotube.desktop $DESKTOP_FILE_PATH
# Move the appdata file to /usr/share/appdata
sudo mv $TEMP_DIR/com.github.KRTirtho.Spotube.appdata.xml $APP_DATA_PATH
# Move the logo to /usr/share/icons/spotube
sudo mkdir -p /usr/share/icons/spotube
sudo mv $TEMP_DIR/spotube-logo.png $ICON_PATH
# Create a symlink to /usr/bin
sudo ln -s /usr/share/spotube/spotube $BIN_SYMLINK_PATH
# Clean up # Clean up
rm -rf ${temp}
rm -rf $TEMP_DIR echo "Spotube ${ver} has been installed successfully!"
echo "Spotube $VERSION has been installed successfully!"
} }
function uninstall_spotube(){ function uninstall_spotube(){
# confirm echo -n "Are you sure you want to uninstall Spotube? [y/N]"
read confirm
echo "Are you sure you want to uninstall Spotube?" case "${confirm}" in
echo [yY]*)
echo "This will remove following files and directories:" echo 'Unstalling Spotube..'
echo " $INSTLLATION_DIR" rm -rf ${installDir} ${desktopDir} ${appdata} ${icon} ${symlink}
echo " $DESKTOP_FILE_PATH" ;;
echo " $APP_DATA_PATH" *)
echo " $ICON_PATH" echo 'Aborting...'
echo " $BIN_SYMLINK_PATH"
echo
echo "[y/N]"
read -r CONFIRMATION
if [[ "$CONFIRMATION" != "y" ]]; then
echo "Aborting uninstallation..."
exit 0 exit 0
fi ;;
esac
# remove the files
sudo rm -rf $INSTLLATION_DIR $DESKTOP_FILE_PATH $APP_DATA_PATH $ICON_PATH $BIN_SYMLINK_PATH
} }
# parse arguments -v, --version, -r, --remove, -h, --help case "$1" in
-i | --install)
if [ "$2" != "" ]; then
ver="$2"
else
ver="${latestVer}"
fi
while [[ "$#" -gt 0 ]]; do rootCheck
case $1 in install_deps
-v|--version) VERSION="$2"; shift ;; download_extract_spotube
-r|--remove) uninstall_spotube; exit 0 ;; install_spotube
-h|--help) spotube_help; exit 0 ;; ;;
*) echo "Unknown parameter passed: $1"; spotube_help; exit 1 ;; -r | --remove)
esac rootCheck
shift uninstall_spotube
done exit 0
;;
install_deps -h | --help | "")
download_extract_spotube help
install_spotube exit 0
;;
*)
echo "Invalid flag "$1"."
echo "Please run ./${fname} for more information."
exit 1
;;
esac