Browse Source
* feat(core): add new functions for github releases * minor stuff Co-authored-by: Daniel Gibbs <[email protected]>pull/3116/head
committed by
GitHub
3 changed files with 158 additions and 0 deletions
@ -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 |
|||
} |
Loading…
Reference in new issue