gitignore updated

This commit is contained in:
Fr4nz D13trich 2026-01-10 14:32:45 +01:00
commit c6f2f2bd3f
6 changed files with 606 additions and 206 deletions

3
.gitignore vendored
View file

@ -1,3 +1,6 @@
test.sh
<<<<<<< HEAD
devdoc.md
=======
>>>>>>> main
binaries

View file

@ -1,56 +1,76 @@
# Helium Bowser installer & updater
## Purpose
This script was initially designed to just update my Helium browser but over time and interest it got more functional and universal. It includes functions to install, update, remove, add launcher, etc... and is distro independent.
This script was initially designed to just update my Helium browser but over time and interest it got more functional and universal. It includes functions to install, update, remove, add launcher, etc... It's supposed to run in user space and is (Linux) distro independent I suppose.
With "little" tinkering it should be possible to apply this script to install, update & configure many kinds of releases from source, like Debian packages, AppImages, binaries, etc...
## Usage
Help
### Help
```sh
./helium_helper.sh -h
```
---
### First Install
To initally install Helium browser via this script, download helium_helper.sh and make it executable:
```sh
wget https://lab.c95.org/fr4nz/helium-helper/raw/branch/main/helium_helper.sh && chmod +x helium_helper.sh
```
Run script with install parameter _-i_
- Default install directory = `$HOME/.apps/Helium`
```sh
./helium_helper.sh -i
```
Add alias to `.shellrc` | _optional_
**OPTIONAL** : Add alias to `.shellrc` | _working in zsh, bash & fish_
- Default alias = `update-helium`
```sh
./helium_helper.sh -a ### ONLY TESTED WITH zsh & bash
./helium_helper.sh -a
```
---
### Updating
**From launcher** (if added)
**From launcher** (if added during install or by running `./helium_helper.sh -l`)
Checking for the latest version and updating can simply be done for the browser as well as the script by right clicking the app icon and choosing either update option, which will be run by `helium_launcher_update.sh`. This will backup all files that are being updated and write a log.
**Terminal**
Updating can also be done by running:
- Update Helium Browser
```sh
./helium_helper.sh -u ### UPDATE APP
./helium_helper.sh -u
```
- Update Helium Helper
```sh
./helium_helper.sh -S ### UPDATE SCRIPT
./helium_helper.sh -S
```
Since this script is interactive, it doesn't keep logs.
---
### Backing up
Backing up, by default, pulls all important files, folders & configuration and compresses an archive, which is stored in `$HOME/.apps/Helium/assets`
- Default backup
```sh
./helium_helper.sh -b
```
- Backup to custom path
```sh
./helium_helper.sh -b </PATH/TO/DESTINATION>
```
**NOTE:** The backup path specified won't be overridden within the script yet. Working on it...
**Since this script is interactive, it doesn't keep logs.**
## Overview
### Helium_Helper.sh
- Interactive installer, updater & configuration script
- Installs to `/home/<USER>/.apps/Helium` | changeable in line 28 `INSTALL_PATH`
- Installs to `$HOME/.apps/Helium` | changeable in line 32 `INSTALL_PATH`
- Assumes:
- Presence of `/home/<USER>/.apps/Helium` when updating | changeable in line 28 `INSTALL_PATH`
- Presence of `$HOME/.apps/Helium` when updating | changeable in line 32 `INSTALL_PATH`
- Executable named `Helium.AppImage`
- Keeps backups of
- `Helium.AppImage` --> `Helium.AppImage.old`
- `helium_helper.sh` --> `helium_helper.sh.old`
- `helium_launcher_update.sh` --> `helium_launcher_update.sh.old`
- `Helium.desktop` --> `Helium.desktop.old`
which will be overwritten at every update
- Adds desktop launcher to `/home/<USER>/.local/share/applications`
- Keeps backup archives from
- `Helium.AppImage`
- `helium_helper.sh`
- `helium_launcher_update.sh`
- `Helium.desktop`
- `net.imput.helium`
- Adds desktop launcher to `$HOME/.local/share/applications`
- Adds options to launcher which are run by `helium_launcher_updater.sh`
- Update Helium
- Update Script
@ -60,14 +80,14 @@ Since this script is interactive, it doesn't keep logs.
### Helium_Launcher_Update.sh
- Update Helium from launcher
- Assumes:
- Presence of `/home/<USER>/.apps/Helium` when updating | changeable in line 19 `INSTALL_PATH`
- Presence of `$HOME/.apps/Helium` when updating | changeable in line 21 `INSTALL_PATH`
- Executable named `Helium.AppImage`
- Loggs to `/home/<USER>/.apps/Helium/assets/logs`
- Keeps backups of
- `Helium.AppImage` --> `Helium.AppImage.old`
- `helium_helper.sh` --> `helium_helper.sh.old`
- `helium_launcher_update.sh` --> `helium_launcher_update.sh.old`
- `Helium.desktop` --> `Helium.desktop.old`
which will be overwritten at every update
- Loggs to `$HOME/.apps/Helium/assets/logs`
- Keeps backup archives from
- `Helium.AppImage`
- `helium_helper.sh`
- `helium_launcher_update.sh`
- `Helium.desktop`
- `net.imput.helium`
- Run `helium_launcher_update.sh -h` for help
&nbsp;

View file

@ -0,0 +1,3 @@
on:
pull_requests:
pull_request_target:

95
devdoc.md Normal file
View file

@ -0,0 +1,95 @@
# To Do List Helium installer
## Last Jobs
- Readme updated
- Desktop Entry updater --> Complete
- Launcher has an update option now
- Launcher installer refined
- Clean Up
---
- Script updater
- Remote script check simplified
- Remover function extended
- Alias remover added
- Script remover added
- helium_auto_update.sh renamed to helium_launcher_update.sh
- Desktop notifications added
- Launcher functions extended
- Update script option added
- Show log option added
- Variables universalized
- Wiki created
---
- sed command fixed in remover
- ARCH variable added
- APP_SOURCE variable changed
- BRANCH variable added
- FILE_EXTENSION variable added
- Readme updated
- Documentation/Wiki updated
---
- Shell detection added
- Alias support for fish added
- Removal process refined and adapted to fish
- Browser config backup
---
- Arch detection working
- Clean Up
- Copy Paste mistake fixed
- Backup process rewritten
- Custom backup method to pass as argument
- Custom backup path to pass as argument
- Default if left blank
- Removal process adjusted
- $1 verifier added
- Readme updated
## Add/To Do
- Roll back from backup
- Update Readme
- Make functional launcher optional
## Repo
- Merge workflow
- Convert URLs from __main__ to __stable__
- Remove to do list
- Remove comment from script
## Fix
## Notes
- Auto Update
```sh
while true ; do
read -p " Enable automatic update check on login? (y/N) : " AUTO_UPDATE
if [[ "$AUTO_UPDATE" == "" || "$AUTO_UPDATE" == "n" || "$AUTO_UPDATE" == "N" ]] ; then
break
elif [[ "$AUTO_UPDATE" == "y" || "$AUTO_UPDATE" == "Y" ]] ; then
if ! [ -f "$PROFILE" ] ; then
echo -e "\n ${RED}Following file is missing :\n\n${YEL}$PROFILE\n\n ${CYN}Please investigate and re-run script !${CRS}"
exit 1
else
wget -P $TMP https://lab.c95.org/fr4nz/shell-scripts/src/branch/main/helium-browser/helium_auto_update.sh -q --show-progress
chmod +x $TMP/helium_auto_update.sh
mv $TMP/helium_auto_update.sh $INSTALL_PATH/helium_auto_update.sh
echo >> $PROFILE
echo "### HELIUM AUTO UPDATE ###" >> $PROFILE
echo "${INSTALL_PATH}/helium_auto_update.sh" >> $PROFILE
echo >> $PROFILE
echo -e "\n ${GRN}Automatic updates enabled ! ${CRS}\n"
break
fi
else
echo -e " ${YEL}Invalid response !${CRS}\n"
fi
done
```

