#!/usr/bin/env bash shopt -s extglob readonly toolName=grocy readonly downUrl="https://releases.grocy.info/latest" readonly versionUrl="https://api.github.com/repos/grocy/grocy/releases/latest" versionNew= versionNow= sc_grocyConf= sc_grocyBackup="data/backup" sc_grocyViewcache="data/viewcache" grocyDownLoc="/tmp/grocy_latest.zip" # Get script working directory # (when called from a different directory and even when called via symlink) readonly sq_dir="$(cd "$(dirname -- "$(realpath ${BASH_SOURCE[0]})")" >>/dev/null 2>&1 && pwd)" readonly sq_scriptFile=$(basename -- $0) readonly sq_scriptName=${sq_scriptFile%%.*} readonly sq_configFileName="${sq_scriptName}.cfg" readonly sq_configFileTemplate="$sq_dir/${sq_configFileName}.example" sq_aptOpt= sq_config=0 seq_config() { initSeqConfig -p "$sq_scriptName" "$sq_configFileTemplate" if [ $? -eq 0 ] ; then sq_config=1 else # End if no configuration file exists dry || return -1 fi # config not sourced if only profiles should be listed sc_grocyConf="${sc_grocyDir:-}/data/config.php" ## Apt cmdline option to suppress user interaction quiet && sq_aptOpt="-y" ## Return of non zero value will abort the sequence return 0 } getVersions() { versionNew=${versionNew:-$(curl --silent "$versionUrl" | grep -Po '"tag_name": "v\K.*?(?=")')} versionNow=${versionNow:-$(grep -Po '"Version": "\K.*?(?=")' 2>/dev/null < "${sc_grocyDir}/version.json")} } step_1_info() { echo "Check $toolName status" echoinfo "Returns 1 if update is available" } step_1_alias() { echo "status"; } step_1() { getVersions if [ -e "${sc_grocyDir}" ] ; then echo echo "$toolName installed" echo " at: ${sc_grocyDir}" echo " version: ${versionNow}" echo " config: ${sc_grocyConf}" echo -n " update: " if [[ ! ${versionNow} = ${versionNew} ]] ; then echo "available: ${versionNew}}" return 1 else echo "already on latest" return 0 fi else echo "$toolName not installed" echo "Version ${versionNew} available for installation" return 1 fi } step_20_info() { echo "Backup ${toolName}"; } step_20_alias() { echo "backup"; } step_20() { local lBu="${sc_grocyDir}/${sc_grocyBackup}/${toolName}_$(date +%Y%m%d-%H%M%S).tgz" exe cd ${sc_grocyDir}/.. exe tar \ --exclude="${sc_grocyBackup}/*" \ --exclude="${sc_grocyViewcache}/*" \ -czf "${lBu}" \ "$(basename "${sc_grocyDir}")" } step_22_info() { echo "Install/upgrade ${toolName}"; } step_22_alias() { echo "install"; } step_22() { getVersions if [[ ${versionNow} == ${versionNew} ]] ; then endReturn -o 1 "Latest version ${versionNow} already installed" else if [ -n "${versionNow}" ] ; then info "Upgrading $toolName from ${versionNow} to ${versionNew}" else info "Installing $toolName version ${versionNew}" fi fi exe wget ${downUrl} -q -O "${grocyDownLoc}" endReturn -o $? "Download failed" if [ -e "${sc_grocyDir}" ] ; then step backup exe rm -rf "${sc_grocyDir}/${sc_grocyViewcache}" fi exe rm -rf "${sc_grocyDir}/"!(data) exe unzip -o -qq "${grocyDownLoc}" -d "${sc_grocyDir}" exe chown -R www-data: "${sc_grocyDir}/public" "${sc_grocyDir}/data" # Populate first config if [ ! -e "${sc_grocyConf}" ] ; then exe cp "${sc_grocyDir}/config-dist.php" "${sc_grocyConf}" info "Please adjust the config: ${sc_grocyConf}" else info "Please check ${sc_grocyDir}/config-dist.php" info " for new configuration options" fi } step_30_alias() { echo "notes"; } step_30() { color green cat <