core_github.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #!/bin/bash
  2. # LinuxGSM core_github.sh module
  3. # Author: Daniel Gibbs
  4. # Contributors: https://linuxgsm.com/contrib
  5. # Website: https://linuxgsm.com
  6. # Description: core module file for updates via github
  7. moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
  8. github_api="https://api.github.com"
  9. fn_githublocalversionfile() {
  10. local githubreleaseuser="${1}"
  11. local githubreleaserepo="${2}"
  12. githublocalversionfile="${datadir}/github-${githubreleaseuser}-${githubreleaserepo}-version"
  13. }
  14. # $1 githubuser/group
  15. # $2 github repo name
  16. fn_github_get_latest_release_version() {
  17. local githubreleaseuser="${1}"
  18. local githubreleaserepo="${2}"
  19. local githublatestreleaseurl="${github_api}/repos/${githubreleaseuser}/${githubreleaserepo}/releases/latest"
  20. githubreleaseversion=$(curl -s --connect-timeout 3 "${githublatestreleaseurl}" | jq '.tag_name')
  21. # error if no version is there
  22. if [ -z "${githubreleaseversion}" ]; then
  23. fn_print_fail_nl "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
  24. fn_script_log_fail "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
  25. fi
  26. }
  27. # $1 githubuser/group
  28. # $2 github repo name
  29. fn_github_set_latest_release_version() {
  30. local githubreleaseuser="${1}"
  31. local githubreleaserepo="${2}"
  32. fn_githublocalversionfile "${githubreleaseuser}" "${githubreleaserepo}"
  33. local githublatestreleaseurl="${github_api}/repos/${githubreleaseuser}/${githubreleaserepo}/releases/latest"
  34. githubreleaseversion=$(curl -s "${githublatestreleaseurl}" | jq -r '.tag_name')
  35. # error if no version is there
  36. if [ -z "${githubreleaseversion}" ]; then
  37. fn_print_fail_nl "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
  38. fn_script_log_fail "Cannot get version from GitHub API for ${githubreleaseuser}/${githubreleaserepo}"
  39. else
  40. echo "${githubreleaseversion}" > "${githublocalversionfile}"
  41. fi
  42. }
  43. # $1 githubuser/group
  44. # $2 github repo name
  45. fn_github_get_installed_version() {
  46. local githubreleaseuser="${1}"
  47. local githubreleaserepo="${2}"
  48. fn_githublocalversionfile "${githubreleaseuser}" "${githubreleaserepo}"
  49. githublocalversion=$(cat "${githublocalversionfile}")
  50. }
  51. # $1 githubuser/group
  52. # $2 github repo name
  53. # if a update needs to be downloaded - updateneeded is set to 1
  54. fn_github_compare_version() {
  55. local githubreleaseuser="${1}"
  56. local githubreleaserepo="${2}"
  57. exitcode=0
  58. updateneeded=0
  59. fn_githublocalversionfile "${githubreleaseuser}" "${githubreleaserepo}"
  60. local githublatestreleaseurl="${github_api}/repos/${githubreleaseuser}/${githubreleaserepo}/releases/latest"
  61. githublocalversion=$(cat "${githublocalversionfile}")
  62. githubreleaseversion=$(curl -s "${githublatestreleaseurl}" | jq '.tag_name')
  63. # error if no version is there
  64. if [ -z "${githubreleaseversion}" ]; then
  65. fn_print_fail_nl "Can not get version from Github Api for ${githubreleaseuser}/${githubreleaserepo}"
  66. fn_script_log_fail "Can not get version from Github Api for ${githubreleaseuser}/${githubreleaserepo}"
  67. else
  68. if [ "${githublocalversion}" == "${githubreleaseversion}" ]; then
  69. echo -en "\n"
  70. echo -e "No update from github.com/${githubreleaseuser}/${githubreleaserepo}/ available:"
  71. echo -e "* Local build: ${red}${githublocalversion}${default}"
  72. echo -e "* Remote build: ${green}${githubreleaseversion}${default}"
  73. echo -en "\n"
  74. else
  75. # check if version that is installed is higher than the remote version to not override it
  76. last_version=$(echo -e "${githublocalversion}\n${githubreleaseversion}" | sort -V | head -n1)
  77. if [ "${githubreleaseversion}" == "${last_version}" ]; then
  78. echo -en "\n"
  79. echo -e "Update from github.com/${githubreleaseuser}/${githubreleaserepo}/ available:"
  80. echo -e "* Local build: ${red}${githublocalversion}${default}"
  81. echo -e "* Remote build: ${green}${githubreleaseversion}${default}"
  82. echo -en "\n"
  83. updateneeded=1
  84. else
  85. # local version is higher than the remote version output this to the user
  86. # strange case but could be possible, as a release could be removed from github
  87. echo -en "\n"
  88. echo -e "Local version is newer than the remote version"
  89. echo -e "* Local version: ${green}${githublocalversion}${default}"
  90. echo -e "* Remote version: ${green}${githubreleaseversion}${default}"
  91. echo -en "\n"
  92. exitcode=1
  93. fi
  94. fi
  95. fi
  96. }