From 051c364d95cdab2b4e809339a9b81ece7441e3b8 Mon Sep 17 00:00:00 2001 From: Gardouille Date: Fri, 2 Jul 2021 15:28:37 +0200 Subject: [PATCH] Add script to verify Jellyfin version and updates --- github/check.jellyfin.update | 203 +++++++++++++++++++++++++++++++++++ github/releasetags | 24 +++++ 2 files changed, 227 insertions(+) create mode 100755 github/check.jellyfin.update create mode 100755 github/releasetags diff --git a/github/check.jellyfin.update b/github/check.jellyfin.update new file mode 100755 index 0000000..76d1463 --- /dev/null +++ b/github/check.jellyfin.update @@ -0,0 +1,203 @@ +#!/bin/sh +# Purpose {{{ +## Create a temp file (to monitor) if an upgrade is available for Jellyfin +## project on Github. +## It's based on the Jellyfin URL site to get the current version. +## How-to use {{{ +### 1. Needs releasetags script, in the same directory +### cf. https://git.101010.fr/gardouille-dotfiles/scripts/github/releasetags +# wget https://git.101010.fr/gardouille-dotfiles/scripts/raw/branch/master/github/releasetags +### 2. Create a cron job with Jellyfin URL as first argument, eg. +#00 20 * * * root /opt/repos/ipr.scripts/github/check_jellyfin_update https://jellyfin.domain.tld:port/web/index.html +### 3. Monitor the temp file : /tmp/.github.jellyfin.upgrade +# Or enable MAILTO in cronjob and edit the script to print a message. +# Or send a mail. +# … +## }}} +# }}} + +# Vars {{{ +readonly PROGNAME=$(basename "${0}") +readonly NBARGS="${#}" +## Test if DEBUG is already defined (by parent script,…) +[ -z "${DEBUG}" ] && DEBUG=0 + +## Colors +readonly PURPLE='\033[1;35m' +readonly RED='\033[0;31m' +readonly RESET='\033[0m' +readonly COLOR_DEBUG="${PURPLE}" + +script_wd=$(dirname "${0}") +jellyfin_repo_url="https://github.com/jellyfin/jellyfin" +# }}} + +usage() { # {{{ + + cat <<- EOF +usage: $PROGNAME [-d|-f|-h|-u|] +Compare current version of an installed Jellyfin site and the last available. + +EXAMPLE : + - Compare the current version installed on http://jellyfin.domain.tld:port/web/index.html + check.jellyfin.update http://jellyfin.domain.tld:port/web/index.html + +OPTIONS : + -f,--file + Set the path to the temp file that will be create and + that should be monitored (default: /tmp/.github.jellyfin.upgrade). + + -u,--url + Specify the URL of the Jellyfin instance to check. + + -d,--debug + Enable debug messages. + + -h,--help + Print this help message. + +EOF + +} +# }}} +debug_message() { # {{{ + + local_debug_message="${1}" + + ## Print message if DEBUG is enable (=0) + [ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6b\e[m\n' "DEBUG − ${PROGNAME} : ${local_debug_message}" + + return 0 +} +# }}} +error_message() { # {{{ + + local_error_message="${1}" + local_error_code="${2}" + + ## Print message if DEBUG is enable (=0) + [ "${DEBUG}" -eq "0" ] && printf '%b\n' "ERROR − ${PROGNAME} : ${RED}${local_error_message}${RESET}" + + exit "${local_error_code:=66}" +} +# }}} +define_vars() { # {{{ + + ## If reprepro_dir wasn't defined (argument,...) {{{ + if [ -z "${jellyfin_url}" ]; then + ### Display help message and exit + usage + error_message "Please set the Jellyfin's URL with -u|--url option." + fi + ## }}} + + ## If jellyfin_new_version_file wasn't defined (argument,...) {{{ + if [ -z "${jellyfin_new_version_file}" ]; then + ### Store it in /tmp directory + jellyfin_new_version_file="/tmp/.github.jellyfin.upgrade" + fi + ## }}} + + jellyfin_current_version=$(curl --silent "${jellyfin_url:=/dev/null}" | \grep -oP "(?<=Version=')[[:alnum:].]*") + + jellyfin_new_version=$("${script_wd}"/releasetags "${jellyfin_repo_url}" | grep -vE -- '(dev|rc)' | head -n1 | sed 's/v//') + +} +# }}} + +main() { # {{{ + + ## Define all vars according the selected options + define_vars + + ## Check if the current version is the last one {{{ + if [ "${jellyfin_current_version}" != "${jellyfin_new_version}" ]; then + debug_message "Test Jellyfin version − \ +Current version (${jellyfin_current_version}) and new one (${jellyfin_new_version}) seems to be different." + + ## Create a temp file to monitor + debug_message "Test Jellyfin version − \ +Create ${jellyfin_new_version_file} temp file to monitore." + touch -- "${jellyfin_new_version_file}" + printf '\e[1;35m%-6s\e[m\n' "An upgrade is available for Jellyfin (current : ${jellyfin_current_version}) : ${jellyfin_new_version}." >> "${jellyfin_new_version_file}" + + else + debug_message "Test Jellyfin version − \ +The current version is up-to-date." + rm -f -- "${jellyfin_new_version_file}" + fi + ## }}} + +} +# }}} + +# Manage arguments # {{{ +# This code can't be in a function due to arguments + +if [ ! "${NBARGS}" -eq "0" ]; then + + ## If the first argument is not an option + if ! printf -- '%s' "${1}" | grep -q -E -- "^-+"; + then + usage + error_message "Unknown argument (${1}), check the help." 2 + fi + + manage_arg="0" + + # Parse all options (start with a "-") one by one + while printf -- '%s' "${1}" | grep -q -E -- "^-+"; do + + case "${1}" in + -u|--url ) ## Set URL + ## Move to the next argument + shift + ## Define jellyfin_url + jellyfin_url="${1}" + ;; + -d|--debug ) ## debug + DEBUG=0 + ;; + -h|--help ) ## help + usage + ## Exit after help informations + exit 0 + ;; + -f|--file ) ## Set temp file + ## Move to the next argument + shift + ## Define jellyfin_new_version_file + jellyfin_new_version_file="${1}" + ;; + -- ) ## End of options list + ## End the while loop + break + ;; + * ) ## unknow option + printf '%b\n' "${RED}Invalid option: ${1}${RESET}" + printf '%b\n' "---" + usage + exit 1 + ;; + esac + + debug_message "Arguments management − \ +${RED}${1}${COLOR_DEBUG} option managed." + + ## Move to the next argument + shift + manage_arg=$((manage_arg+1)) + + done + + debug_message "Arguments management − \ +${RED}${manage_arg}${COLOR_DEBUG} argument(s) successfully managed." +else + error_message "Please at least give an URL with -u|--url option. See --help for more informations." +fi + +# }}} + +main + +exit 0 diff --git a/github/releasetags b/github/releasetags new file mode 100755 index 0000000..e80827b --- /dev/null +++ b/github/releasetags @@ -0,0 +1,24 @@ +#!/bin/sh + +if [ $# -ne 1 ] +then + cat << HELP + +releasetags -- list all tags for a Github project. + +EXAMPLE : + - List all tags for FusionInventory-agent : + releasetags https://github.com/fusioninventory/fusioninventory-agent + +HELP + + exit 1 + +fi + +project="$1" +tags=$(wget -q "${project}/tags.atom" -O - | awk -v pattern="${project}/releases/tag/" -F "/" '$0~pattern { print $9 }' | sed 's/\(.*\)"/\1/') + +echo "${tags}" + +exit 0