#!/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" sq_grocyDownLoc="/tmp/grocy_latest.zip" sq_aptOpt= sq_config=0 seq_config() { initSeqConfig -p "$seq_fileName" "$seq_configTemplate" 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 info info "$toolName installed" info -a " at: ${sc_grocyDir}" info -a " version: ${versionNow}" info -a " config: ${sc_grocyConf}" info -an " update: " if [[ ! ${versionNow} = ${versionNew} ]] ; then info -d "available: ${versionNew}" return 1 else info -d "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 "${sq_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 "${sq_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 <