Browse Source

feat(core): add new functions for github releases

pull/3164/head
H3o66 5 years ago
parent
commit
3fb4b12422
  1. 40
      lgsm/functions/core_dl.sh
  2. 5
      lgsm/functions/core_functions.sh
  3. 113
      lgsm/functions/core_github.sh

40
lgsm/functions/core_dl.sh

@ -447,6 +447,46 @@ fn_update_function(){
}
# Function to download latest github release
# $1 github user / organisation
# $2 repo name
# $3 destination for download
# $4 search string in releases (needed if there are more files that can be downloaded from the release pages)
fn_dl_latest_release_github(){
local githubreleaseuser="${1}"
local githubreleaserepo="${2}"
local githubreleasedownloadpath="${3}"
local githubreleasesearch="${4}"
local githublatestreleaseurl="https://api.github.com/repos/${githubreleaseuser}/${githubreleaserepo}/releases/latest"
# get last github release
# if no search for the release filename is set, just get the first file from the latest release
if [ -z "${githubreleasesearch}" ]; then
githubreleaseassets=$(curl -s "${githublatestreleaseurl}" | jq '[ .assets[] ]' )
else
githubreleaseassets=$(curl -s "${githublatestreleaseurl}" | jq "[ .assets[]|select(.browser_download_url | contains(\"${githubreleasesearch}\")) ]" )
fi
# check how many releases we got from the api and exit if we have more then one
if [ "$(echo -e "${githubreleaseassets}" | jq '. | length' )" -gt 1 ]; then
fn_print_fatal_nl "Found more than one release to download - Please report this to the github issue tracker"
fn_script_log_fatal "Found more than one release to download - Please report this to the github issue tracker"
else
# set variables for download via fn_fetch_file
githubreleasefilename=$( echo -e "${githubreleaseassets}" | jq -r '.[]name' )
githubreleasedownloadlink=$( echo -e "${githubreleaseassets}" | jq -r '.[]browser_download_url' )
# error if no version is there
if [ -z "${githubreleasefilename}" ]; 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
# fetch file from the remote location from the existing function to the ${tmpdir} for now
fn_fetch_file "${githubreleasedownloadlink}" "" "${githubreleasefilename}" "" "${githubreleasedownloadpath}" "${githubreleasefilename}"
fi
fi
}
# Check that curl is installed
if [ ! "$(command -v curl 2>/dev/null)" ]; then
echo -e "[ FAIL ] Curl is not installed"

5
lgsm/functions/core_functions.sh

@ -58,6 +58,11 @@ functionfile="${FUNCNAME[0]}"
fn_fetch_function
}
core_github.sh(){
functionfile="${FUNCNAME[0]}"
fn_fetch_function
}
# Commands
command_backup.sh(){

113
lgsm/functions/core_github.sh

@ -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…
Cancel
Save