View file

@ -9,19 +9,23 @@ YEL="\e[0;33m"
RED="\e[0;31m"
GRN="\e[0;32m"
LCY="\e[1;36m"
WHT="\e[1;37m"
CRS="\e[0m"
## GLOBAL VARIABLES
APP_NAME="Helium"
APP_NAME_LONG="Helium Web Browser"
ARCH="x86_64"
FILE_EXTENSION="AppImage"
APP_SOURCE="GitHub"
ARCH_OVERRIDE=""
BACKUP_METHOD="full"
BACKUP_COMPRESSION_OVERRIDE=""
SCRIPT_NAME="$APP_NAME Helper Script"
SCRIPT_FILE_NAME="helium_helper.sh"
AUTO_SCRIPT_FILE_NAME="helium_launcher_update.sh"
SCRIPT_VERSION="0.5.8"
SCRIPT_VERSION="0.5.9"
ALIAS="update-helium"
DATE=$(date +"%d%m%y")
## LOCATIONS
TMP=/tmp/$APP_NAME
@ -44,15 +48,13 @@ APP_SOURCE_URL=https://api.github.com/repos/imputnet/helium-linux/releases/lates
### DEPENDENCIES
cmd_query() {
#local PACKAGE=$1
if ! command -v $PACKAGE > /dev/null 2>&1 ; then
echo " - $PACKAGE" >> $TMP/missingDeps
if ! command -v $PACKAGE > /dev/null 2>&1 ; then
echo " - $PACKAGE" >> $TMP/missingDeps
fi
}
dependency_check () {
DEPENDENCIES=("curl" "wget")
DEPENDENCIES=("curl" "wget" "tar")
mkdir -p $TMP
for PACKAGE in "${DEPENDENCIES[@]}" ; do
@ -62,15 +64,13 @@ dependency_check () {
if [ -f "$TMP/missingDeps" ] ; then
MISSING=$(cat $TMP/missingDeps)
echo -e "\n ${RED}Following dependencies are missing :\n\n${CRS}$MISSING\n\n ${CYN}Please install and re-run script !${CRS}"
echo -e " ${RED}Following dependencies are missing :\n\n${CRS}$MISSING\n\n ${CYN}Please install and re-run script !${CRS}\n"
exit_clean
fi
}
### SHELL CHECK
shell_query() {
#local SHELL_OPTION=$1
if [ "$(echo $SHELL | grep "$SHELL_OPTION")" ] ; then
ACTIVE_SHELL=$SHELL_OPTION
fi
@ -78,43 +78,59 @@ shell_query() {
}
shell_check() {
SHELLS=("bash" "fish" "ksh" "zsh")
SHELLS=("bash" "fish" "zsh")
for SHELL_OPTION in "${SHELLS[@]}" ; do
shell_query "$SHELL_OPTION"
done
}
### ARCH CHECK
arch_check() {
if [ "$ARCH_OVERRIDE" ] ; then
ARCH=$ARCH_OVERRIDE
else
ARCH=$(uname -m)
if [ "$ARCH" == "aarch64" ] ; then
ARCH="arm64"
elif [ "$ARCH" == "amd64" ] ; then
ARCH="x86_64"
fi
fi
}
### CHECK LOCAL INSTALL
local_check() {
if ! [ -d "$INSTALL_PATH" ] ; then
echo -e "\n ${RED}$APP_NAME_LONG directory not found!${CRS}"
install_helium
echo -e "\n ${YEL}$APP_NAME_LONG directory not found!${CRS}\n"
install_application
exit
elif ! [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then
echo -e "\n ${RED}$APP_NAME_LONG directory found but no executable named ${CYN}$APP_NAME.$FILE_EXTENSION${RED}!${CRS}"
install_helium
echo -e "\n ${YEL}$APP_NAME_LONG directory found but no executable named ${CYN}$APP_NAME.$FILE_EXTENSION${YEL}!${CRS}\n"
install_application
exit
fi
}
### INSTALL
install_helium() {
install_application() {
if [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then
echo -e "\n ${YEL}$APP_NAME_LONG AppImage found! Trying to update...${CRS}"
update_helium
echo -e " ${YEL}$APP_NAME_LONG AppImage found! Trying to update...${CRS}"
update_application
exit
fi
while true ; do
read -p " Download and install $APP_NAME_LONG from $APP_SOURCE? (Y/n) : " CONFIRM_INSTALL
echo
if [[ "$CONFIRM_INSTALL" == "" || "$CONFIRM_INSTALL" == "y" || "$CONFIRM_INSTALL" == "Y" ]] ; then
DOWNLOAD_URL=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}')
APP_SOURCE_FILENAME=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}' | awk -F'/' '{print $9}')
wget -P $TMP $DOWNLOAD_URL -q --show-progress
echo -e "\n - Downloading ${CYN}$APP_SOURCE_FILENAME${CRS}..."
wget -P $TMP $DOWNLOAD_URL -q
chmod +x $TMP/$APP_SOURCE_FILENAME
mkdir -p $INSTALL_PATH
mv $TMP/$APP_SOURCE_FILENAME $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION
@ -123,13 +139,12 @@ install_helium() {
break
elif [[ "$CONFIRM_INSTALL" == "n" || "$CONFIRM_INSTALL" == "N" ]] ; then
echo -e " ${RED}Cancelled!${CRS}"
echo -e "\n ${RED}Cancelled!${CRS}\n"
break
else
echo -e " ${YEL}Invalid response!${CRS}\n"
echo -e "\n ${YEL}Invalid response!${CRS}\n"
fi
done
}
@ -142,7 +157,6 @@ add_launcher() {
while true ; do
echo
read -p " Add $APP_NAME_LONG launcher to $LAUNCHER_PATH? (Y/n) : " CONFIRM_LAUNCHER
echo
if [[ "$CONFIRM_LAUNCHER" == "" || "$CONFIRM_LAUNCHER" == "y" || "$CONFIRM_LAUNCHER" == "Y" ]] ; then
LAUNCHER_URL=$REMOTE_REPO_URL/assets/launcher/helium.desktop.template
@ -151,13 +165,15 @@ add_launcher() {
LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}')
mkdir -p $LAUNCHER_PATH $SCRIPT_PATH $BACKUP_PATH $ASSET_PATH/icon
if ! [ -f "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME" ] ; then
wget -P $TMP $AUTO_SCRIPT_URL -q --show-progress
echo -e "\n - Downloading ${CYN}$AUTO_SCRIPT_FILE_NAME${CRS}..."
wget -P $TMP $AUTO_SCRIPT_URL -q
chmod +x $TMP/$AUTO_SCRIPT_FILE_NAME
mv $TMP/$AUTO_SCRIPT_FILE_NAME $SCRIPT_PATH
fi
wget -P $TMP $LAUNCHER_URL -q --show-progress
wget -P $TMP $ICON_URL -q --show-progress
echo -e "\n - Downloading ${CYN}launcher files${CRS}..."
wget -P $TMP $LAUNCHER_URL -q
wget -P $TMP $ICON_URL -q
sed -i "s|%APP_LOCATION%|$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION|" $TMP/helium.desktop.template
sed -i "s|%ICON_LOCATION%|$ASSET_PATH/icon/helium.png|" $TMP/helium.desktop.template
sed -i "s|%APP_VERSION%|$LOCAL_VERSION|" $TMP/helium.desktop.template
@ -176,12 +192,11 @@ add_launcher() {
else
echo -e " ${YEL}Invalid response!${CRS}\n"
fi
done
else
echo -e "\n ${RED}$APP_NAME_LONG AppImage not found! Can't add launcher...${CRS}"
install_helium
install_application
exit
fi
}
@ -197,41 +212,49 @@ add_alias() {
if [ "$ACTIVE_SHELL" == "zsh" ] ; then
if [ "$(cat $HOME/.zshrc | grep "$ALIAS")" ] ; then
echo -e "\n ${LCY}$ALIAS ${GRN}already present in${CRS} $HOME/.zshrc\n"
exit
echo -e "\n ${LCY}$ALIAS${CRS} already present in ${CYN}$HOME/.zshrc${CRS}\n"
else
echo "### $APP_NAME_LONG Alias zsh ###" >> $HOME/.zshrc
echo "alias $ALIAS=\"$SCRIPT_PATH/$SCRIPT_FILE_NAME\"" >> $HOME/.zshrc
echo >> $HOME/.zshrc
echo -e "\n ${LCY}$ALIAS${CRS} added to ${CYN}$HOME/.zshrc${CRS}\n"
fi
echo "alias $ALIAS=\"$SCRIPT_PATH/$SCRIPT_FILE_NAME\"" >> $HOME/.zshrc
echo -e "\n ${LCY}$ALIAS ${GRN}added to${CRS} $HOME/.zshrc\n"
elif [ "$ACTIVE_SHELL" == "bash" ] ; then
if [ "$(cat $HOME/.bashrc | grep "$ALIAS")" ] ; then
echo -e "\n ${LCY}$ALIAS ${GRN}already present in${CRS} $HOME/.bashrc\n"
exit
echo -e "\n ${LCY}$ALIAS${CRS} already present in ${CYN}$HOME/.bashrc${CRS}\n"
else
echo "### $APP_NAME_LONG Alias bash ###" >> $HOME/.bashrc
echo "alias $ALIAS=\"$SCRIPT_PATH/$SCRIPT_FILE_NAME\"" >> $HOME/.bashrc
echo >> $HOME/.bashrc
echo -e "\n ${LCY}$ALIAS${CRS} added to ${CYN}$HOME/.bashrc${CRS}\n"
fi
echo "alias $ALIAS=\"$SCRIPT_PATH/$SCRIPT_FILE_NAME\"" >> $HOME/.zshrc
echo -e "\n ${LCY}$ALIAS ${GRN}added to${CRS} $HOME/.bashrc\n"
elif [ "$ACTIVE_SHELL" == "fish" ] ; then
if [ "$(cat $HOME/.config/fish/config.fish | grep "source $HOME/.config/fish/$ALIAS.fish")" ] ; then
echo -e "\n ${LCY}$ALIAS ${GRN}already present in${CRS} $HOME/.config/fish/config.fish\n"
exit
echo -e "\n ${LCY}$ALIAS${CRS} already present in ${CYN}$HOME/.config/fish/config.fish${CRS}\n"
else
echo "### $APP_NAME_LONG Alias FISH ###" > $HOME/.config/fish/$ALIAS.fish
echo >> $HOME/.config/fish/$ALIAS.fish
echo "function $ALIAS" >> $HOME/.config/fish/$ALIAS.fish
echo " $SCRIPT_PATH/$SCRIPT_FILE_NAME \$argv" >> $HOME/.config/fish/$ALIAS.fish
echo "end" >> $HOME/.config/fish/$ALIAS.fish
echo >> $HOME/.config/fish/$ALIAS.fish
echo "source $HOME/.config/fish/$ALIAS.fish" >> $HOME/.config/fish/config.fish
echo -e "\n ${LCY}$ALIAS ${CRS}added to ${CYN}$HOME/.config/fish/config.fish${CRS}\n"
fi
echo "### Helium Helper Alias FISH ###" > $HOME/.config/fish/$ALIAS.fish
echo >> $HOME/.config/fish/$ALIAS.fish
echo "function $ALIAS" >> $HOME/.config/fish/$ALIAS.fish
echo " $SCRIPT_PATH/$SCRIPT_FILE_NAME \$argv" >> $HOME/.config/fish/$ALIAS.fish
echo "end" >> $HOME/.config/fish/$ALIAS.fish
echo "source $HOME/.config/fish/$ALIAS.fish" >> $HOME/.config/fish/config.fish
echo -e "\n ${LCY}$ALIAS ${GRN}added to${CRS} $HOME/.config/fish/config.fish\n"
else
echo -e "\n ${LCY}$ACTIVE_SHELL ${RED}not yet supported!${CRS}\n"
echo -e " ${LCY}Working implementation are available for bash, zsh & fish!${CRS}\n"
echo -e "\n ${LCY}$ACTIVE_SHELL${RED}shell is not yet supported!${CRS}\n"
echo -e " ${CRS}Working implementation are available for bash, zsh & fish!${CRS}\n"
fi
}
### UPDATE
update_helium() {
update_application() {
LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}')
APP_SOURCE_VERSION=$(curl -s $APP_SOURCE_URL | grep "tag_name" | tr -d \", | awk '{print $2}')
@ -254,80 +277,214 @@ update_helium() {
elif [ "$APP_SOURCE_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then
echo -e "\n ${LCY}$APP_NAME_LONG is updatable!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}"
echo -e " ${CYN}$APP_SOURCE Version :\t${CRS}${APP_SOURCE_VERSION}\n"
app_version_info
while true ; do
read -p " Download and update $APP_NAME_LONG from $APP_SOURCE? (Y/n) : " CONFIRM
echo
if [[ "$CONFIRM" == "" || "$CONFIRM" == "y" || "$CONFIRM" == "Y" ]] ; then
DOWNLOAD_URL=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}')
APP_SOURCE_FILENAME=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}' | awk -F'/' '{print $9}')
mkdir -p $TMP $BACKUP_PATH
wget -P $TMP $DOWNLOAD_URL -q --show-progress
mkdir -p $TMP
echo -e "\n - Downloading ${CYN}$APP_SOURCE_FILENAME${CRS}..."
wget -P $TMP $DOWNLOAD_URL -q
${BACKUP_METHOD}_backup
chmod +x $TMP/$APP_SOURCE_FILENAME
if [ -f "$BACKUP_PATH/$APP_NAME.old" ] ; then
rm $BACKUP_PATH/$APP_NAME.old
fi
if [ -d "$APP_CONFIG_PATH" ] ; then
if [ -f "$BACKUP_PATH/$APP_NAME.config.tar" ] ; then
rm $BACKUP_PATH/$APP_NAME.config.tar
fi
tar -cf $BACKUP_PATH/$APP_NAME.config.tar $APP_CONFIG_PATH > /dev/null 2>&1
fi
mv $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION $BACKUP_PATH/$APP_NAME.old
mv $TMP/$APP_SOURCE_FILENAME $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION
cp $LAUNCHER_PATH/$APP_NAME.desktop $BACKUP_PATH/$APP_NAME.desktop.old
chmod -x $BACKUP_PATH/*.sh.old $BACKUP_PATH/$APP_NAME.old
sed -i "s|X-AppImage-Version=.*|X-AppImage-Version=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}')|" $LAUNCHER_PATH/$APP_NAME.desktop
echo -e "\n ${GRN}$APP_NAME_LONG is up-to-date !${CRS}\n"
echo -e " ${GRN}$APP_NAME_LONG is up-to-date!${CRS}\n"
break
elif [[ "$CONFIRM" == "n" || "$CONFIRM" == "N" ]] ; then
echo -e " ${RED}Cancelled!${CRS}\n"
echo -e "\n ${RED}Cancelled!${CRS}\n"
exit
else
echo -e " ${YEL}Invalid response!${CRS}\n"
echo -e "\n ${YEL}Invalid response!${CRS}\n"
fi
done
else
echo -e "\n ${RED}Version tags malformed or you are using a Beta version!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}"
echo -e " ${CYN}$APP_SOURCE Version :\t${CRS}${APP_SOURCE_VERSION}\n"
app_version_info
echo -e " ${RED}Update failed... Exiting...${CRS}\n"
exit
fi
}
### AUTOMATIC UPDATE --> TO DO?
auto_update() {
if ! [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then
echo -e "\n ${RED}$APP_NAME AppImage not found! Can't add auto update script...${CRS}"
exit
### BACKUP
call_backup() {
if [ -f $BACKUP_PATH\/$APP_NAME\.$BACKUP_METHOD\.backup_* ] ; then
echo -e "\n ${CYN}A $BACKUP_METHOD backup already exists!${CRS}\n"
while true ; do
read -p " Overwrite backup? (y/N) : " OVERWRITE_BACKUP
if [[ "$OVERWRITE_BACKUP" == "" || "$OVERWRITE_BACKUP" == "n" || "$OVERWRITE_BACKUP" == "N" ]] ; then
echo -e "\n ${YEL}Skipping backup process...${CRS}\n"
break
elif [[ "$OVERWRITE_BACKUP" == "y" || "$OVERWRITE_BACKUP" == "Y" ]] ; then
echo -e "\n ${YEL}Overwriting backup...${CRS}"
rm $BACKUP_PATH/$APP_NAME.$BACKUP_METHOD.backup_*
${BACKUP_METHOD}_backup
break
else
echo -e "\n ${YEL}Invalid response!${CRS}\n"
fi
done
else
${BACKUP_METHOD}_backup
fi
}
backup_file_collector() {
for BACKUP_ITEM in ${BACKUPABLE[@]} ; do
if [ -d "$BACKUP_ITEM" ] ; then
mkdir -p $TMP/backup
cp -r $BACKUP_ITEM $TMP/backup
elif [ -f "$BACKUP_ITEM" ] ; then
mkdir -p $TMP/backup
cp $BACKUP_ITEM $TMP/backup
fi
done
}
script_backup() {
if [ -d "$SCRIPT_PATH" ] ; then
BACKUPABLE=("$SCRIPT_PATH/$SCRIPT_FILE_NAME" "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME")
echo -e "\n - ${CRS}Collecting files for ${CYN}$BACKUP_METHOD${CRS} backup...${CRS}"
backup_file_collector
pack_backup
else
echo -e " ${YEL}Nothing to back up...${CRS}"
fi
}
app_backup() {
if [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then
BACKUPABLE=("$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION")
echo -e "\n - ${CRS}Collecting files for ${CYN}$BACKUP_METHOD${CRS} backup...${CRS}"
backup_file_collector
pack_backup
else
echo -e " ${YEL}Nothing to back up...${CRS}"
fi
}
config_backup() {
if [[ -d "$LAUNCHER_PATH" || -d $APP_CONFIG_PATH ]] ; then
BACKUPABLE=("$LAUNCHER_PATH/$APP_NAME.desktop" "$APP_CONFIG_PATH")
echo -e "\n - ${CRS}Collecting files for ${CYN}$BACKUP_METHOD${CRS} backup...${CRS}"
backup_file_collector
pack_backup
else
echo -e " ${YEL}Nothing to back up...${CRS}"
fi
}
full_backup() {
if [[ -d "$INSTALL_PATH" || -d "$SCRIPT_PATH" || -d $APP_CONFIG_PATH ]] ; then
BACKUPABLE=("$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" "$SCRIPT_PATH/$SCRIPT_FILE_NAME" "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME" "$LAUNCHER_PATH/$APP_NAME.desktop" "$APP_CONFIG_PATH")
echo -e "\n - ${CRS}Collecting files for ${CYN}$BACKUP_METHOD${CRS} backup...${CRS}"
backup_file_collector
pack_backup
else
echo -e " ${YEL}Nothing to back up...${CRS}"
fi
}
pack_backup() {
if [ -d "$TMP/backup" ] ; then
CWD=$(pwd)
cd $TMP/backup
else
echo -e "\n ${RED}Not implemented yet...${CRS}"
if [[ -f "*.sh" ]] ; then
chmod -x *.sh
elif [[ -f "*.$FILE_EXTENSION" ]] ; then
chmod -x *.$FILE_EXTENSION
fi
if [ "$BACKUP_COMPRESSION_OVERRIDE" ] ; then
BACKUP_COMPRESSION=$BACKUP_COMPRESSION_OVERRIDE
else
COMPRESSION_METHOD=("pbzip2" "gzip" "bzip2" "zip")
until [ "$BACKUP_COMPRESSION" ] ; do
for COMPRESSION_TYPE in ${COMPRESSION_METHOD[@]} ; do
if [ "$(command -v $COMPRESSION_TYPE) > /dev/null 2>&1" ] ; then
BACKUP_COMPRESSION=$COMPRESSION_TYPE
break
fi
done
done
fi
echo -e "\n - ${CRS}Compressing backup archive with ${CYN}$BACKUP_COMPRESSION${CRS}...${CRS}\n"
if [ "$BACKUP_COMPRESSION" == "pbzip2" ] ; then
tar -cf $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar * > /dev/null 2>&1
pbzip2 $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar
mkdir -p $BACKUP_PATH
mv $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.bz2 $BACKUP_PATH
cd $TMP && rm -rf backup
elif [ "$BACKUP_COMPRESSION" == "gzip" ] ; then
tar -cf $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar * > /dev/null 2>&1
gzip $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar
mkdir -p $BACKUP_PATH
mv $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.gz $BACKUP_PATH
cd $TMP && rm -rf backup
elif [ "$BACKUP_COMPRESSION" == "bzip2" ] ; then
tar -cf $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar * > /dev/null 2>&1
bzip2 $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar
mkdir -p $BACKUP_PATH
mv $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.bz2 $BACKUP_PATH
cd $TMP && rm -rf backup
elif [ "$BACKUP_COMPRESSION" == "zip" ] ; then
zip -r $APP_NAME.$BACKUP_METHOD.backup_$DATE.zip $APP_NAME.$BACKUP_METHOD.backup_$DATE > /dev/null 2>&1
mkdir -p $BACKUP_PATH
mv $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.zip $BACKUP_PATH
cd $TMP && rm -rf backup
else
echo -e " ${YEL}No supported compression method detected! Copying backup uncompressed...${CRS}\n"
mkdir -p $BACKUP_PATH
mv $TMP/backup $BACKUP_PATH/$APP_NAME.$BACKUP_METHOD.backup_$DATE
cd $TMP && rm -rf backup
fi
echo -e " - ${CRS}Backup stored in ${CYN}$BACKUP_PATH${CRS}...${CRS}\n"
cd $CWD
fi
}
### REMOVE
remove_helium() {
remove_application() {
if [ -d "$INSTALL_PATH" ] ; then
while true ; do
read -p " Remove $APP_NAME_LONG incl. backups and launcher? (Y/n) : " CONFIRM_REMOVE
read -p " Remove $APP_NAME_LONG incl. backups, configuration and launcher? (Y/n) : " CONFIRM_REMOVE
if [[ "$CONFIRM_REMOVE" == "" || "$CONFIRM_REMOVE" == "y" || "$CONFIRM_REMOVE" == "Y" ]] ; then
REMOVABLE=("$INSTALL_PATH" "$LAUNCHER_PATH/$APP_NAME.desktop" "$SCRIPT_PATH/$SCRIPT_FILE_NAME" "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME")
echo
REMOVABLE=("$INSTALL_PATH" "$LAUNCHER_PATH/$APP_NAME.desktop" "$APP_CONFIG_PATH" "$SCRIPT_PATH/$SCRIPT_FILE_NAME" "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME")
echo -e "\n - ${CRS}Removing ${CYN}$APP_NAME_LONG${CRS} files, directories and configuration...${CRS}"
for RM_PATH in "${REMOVABLE[@]}" ; do
if [[ -f "$RM_PATH" || -d "$RM_PATH" ]] ; then
echo -e " ${YEL}Removing ${CYN}$RM_PATH ${YEL}...${CRS}"
rm -rf "$RM_PATH"
fi
done
@ -336,26 +493,28 @@ remove_helium() {
if [ "$ACTIVE_SHELL" == "zsh" ] ; then
if [ "$(cat $HOME/.zshrc | grep "$ALIAS")" ] ; then
sed -i "/$APP_NAME_LONG/d" $HOME/.zshrc
sed -i "/$ALIAS/d" $HOME/.zshrc
echo -e "\n ${CYN}$ACTIVE_SHELL ${YEL}alias removed ... ${CRS}"
echo -e "\n - Alias removed from ${CYN}$ACTIVE_SHELL${CRS}"
fi
elif [ "$ACTIVE_SHELL" == "bash" ] ; then
if [ "$(cat $HOME/.bashrc | grep "$ALIAS")" ] ; then
sed -i "/$APP_NAME_LONG/d" $HOME/.bashrc
sed -i "/$ALIAS/d" $HOME/.bashrc
echo -e "\n ${CYN}$ACTIVE_SHELL ${YEL}alias removed ... ${CRS}"
echo -e "\n - Alias removed from ${CYN}$ACTIVE_SHELL${CRS}"
fi
elif [ "$ACTIVE_SHELL" == "fish" ] ; then
if [ "$(cat $HOME/.config/fish/config.fish | grep "source $HOME/.config/fish/$ALIAS.fish")" ] ; then
sed -i "/$ALIAS/d" $HOME/.config/fish/config.fish
rm $HOME/.config/fish/$ALIAS.fish
echo -e "\n ${CYN}$ACTIVE_SHELL ${YEL}alias removed ... ${CRS}"
echo -e "\n - Alias removed from ${CYN}$ACTIVE_SHELL${CRS}"
fi
fi
echo -e "\n ${RED}$APP_NAME_LONG removed!${CRS}\n"
exit
echo -e "\n ${YEL}$APP_NAME_LONG removed!${CRS}\n"
break
elif [[ "$CONFIRM_REMOVE" == "n" || "$CONFIRM_REMOVE" == "N" ]] ; then
echo -e " ${RED}Cancelled!${CRS}"
@ -367,21 +526,24 @@ remove_helium() {
done
else
echo -e "\n ${RED}Can't remove $APP_NAME_LONG! ${YEL}$INSTALL_PATH ${RED}directory not found...${CRS}"
echo -e " ${RED}Can't remove $APP_NAME_LONG! ${CYN}$INSTALL_PATH ${RED}directory not found...${CRS}\n"
exit
fi
}
### SCRIPT VERSION
script_version() {
echo -e "\n ${CYN}$APP_NAME_LONG Helper Script Version :${CRS} $SCRIPT_VERSION\n"
exit
echo -e "\n ${CYN}$APP_NAME_LONG Helper Script Version : ${CRS}$SCRIPT_VERSION\n"
}
### UPDATE SCRIPT
scrip_version_info() {
echo -e " - ${CYN}Local Version :\t${CRS}$SCRIPT_VERSION"
echo -e " - ${CYN}Remote Version :\t${CRS}$REMOTE_SCRIPT_VERSION"
echo -e " - ${CYN}Update Branch :\t${CRS}$REMOTE_REPO_BRANCH\n"
}
update_script() {
### CHECK FOR LOCAL SCRIPT
if ! [ -f "$SCRIPT_PATH/$SCRIPT_FILE_NAME" ] ; then
echo -e "\n ${YEL}$SCRIPT_FILE_NAME not found...${CRS}"
@ -390,15 +552,14 @@ update_script() {
read -p " Copy script to $SCRIPT_PATH? (Y/n) : " CONFIRM_SCRIPT_INSTALL
if [[ "$CONFIRM_SCRIPT_INSTALL" == "" || "$CONFIRM_SCRIPT_INSTALL" == "y" || "$CONFIRM_SCRIPT_INSTALL" == "Y" ]] ; then
if ! [ -d "$SCRIPT_PATH" ] ; then
mkdir -p $SCRIPT_PATH
fi
mkdir -p $SCRIPT_PATH
mkdir -p $TMP
wget -P $TMP $REMOTE_SCRIPT_URL -q
chmod +x $TMP/$SCRIPT_FILE_NAME
mv $TMP/$SCRIPT_FILE_NAME $SCRIPT_PATH
wget -P $TMP $REMOTE_REPO_URL/$AUTO_SCRIPT_FILE_NAME -q
chmod +x $TMP/$SCRIPT_FILE_NAME $TMP/$AUTO_SCRIPT_FILE_NAME
mv $TMP/$SCRIPT_FILE_NAME $TMP/$AUTO_SCRIPT_FILE_NAME $SCRIPT_PATH
echo -e "\n ${GRN}$SCRIPT_FILE_NAME is up-to-date!${CRS}"
exit_clean
break
elif [[ "$CONFIRM_SCRIPT_INSTALL" == "n" || "$CONFIRM_SCRIPT_INSTALL" == "N" ]] ; then
echo -e " ${RED}Cancelled!${CRS}\n"
@ -430,9 +591,8 @@ update_script() {
echo -e "\n ${GRN}$SCRIPT_FILE_NAME is already up-to-date!${CRS}\n"
elif [ "$REMOTE_SCRIPT_VERSION_NUM" -gt "$SCRIPT_VERSION_NUM" ] ; then
echo -e "\n ${YEL}$SCRIPT_FILE_NAME is updatable!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${SCRIPT_VERSION}"
echo -e " ${CYN}Remote Version :\t${CRS}${REMOTE_SCRIPT_VERSION}\n"
echo -e "\n ${LCY}$SCRIPT_FILE_NAME is updatable!${CRS}\n"
scrip_version_info
while true ; do
read -p " Update $SCRIPT_FILE_NAME? (Y/n) : " CONFIRM_SCRIPT_UPDATE
@ -443,15 +603,16 @@ update_script() {
mkdir -p $BACKUP_PATH
fi
mv $SCRIPT_PATH/$SCRIPT_FILE_NAME $BACKUP_PATH/$SCRIPT_FILE_NAME.old
mkdir -p $TMP
mv $SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME $BACKUP_PATH/$AUTO_SCRIPT_FILE_NAME.old
wget -P $TMP $REMOTE_SCRIPT_URL -q
chmod +x $TMP/$SCRIPT_FILE_NAME
mv $TMP/$SCRIPT_FILE_NAME $SCRIPT_PATH
wget -P $TMP $REMOTE_REPO_URL/$AUTO_SCRIPT_FILE_NAME -q
chmod +x $TMP/$SCRIPT_FILE_NAME $TMP/$AUTO_SCRIPT_FILE_NAME
mv $TMP/$SCRIPT_FILE_NAME $TMP/$AUTO_SCRIPT_FILE_NAME $SCRIPT_PATH
echo -e " ${GRN}$SCRIPT_FILE_NAME is up-to-date!${CRS}"
break
elif [[ "$CONFIRM_SCRIPT_UPDATE" == "n" || "$CONFIRM_SCRIPT_UPDATE" == "N" ]] ; then
echo -e " ${RED}Cancelled!${CRS}"
echo -e " ${RED}Cancelled!${CRS}\n"
break
else
@ -461,18 +622,21 @@ update_script() {
else
echo -e "\n ${RED}Version tags malformed or you are using a Beta version!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${SCRIPT_VERSION}"
echo -e " ${CYN}Remote Version :\t${CRS}${REMOTE_SCRIPT_VERSION}\n"
scrip_version_info
echo -e " ${RED}Updating script failed...${CRS}\n"
fi
}
### COMPARE APPIMAGE VERSION
### COMPARE APP VERSION
app_version_info() {
echo -e " - ${CYN}Local Version :\t${CRS}$LOCAL_VERSION"
echo -e " - ${CYN}$APP_SOURCE Version :\t${CRS}$APP_SOURCE_VERSION\n"
}
compare_version() {
LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}')
APP_SOURCE_VERSION=$(curl -s $APP_SOURCE_URL | grep "tag_name" | tr -d \", | awk '{print $2}')
### CHECK FOR EMPTY VERSION TAGS
if [ -z "$APP_SOURCE_VERSION" ] ; then
echo -e "\n ${RED}Empty version tag from ${CYN}$APP_SOURCE${RED}! Can't compare, exiting...${CRS}\n"
exit
@ -482,28 +646,20 @@ compare_version() {
exit
fi
### COMPARE LOCAL & REMOTE VERSION
LOCAL_VERSION_NUM=$(echo $LOCAL_VERSION | tr -d .)
APP_SOURCE_VERSION_NUM=$(echo $APP_SOURCE_VERSION | tr -d .)
if [ "$APP_SOURCE_VERSION" == "$LOCAL_VERSION" ] ; then
echo -e "\n ${GRN}$APP_NAME_LONG is up-to-date!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}"
echo -e " ${CYN}$APP_SOURCE Version :\t${CRS}${APP_SOURCE_VERSION}\n"
exit
app_version_info
elif [ "$APP_SOURCE_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then
echo -e "\n ${YEL}$APP_NAME_LONG is updatable!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}"
echo -e " ${CYN}$APP_SOURCE Version :\t${CRS}${APP_SOURCE_VERSION}\n"
exit
echo -e "\n ${LCY}$APP_NAME_LONG is updatable!${CRS}\n"
app_version_info
else
echo -e "\n ${RED}Version tags malformed or you are using a Beta version!${CRS}\n"
echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}"
echo -e " ${CYN}$APP_SOURCE Version :\t${CRS}${APP_SOURCE_VERSION}\n"
echo -e " ${RED}Update failed ... Exiting ...${CRS}\n"
exit
app_version_info
fi
}
@ -511,19 +667,19 @@ compare_version() {
help() {
echo -e "\n${LCY}${SCRIPT_NAME}${CRS}\n"
echo -e "$APP_NAME_LONG installer & updater script\n"
echo -e "Syntax: $SCRIPT_FILE_NAME [ -i | -l | -a | -u | -r | -c | -s | -S | -h ]\n" # | -U |
echo -e "Syntax: $SCRIPT_FILE_NAME [ -i | -l | -a | -u | -b | -r | -c | -s | -S | -h ]\n"
echo -e "Options:\n"
echo -e "\t-i\tDownload & install $APP_NAME_LONG from $APP_SOURCE"
echo -e "\t-i\tInstall $APP_NAME_LONG from $APP_SOURCE"
echo -e "\t-l\tCreate desktop launcher"
echo -e "\t-a\tCreate alias for $SCRIPT_FILE_NAME"
echo -e "\t-u\tDownload & update $APP_NAME_LONG from $APP_SOURCE"
#echo -e "\t-U\tEnable automatic updates on login ${RED}--> Not yet working${CRS}"
echo -e "\t-u\tUpdate $APP_NAME_LONG from $APP_SOURCE"
echo -e "\t-b\tBackup $APP_NAME_LONG & configuration"
echo -e "\t-r\tRemove $APP_NAME_LONG"
echo -e "\t-c\tCompare local to remote version"
echo -e "\t-s\tShow script version"
echo -e "\t-S\tUpdate $SCRIPT_FILE_NAME"
echo -e "\t-h\tPrint this help page.\n"
echo -e "Configured locations:\n"
echo -e "\t-h\tPrint this help page\n"
echo -e "Configured directories:\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"
@ -541,48 +697,88 @@ exit_clean() {
########## MAIN ##########
## GET OPTIONS
while getopts ":i,:l,:a,:u,:U,:r,:c,:s,:S,:h" OPTION ; do
while getopts ":i,:l,:a,:u,:b,:r,:c,:s,:S,:h" OPTION ; do
if [ "$(echo $1 | wc -m)" -gt "3" ] ; then
echo -e "\n${YEL}Option ${RED}$1${YEL} not valid! Use only one parameter at a time...${CRS}"
help
exit
fi
case $OPTION in
i)
echo -e "\n ${CYN}Installing $APP_NAME_LONG...${CRS}"
echo -e "\n ${YEL}Installing $APP_NAME_LONG...${CRS}\n"
if [ "$#" -gt "1" ] ; then
ALL_PARAMETER=$@
for PARAMETER in ${ALL_PARAMETER[@]} ; do
if [ -d "$PARAMETER" ] ; then
INSTALL_PATH=$PARAMETER
fi
done
fi
dependency_check
install_helium
arch_check
install_application
exit_clean ;;
l)
echo -e "\n ${CYN}Adding $APP_NAME_LONG launcher...${CRS}"
echo -e "\n ${YEL}Adding $APP_NAME_LONG launcher...${CRS}"
dependency_check
local_check
add_launcher
exit_clean ;;
a)
echo -e "\n ${CYN}Adding alias...${CRS}"
echo -e "\n ${YEL}Adding alias...${CRS}"
if [ "$#" -gt "1" ] ; then
ALL_PARAMETER=$@
for PARAMETER in ${ALL_PARAMETER[@]} ; do
if [ "$PARAMETER" ] ; then
ALIAS=$PARAMETER
fi
done
fi
shell_check
add_alias
exit ;;
u)
echo -e "\n ${CYN}Updating $APP_NAME_LONG...${CRS}"
echo -e "\n ${YEL}Updating $APP_NAME_LONG...${CRS}"
dependency_check
arch_check
local_check
update_helium
update_application
exit_clean ;;
U)
echo -e "\n ${CYN}Enabling automatic updates...${CRS}"
dependency_check
local_check
auto_update
exit_clean ;;
b)
echo -e "\n ${YEL}Backing up $APP_NAME_LONG...${CRS}"
if [ "$#" -gt "1" ] ; then
ALL_PARAMETER=$@
for PARAMETER in ${ALL_PARAMETER[@]} ; do
if [[ "$PARAMETER" == "script" || "$PARAMETER" == "config" || "$PARAMETER" == "app" || "$PARAMETER" == "full" ]] ; then
BACKUP_METHOD=$PARAMETER
elif [[ "$PARAMETER" == "pbzip2" || "$PARAMETER" == "gzip" || "$PARAMETER" == "bzip2" || "$PARAMETER" == "zip" ]] ; then
BACKUP_COMPRESSION_OVERRIDE=$PARAMETER
elif [ -d "$PARAMETER" ] ; then
BACKUP_PATH=$PARAMETER
fi
done
fi
call_backup
exit ;;
r)
echo -e "\n ${CYN}Removing $APP_NAME_LONG...${CRS}"
remove_helium
echo -e "\n ${YEL}Removing $APP_NAME_LONG...${CRS}\n"
remove_application
exit ;;
c)
echo -e "\n ${CYN}Comparing remote to local version...${CRS}"
echo -e "\n ${YEL}Comparing remote to local version...${CRS}"
dependency_check
local_check
compare_version
@ -593,7 +789,7 @@ while getopts ":i,:l,:a,:u,:U,:r,:c,:s,:S,:h" OPTION ; do
exit ;;
S)
echo -e "\n ${CYN}Updating script...${CRS}"
echo -e "\n ${YEL}Updating script...${CRS}"
dependency_check
update_script
exit_clean ;;
@ -609,14 +805,15 @@ while getopts ":i,:l,:a,:u,:U,:r,:c,:s,:S,:h" OPTION ; do
esac
done
## DEPENDENCY CHECK
## ENVIRONMENT CHECK
dependency_check
arch_check
## CHECK FOR LOCAL INSTALL
## CHECK LOCAL INSTALL
local_check
## UPDATE
update_helium
update_application
## CLEAN
exit_clean

View file

@ -9,9 +9,11 @@ APP_NAME_LONG="Helium Web Browser"
ARCH="x86_64"
FILE_EXTENSION="AppImage"
APP_SOURCE="GitHub"
NOTIFY_NAME="Helium Helper"
SCRIPT_NAME="$APP_NAME Launcher Updater"
PARENT_SCRIPT_FILE_NAME="helium_helper.sh"
SCRIPT_FILE_NAME="helium_launcher_update.sh"
SCRIPT_VERSION="0.5.8"
SCRIPT_VERSION="0.5.9"
DATE=$(date)
## LOCATIONS
@ -64,7 +66,7 @@ dependency_check () {
if [ -f "$TMP/missingDeps" ] ; then
MISSING=$(cat $TMP/missingDeps)
echo "$DATE | Failed to update - missing dependencies : $MISSING" >> $LOG
notify-send --icon="$ICON" --app-name="Helium Helper" "Update failed! See log for details"
notify-send --icon="$ICON" "$NOTIFY_NAME" "Update failed! See log for details"
exit_clean
fi
@ -72,24 +74,107 @@ dependency_check () {
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
notify-send --icon="$ICON" --app-name="Helium Helper" "Update failed! See log for details"
notify-send --icon="$ICON" "$NOTIFY_NAME" "Update failed! See log for details"
exit
elif ! [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then
echo "$DATE | Failed to update - Local $APP_NAME AppImage not found" >> $LOG
notify-send --icon="$ICON" --app-name="Helium Helper" "Update failed! See log for details"
notify-send --icon="$ICON" "$NOTIFY_NAME" "Update failed! See log for details"
exit
fi
}
### BACKUP
backup_helium() {
if [[ -d "$INSTALL_PATH" || -d "$SCRIPT_PATH" || -d $APP_CONFIG_PATH ]] ; then
BACKUPABLE=("$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" "$SCRIPT_PATH/$SCRIPT_FILE_NAME" "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME" "$LAUNCHER_PATH/$APP_NAME.desktop" "$APP_CONFIG_PATH")
for BACKUP_ITEM in ${BACKUPABLE[@]} ; do
if [ -d "$BACKUP_ITEM" ] ; then
mkdir -p $TMP/backup
cp -r $BACKUP_ITEM $TMP/backup
elif [ -f "$BACKUP_ITEM" ] ; then
mkdir -p $TMP/backup
cp $BACKUP_ITEM $TMP/backup
fi
done
if [ -d "$TMP/backup" ] ; then
CWD=$(pwd)
cd $TMP/backup
chmod -x *.sh *.$FILE_EXTENSION > /dev/null 2>&1
if [ "$BACKUP_COMPRESSION_OVERRIDE" ] ; then
BACKUP_COMPRESSION=$BACKUP_COMPRESSION_OVERRIDE
elif ! [ "$BACKUP_COMPRESSION_OVERRIDE" ] ; then
COMPRESSION_METHOD=("pbzip2" "gzip" "bzip2" "zip")
until [ "$BACKUP_COMPRESSION" ] ; do
for COMPRESSION_TYPE in ${COMPRESSION_METHOD[@]} ; do
if [ "$(command -v $COMPRESSION_TYPE) > /dev/null 2>&1" ] ; then
BACKUP_COMPRESSION=$COMPRESSION_TYPE
break
fi
done
done
fi
if [ "$BACKUP_COMPRESSION" == "pbzip2" ] ; then
tar -cf $APP_NAME.backup_$DATE.tar * > /dev/null 2>&1
pbzip2 $APP_NAME.backup_$DATE.tar
mkdir -p $BACKUP_PATH
mv $APP_NAME.backup_$DATE.tar.bz2 $BACKUP_PATH
cd $TMP && rm -rf backup
elif [ "$BACKUP_COMPRESSION" == "gzip" ] ; then
tar -cf $APP_NAME.backup_$DATE.tar * > /dev/null 2>&1
gzip $APP_NAME.backup_$DATE.tar
mkdir -p $BACKUP_PATH
mv $APP_NAME.backup_$DATE.tar.gz $BACKUP_PATH
cd $TMP && rm -rf backup
elif [ "$BACKUP_COMPRESSION" == "bzip2" ] ; then
tar -cf $APP_NAME.backup_$DATE.tar * > /dev/null 2>&1
bzip2 $APP_NAME.backup_$DATE.tar
mkdir -p $BACKUP_PATH
mv $APP_NAME.backup_$DATE.tar.bz2 $BACKUP_PATH
cd $TMP && rm -rf backup
elif [ "$BACKUP_COMPRESSION" == "zip" ] ; then
tar -cf $APP_NAME.backup_$DATE.tar * > /dev/null 2>&1
zip -r $APP_NAME.backup_$DATE.tar.zip $APP_NAME.backup_$DATE.tar > /dev/null 2>&1
mkdir -p $BACKUP_PATH
mv $APP_NAME.backup_$DATE.tar.zip $BACKUP_PATH
cd $TMP && rm -rf backup
else
echo "$DATE | Backup - Backup (uncompressed) written to $BACKUP_PATH" >> $LOG
mkdir -p $BACKUP_PATH
mv $TMP/backup $BACKUP_PATH/$APP_NAME.backup_$DATE
cd $TMP && rm -rf backup
fi
echo "$DATE | Backup - Backup (compressed $BACKUP_COMPRESSION archive) written to $BACKUP_PATH" >> $LOG
notify-send --icon="$ICON" "$NOTIFY_NAME" "Backup created"
cd $CWD
fi
else
echo "$DATE | Failed to backup - Nothing worth backing up found" >> $LOG
fi
}
### UPDATE SCRIPT
update_script() {
### 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 --icon="$ICON" --app-name="Helium Helper" "Script update failed! See log for details"
notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details"
exit
fi
@ -99,12 +184,12 @@ update_script() {
### CHECK FOR EMPTY VERSION TAGS
if [ -z "$SCRIPT_VERSION" ] ; then
echo "$DATE | Failed to update script - Empty version tag --> local" >> $LOG
notify-send --icon="$ICON" --app-name="Helium Helper" "Script update failed! See log for details"
notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details"
exit
elif [ -z "$REMOTE_SCRIPT_VERSION" ] ; then
echo "$DATE | Failed to update script - Empty version tag --> $APP_SOURCE" >> $LOG
notify-send --icon="$ICON" --app-name="Helium Helper" "Script update failed! See log for details"
notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details"
exit
fi
@ -114,22 +199,23 @@ update_script() {
REMOTE_SCRIPT_VERSION_NUM=$(echo $REMOTE_SCRIPT_VERSION | tr -d .)
if [ "$REMOTE_SCRIPT_VERSION" == "$SCRIPT_VERSION" ] ; then
notify-send --icon="$ICON" --app-name="Helium Helper" "Script is up-to-date"
notify-send --icon="$ICON" "$NOTIFY_NAME" "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
wget -P $TMP $REMOTE_REPO_URL/$PARENT_SCRIPT_FILE_NAME -q
chmod +x $TMP/$SCRIPT_FILE_NAME $TMP/$PARENT_SCRIPT_FILE_NAME
mv $TMP/$SCRIPT_FILE_NAME $TMP/$PARENT_SCRIPT_FILE_NAME $SCRIPT_PATH
echo "$DATE | Script updated to version $REMOTE_SCRIPT_VERSION" >> $LOG
notify-send --icon="$ICON" --app-name="Helium Helper" "Script updated to version $REMOTE_SCRIPT_VERSION"
notify-send --icon="$ICON" "$NOTIFY_NAME" "Script updated to version $REMOTE_SCRIPT_VERSION"
else
echo "$DATE | Failed to update - Malformed version tags" >> $LOG
echo "$DATE | Remote Version: $REMOTE_SCRIPT_VERSION" >> $LOG
echo "$DATE | Local Version: $SCRIPT_VERSION" >> $LOG
notify-send --icon="$ICON" --app-name="Helium Helper" "Script update failed! See log for details"
notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details"
fi
}
@ -143,12 +229,12 @@ update_helium() {
### CHECK FOR EMPTY VERSION TAGS
if [[ -z "$APP_SOURCE_VERSION" ]] ; then
echo "$DATE | Failed to update - Empty version tag --> $APP_SOURCE" >> $LOG
notify-send --icon="$ICON" --app-name="Helium Helper" "Browser update failed! See log for details"
notify-send --icon="$ICON" "$NOTIFY_NAME" "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 --icon="$ICON" --app-name="Helium Helper" "Browser update failed! See log for details"
notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser update failed! See log for details"
exit
fi
@ -158,32 +244,21 @@ update_helium() {
APP_SOURCE_VERSION_NUM=$(echo $APP_SOURCE_VERSION | tr -d .)
if [ "$APP_SOURCE_VERSION" == "$LOCAL_VERSION" ] ; then
notify-send --icon="$ICON" --app-name="Helium Helper" "Browser is up-to-date"
notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser is up-to-date"
elif [ "$APP_SOURCE_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then
mkdir -p $TMP $BACKUP_PATH
wget -P $TMP $DOWNLOAD_URL -q --show-progress
mkdir -p $TMP
wget -P $TMP $DOWNLOAD_URL -q
chmod +x $TMP/$APP_SOURCE_FILENAME
if [ -f "$BACKUP_PATH/$APP_NAME.old" ] ; then
rm $BACKUP_PATH/$APP_NAME.old
fi
if [ -d "$APP_CONFIG_PATH" ] ; then
if [ -f "$BACKUP_PATH/$APP_NAME.config_*.tar" ] ; then
rm $BACKUP_PATH/$APP_NAME.config_*.tar
fi
tar -cf $BACKUP_PATH/$APP_NAME.config_$(date).tar $APP_CONFIG_PATH > /dev/null 2>&1
fi
mv $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION $BACKUP_PATH/$APP_NAME.$FILE_EXTENSION.old
backup_helium
mv $TMP/$APP_SOURCE_FILENAME $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION
cp $LAUNCHER_PATH/$APP_NAME.desktop $BACKUP_PATH/$APP_NAME.desktop.old
chmod -x $BACKUP_PATH/*.sh.old $BACKUP_PATH/$APP_NAME.old
sed -i "s|X-AppImage-Version=.*|X-AppImage-Version=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}')|" $LAUNCHER_PATH/$APP_NAME.desktop
echo "$DATE | $APP_NAME updated to version ${APP_SOURCE_VERSION}" >> $LOG
notify-send --icon="$ICON" --app-name="Helium Helper" "Browser updated to version $APP_SOURCE_VERSION"
notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser updated to version $APP_SOURCE_VERSION"
else
echo "$DATE | Failed to update - Version tags malformed" >> $LOG
notify-send --icon="$ICON" --app-name="Helium Helper" "Browser update failed! See log for details"
notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser update failed! See log for details"
exit
fi
@ -202,7 +277,7 @@ show_log() {
xdg-open $LOG
else
notify-send --icon="$ICON" --app-name="Helium Helper" "No log created yet"
notify-send --icon="$ICON" "$NOTIFY_NAME" "No log created yet"
fi
}
@ -239,6 +314,13 @@ exit_clean() {
## GET OPTIONS
while getopts ":a,:s,:S,:L,:h" OPTION ; do
if [ "$(echo $1 | wc -m)" -gt "3" ] ; then
echo -e "\n${YEL}Option ${RED}$1${YEL} not valid! Use only one parameter at a time...${CRS}"
help
exit
fi
case $OPTION in
S)