diff --git a/github/check.nextcloud.update b/github/check.nextcloud.update new file mode 100755 index 0000000..76008aa --- /dev/null +++ b/github/check.nextcloud.update @@ -0,0 +1,97 @@ +#!/bin/sh +# Purpose {{{ +## Create a temp file (to monitor) if an upgrade is available for Nextcloud +## project on Github. +## It based on the nextcloud's root directory to get the current version and +## supposed to be install from source (github) or at least get a VERSION file. +## How-to use {{{ +### 1. Needs releasetags script, in the same directory +### cf. https://git.ipr.univ-rennes1.fr/cellinfo/scripts/src/master/github/releasetags +# wget https://git.ipr.univ-rennes1.fr/cellinfo/scripts/raw/master/github/releasetags +### 2. Create a cron job with Nextcloud directory as first argument, eg. +#00 20 * * * root /opt/repos/ipr.scripts/github/check.nextcloud.update /var/www/nextcloud +### 3. Monitor the temp file : /tmp/.github.nextcloud.upgrade +# Or enable MAILTO in cronjob and edit the script to print a message. +# Or send a mail. +# … +## }}} +# }}} + +# Expect 1 argument {{{ +if [ $# -ne 1 ] +then + cat << HELP + +check.nextcloud.update -- +Compare current version of an installed Nextcloud and the last available. + +EXAMPLE : + - Compare the current version installed in /var/www/nextcloud.domain.tld + check.nextcloud.update /var/www/nextcloud.domain.tld + +HELP + + exit 1 +fi + +# }}} + +# Vars {{{ +DEBUG=1 + +script_wd=$(dirname "${0}") + +nc_install_dir="${1}" +nc_current_version=$(grep -- OC_VersionString "${nc_install_dir}"/version.php | sed "s/^\$OC.* = '\(.*\)';$/\1/" || exit 1) +nc_current_major=$(grep -- OC_VersionString "${nc_install_dir}"/version.php | sed "s/^\$OC.* = '\(.*\)';$/\1/" | cut -d"." -f1 || exit 2) + +nc_repo_url="https://github.com/nextcloud/server" +nc_new_version_list="/tmp/.github.nextcloud.taglist" +#nc_new_version=$("${script_wd}"/releasetags "${nc_repo_url}" | grep -v -E -- "(^v|alpha|beta|RC)" | head -n3) + +nc_new_version_file="/tmp/.github.nextcloud.upgrade" +# }}} + +# Get the 3 last tags releses for Nextcloud +## Exclude tag starting with "v", and those contains alpha, beta or RC +rm -f -- "${nc_new_version_list}" ; touch -- "${nc_new_version_list}" +"${script_wd}"/releasetags "${nc_repo_url}" | grep -v -E -- "(^v|alpha|beta|RC)" | head -n3 >> "${nc_new_version_list}" + +# For all tags contained in the tag list +while IFS= read -r nc_new_version; do + + # Check if the current version is the last one {{{ + if [ "${nc_current_version}" != "${nc_new_version}" ]; then + [ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : Test version — Current version (${nc_current_version}) and latest available (${nc_new_version}) seems to be different." + + nc_new_major=$(echo "${nc_new_version}" | cut -d"." -f1) + + ## If it's a minor release for stable or a new stable version {{{ + if [ "${nc_current_major}" -le "${nc_new_major}" ]; then + [ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : Test release major — A minor or major upgrade needs to be apply." + ### Create a temp file to monitor + touch -- "${nc_new_version_file}" + printf '\e[1;35m%-6s\e[m\n' "An upgrade is available for Nextcloud (current : ${nc_current_version}) : ${nc_new_version}." >> "${nc_new_version_file}" + printf '\e[1;35m%-6s\e[m\n' "Please also take a look to the CHANGELOG : https://nextcloud.com/changelog/#latest${nc_new_major}" >> "${nc_new_version_file}" + + ### Exit to ensure to keep the file in place + exit 0 + ## }}} + ## It's an upgrade for a previous major release {{{ + else + [ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : Test release major — It looks like an upgrade for a previous major release." + + fi + ## }}} + # }}} + # Same version {{{ + else + [ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG : Test version — The current version is up-to-date." + rm -f -- "${nc_new_version_file}" + fi + # }}} + +done < "${nc_new_version_list}" +rm -f -- "${nc_new_version_list}" + +exit 0