|
|
@@ -0,0 +1,113 @@
|
|
|
+#!/bin/bash
|
|
|
+# LinuxGSM core_github.sh function
|
|
|
+# Author: Christian Birk
|
|
|
+# Website: https://linuxgsm.com
|
|
|
+# Description: core function file for updates via github
|
|
|
+
|
|
|
+functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
|
|
|
+
|
|
|
+github_api="https://api.github.com"
|
|
|
+
|
|
|
+fn_githublocalversionfile(){
|
|
|
+ local githubreleaseuser="${1}"
|
|
|
+ local githubreleaserepo="${2}"
|
|
|
+
|
|
|
+ githublocalversionfile="${datadir}/github-${githubreleaseuser}-${githubreleaserepo}-version"
|
|
|
+}
|
|
|
+
|
|
|
+# $1 githubuser/group
|
|
|
+# $2 github repo name
|
|
|
+fn_github_get_latest_release_version(){
|
|
|
+ local githubreleaseuser="${1}"
|
|
|
+ local githubreleaserepo="${2}"
|
|
|
+ local githublatestreleaseurl="${github_api}/repos/${githubreleaseuser}/${githubreleaserepo}/releases/latest"
|
|
|
+
|
|
|
+ githubreleaseversion=$(curl -s --connect-timeout 10 "${githublatestreleaseurl}" | jq '.tag_name' )
|
|
|
+
|
|
|
+ # error if no version is there
|
|
|
+ if [ -z "${githubreleaseversion}" ]; then
|
|
|
+ fn_print_fail_nl "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
|
|
|
+ fn_script_log_fatal "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+# $1 githubuser/group
|
|
|
+# $2 github repo name
|
|
|
+fn_github_set_latest_release_version(){
|
|
|
+ local githubreleaseuser="${1}"
|
|
|
+ local githubreleaserepo="${2}"
|
|
|
+
|
|
|
+ fn_githublocalversionfile "${githubreleaseuser}" "${githubreleaserepo}"
|
|
|
+
|
|
|
+ local githublatestreleaseurl="${github_api}/repos/${githubreleaseuser}/${githubreleaserepo}/releases/latest"
|
|
|
+ githubreleaseversion=$(curl -s "${githublatestreleaseurl}" | jq -r '.tag_name' )
|
|
|
+
|
|
|
+ # error if no version is there
|
|
|
+ if [ -z "${githubreleaseversion}" ]; then
|
|
|
+ fn_print_fail_nl "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
|
|
|
+ fn_script_log_fatal "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
|
|
|
+ else
|
|
|
+ echo "${githubreleaseversion}" > "${githublocalversionfile}"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+# $1 githubuser/group
|
|
|
+# $2 github repo name
|
|
|
+fn_github_get_installed_version(){
|
|
|
+ local githubreleaseuser="${1}"
|
|
|
+ local githubreleaserepo="${2}"
|
|
|
+
|
|
|
+ fn_githublocalversionfile "${githubreleaseuser}" "${githubreleaserepo}"
|
|
|
+
|
|
|
+ githublocalversion=$(cat "${githublocalversionfile}")
|
|
|
+}
|
|
|
+
|
|
|
+# $1 githubuser/group
|
|
|
+# $2 github repo name
|
|
|
+# if a update needs to be downloaded - updateneeded is set to 1
|
|
|
+fn_github_compare_version(){
|
|
|
+ local githubreleaseuser="${1}"
|
|
|
+ local githubreleaserepo="${2}"
|
|
|
+ exitcode=0
|
|
|
+ updateneeded=0
|
|
|
+
|
|
|
+ fn_githublocalversionfile "${githubreleaseuser}" "${githubreleaserepo}"
|
|
|
+ local githublatestreleaseurl="${github_api}/repos/${githubreleaseuser}/${githubreleaserepo}/releases/latest"
|
|
|
+
|
|
|
+ githublocalversion=$(cat "${githublocalversionfile}")
|
|
|
+ githubreleaseversion=$(curl -s "${githublatestreleaseurl}" | jq '.tag_name' )
|
|
|
+
|
|
|
+ # error if no version is there
|
|
|
+ if [ -z "${githubreleaseversion}" ]; then
|
|
|
+ fn_print_fail_nl "Can not get version from Github Api for ${githubreleaseuser}/${githubreleaserepo}"
|
|
|
+ fn_script_log_fatal "Can not get version from Github Api for ${githubreleaseuser}/${githubreleaserepo}"
|
|
|
+ else
|
|
|
+ if [ "${githublocalversion}" == "${githubreleaseversion}" ]; then
|
|
|
+ echo -en "\n"
|
|
|
+ echo -e "No update from github.com/${githubreleaseuser}/${githubreleaserepo}/ available:"
|
|
|
+ echo -e "* Local build: ${red}${githublocalversion}${default}"
|
|
|
+ echo -e "* Remote build: ${green}${githubreleaseversion}${default}"
|
|
|
+ echo -en "\n"
|
|
|
+ else
|
|
|
+ # check if version that is installed is higher than the remote version to not override it
|
|
|
+ last_version=$(echo -e "${githublocalversion}\n${githubreleaseversion}" | sort -V | head -n1 )
|
|
|
+ if [ "${githubreleaseversion}" == "${last_version}" ]; then
|
|
|
+ echo -en "\n"
|
|
|
+ echo -e "Update from github.com/${githubreleaseuser}/${githubreleaserepo}/ available:"
|
|
|
+ echo -e "* Local build: ${red}${githublocalversion}${default}"
|
|
|
+ echo -e "* Remote build: ${green}${githubreleaseversion}${default}"
|
|
|
+ echo -en "\n"
|
|
|
+ updateneeded=1
|
|
|
+ else
|
|
|
+ # local version is higher than the remote version output this to the user
|
|
|
+ # strange case but could be possible, as a release could be removed from github
|
|
|
+ echo -en "\n"
|
|
|
+ echo -e "Local version is newer than the remote version"
|
|
|
+ echo -e "* Local version: ${green}${githublocalversion}${default}"
|
|
|
+ echo -e "* Remote version: ${green}${githubreleaseversion}${default}"
|
|
|
+ echo -en "\n"
|
|
|
+ exitcode=1
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+}
|