#!/bin/bash # HELIUM BOWSER AUTO UPDATE SCRIPT WITH LOGGING ########## PREREQUISITES ########### set -e ## GLOBAL VARIABLES APP_NAME="Helium" APP_NAME_LONG="Helium Web Browser" SOURCE="GitHub" SCRIPT_NAME="$APP_NAME quiet updater" SCRIPT_FILE_NAME="helium_auto_update.sh" SCRIPT_VERSION="0.5.6" ALIAS="auto-update-helium" ## LOCATIONS TMP=/tmp/$APP_NAME INSTALL_PATH=$HOME/.apps/$APP_NAME CONFIG_PATH=$INSTALL_PATH/assets BACKUP_PATH=$INSTALL_PATH/assets/backup LOG_PATH=$INSTALL_PATH/assets/logs LOG=$LOG_PATH/log LAUNCHER_PATH=$HOME/.local/share/applications ICON=$CONFIG_PATH/icon/helium.png SCRIPT_PATH=$HOME/.local/bin DATE=$(date) ########## FUNCTIONS ########### ### DEPENDENCIES cmd_query() { local PACKAGE="$1" if ! command -v "$PACKAGE" >/dev/null 2>&1 ; then echo " - $PACKAGE" >> $TMP/missingDeps fi } dependency_check () { DEPENDENCIES=("curl" "wget") mkdir -p $TMP for PACKAGE in "${DEPENDENCIES[@]}" ; do cmd_query "$PACKAGE" done if ! [ -d "$LOG_PATH" ] ; then mkdir -p $LOG_PATH echo "${DATE} | Log created" >> $LOG fi if [ -f "$TMP/missingDeps" ] ; then MISSING=$(cat $TMP/missingDeps) echo "${DATE} | Failed to update - missing dependencies : $MISSING" >> $LOG exit_clean fi if ! [ -d "$INSTALL_PATH" ] ; then mkdir -p $INSTALL_PATH echo "${DATE} | Failed to update - $APP_NAME installation path not present - But created for logging" >> $LOG exit elif ! [ -f "$INSTALL_PATH/$APP_NAME.AppImage" ] ; then echo "${DATE} | Failed to update - Local $APP_NAME AppImage not found" >> $LOG exit fi } ### UPDATE SCRIPT update_script() { REMOTE_SCRIPT_URL=https://lab.c95.org/fr4nz/helium-helper/raw/branch/main/$SCRIPT_FILE_NAME ### CHECK FOR LOCAL SCRIPT if ! [ -f "$SCRIPT_PATH/$SCRIPT_FILE_NAME" ] ; then echo "${DATE} | Failed to update script - local file not found" >> $LOG notify-send -i "$ICON" "Helium Helper" "Script update failed! See log for details" exit fi REMOTE_SCRIPT_VERSION=$(curl -s https://lab.c95.org/fr4nz/helium-helper/raw/branch/main/$SCRIPT_FILE_NAME | grep -m 1 "SCRIPT_VERSION" | tr -d 'SCRIPT_VERSION="') ### CHECK FOR EMPTY VERSION TAGS if [ -z "$SCRIPT_VERSION" ] ; then echo "${DATE} | Failed to update script - Empty version tag --> local" >> $LOG notify-send -i "$ICON" "Helium Helper" "Script update failed! See log for details" exit elif [ -z "$REMOTE_SCRIPT_VERSION" ] ; then echo "${DATE} | Failed to update script - Empty version tag --> $SOURCE" >> $LOG notify-send -i "$ICON" "Helium Helper" "Script update failed! See log for details" exit fi ### COMPARE LOCAL & REMOTE VERSION SCRIPT_VERSION_NUM=$(echo $SCRIPT_VERSION | tr -d .) REMOTE_SCRIPT_VERSION_NUM=$(echo $REMOTE_SCRIPT_VERSION | tr -d .) if [ "$REMOTE_SCRIPT_VERSION" == "$SCRIPT_VERSION" ] ; then notify-send -i "$ICON" "Helium Helper" "Script is up-to-date" elif [ "$REMOTE_SCRIPT_VERSION_NUM" -gt "$SCRIPT_VERSION_NUM" ] ; then mv $SCRIPT_PATH/$SCRIPT_FILE_NAME $BACKUP_PATH/$SCRIPT_FILE_NAME.old mkdir -p $TMP wget -P $TMP $REMOTE_SCRIPT_URL -q chmod +x $TMP/$SCRIPT_FILE_NAME mv $TMP/$SCRIPT_FILE_NAME $SCRIPT_PATH echo "${DATE} | Script updated to $REMOTE_SCRIPT_VERSION" >> $LOG notify-send -i "$ICON" "Helium Helper" "Script updated to $REMOTE_SCRIPT_VERSION" else echo "${DATE} | Failed to update - Malformed version tags" >> $LOG notify-send -i "$ICON" "Helium Helper" "Script update failed! See log for details\n$REMOTE_SCRIPT_VERSION $SCRIPT_VERSION" fi } ### UPDATE update_helium() { LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.AppImage --version | awk '{print $2}') GIT_VERSION=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "tag_name" | tr -d \", | awk '{print $2}') ### CHECK FOR EMPTY VERSION TAGS if [[ -z "$GIT_VERSION" ]] ; then echo "${DATE} | Failed to update - Empty version tag --> $SOURCE" >> $LOG notify-send -i "$ICON" "Helium Helper" "Browser update failed! See log for details" exit elif [[ -z "$LOCAL_VERSION" ]] ; then echo "${DATE} | Failed to update - Empty version tag --> LOCAL" >> $LOG notify-send -i "$ICON" "Helium Helper" "Browser update failed! See log for details" exit fi ### COMPARE LOCAL & REMOTE VERSION LOCAL_VERSION_NUM=$(echo $LOCAL_VERSION | tr -d .) GIT_VERSION_NUM=$(echo $GIT_VERSION | tr -d .) if [ "$GIT_VERSION" == "$LOCAL_VERSION" ] ; then notify-send -i "$ICON" "Helium Helper" "Browser is up-to-date" elif [ "$GIT_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then GIT_URL=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | grep -v "zsync" | tr -d \" | awk '{print $2}') GIT_FILENAME=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | grep -v "zsync" | tr -d \" | awk '{print $2}' | awk -F'/' '{print $9}') mkdir -p $TMP $BACKUP_PATH wget -P $TMP $GIT_URL -q --show-progress chmod +x $TMP/$GIT_FILENAME if [ -f "$BACKUP_PATH/$APP_NAME.old" ] ; then rm $BACKUP_PATH/$APP_NAME.old fi mv $INSTALL_PATH/$APP_NAME.AppImage $BACKUP_PATH/$APP_NAME.old mv $TMP/$GIT_FILENAME $INSTALL_PATH/$APP_NAME.AppImage cp $LAUNCHER_PATH/$APP_NAME.desktop $BACKUP_PATH/$APP_NAME.desktop.old sed -i "s|X-AppImage-Version=.*|X-AppImage-Version=$($INSTALL_PATH/$APP_NAME.AppImage --version | awk '{print $2}')|" $LAUNCHER_PATH/$APP_NAME.desktop echo "${DATE} | $APP_NAME updated to ${GIT_VERSION}" >> $LOG notify-send -i "$ICON" "Helium Helper" "Browser updated to $GIT_VERSION" else echo "${DATE} | Failed to update - Version tags malformed" >> $LOG notify-send -i "$ICON" "Helium Helper" "Browser update failed! See log for details" exit fi } ### SCRIPT VERSION script_version() { echo -e "\n ${CYN}$APP_NAME_LONG Auto Update Script Version :${CRS} $SCRIPT_VERSION\n" } ### HELP help() { echo -e "\n${LCY}${SCRIPT_NAME}${CRS}\n" echo -e "$APP_NAME_LONG automatic updater script\n" echo -e "Syntax: $SCRIPT_FILE_NAME [ -a | -s | -h ]\n" echo -e "Options:\n" echo -e "\t-a\tCreate alias for $SCRIPT_FILE_NAME ${YEL}--> Working with zsh${CRS}" echo -e "\t-s\tShow script version" echo -e "\t-h\tPrint this help page.\n" echo -e "Configured locations:\n" echo -e "\t${CYN}${INSTALL_PATH}${CRS}\t\tInstall location" echo -e "\t${CYN}${LAUNCHER_PATH}${CRS}\tLauncher location" echo -e "\t${CYN}${SCRIPT_PATH}${CRS}\t\t\tScript location\n" } ### EXIT CLEAN exit_clean() { if [ -d "$TMP" ] ; then rm -rf $TMP fi exit } ########## MAIN ########## ## GET OPTIONS while getopts ":a,:s,:S,:h" OPTION ; do case $OPTION in S) dependency_check update_script exit_clean ;; s) script_version exit_clean ;; h) help exit_clean ;; *) echo -e "\n${YEL}Option ${RED}$1${YEL} not recognized... Refer to help below!${CRS}" help exit_clean ;; esac done ## DEPENDENCY CHECK dependency_check ## UPDATE update_helium ## CLEAN exit_clean