diff --git a/update-github-release.sh b/update-github-release.sh new file mode 100755 index 0000000..6f3fbad --- /dev/null +++ b/update-github-release.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash + +main(){ + os=''; + arch=''; + case $(uname) in + Linux) + os='linux'; + case $(uname -m) in + i386 | i686) arch='386' ;; + x86_64 | amd64) arch='amd64' ;; + armv8 | arm64 | aarch64) arch='arm64' ;; + *) echo 'unsupported CPU' && exit 1 ;; + esac; + ;; + *) + echo 'unsupported OS' && exit 1 ;; + esac; + build_arch=$os_$arch; + + if [ -z "$PROG_PATH" ] || [ -z "$PROG_NAME" ] || [ -z "$REPO" ]; then + usage + exit 1 + fi + echo "Update for $REPO" + api_url="https://api.github.com/repos/$REPO/releases/latest" + dl_url=$(curl -sSf $api_url | grep $build_arch | grep browser_download_url | cut -d '"' -f 4) + + curr_ver=$($PROG_PATH/$PROG_NAME -v) + if (echo $dl_url | grep $curr_ver) >/dev/null 2>&1; then + echo "Already latest version!" + else + tmp_dir="/tmp/$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)" + mkdir -p "$tmp_dir" + pushd "$tmp_dir" >/dev/null + ext=$(echo $dl_url | awk -F'.' '{print $NF}') + if (echo $ext | grep -i zip) >/dev/null 2>&1; then + curl -Sfo pkg.zip "$dl_url" + unzip -o pkg.zip + else + curl -Sfo pkg.tar.$ext "$dl_url" + tar -xvf pkg.tar.$ext + fi + if [ ! -z "$PKG_DIR" ]; then + cd $PKG_DIR + fi + cp -f "$PROG_NAME" "$PROG_PATH/" + + echo "Update Complete ($curr_ver -> $($PROG_PATH/$PROG_NAME -v))!" + popd >/dev/null + rm -rf "$tmp_dir" + if [ ! -z "$SRV_NAME" ]; then + systemctl restart $SRV_NAME + fi + fi +} + +usage(){ + echo "Usage: $0 [OPTIONS]"; + echo "Options:"; + echo " -p Program path"; + echo " -n Program name"; + echo " -r Github repo"; + echo " -d Dir inside package"; + echo " -s Service name"; +} + +PROG_PATH= +PROG_NAME= +REPO= +PKG_DIR= +SRV_NAME= +while getopts ":p:n:r:d:s:" OPT; do + case $OPT in + p) + PROG_PATH=$OPTARG; + ;; + n) + PROG_NAME=$OPTARG; + ;; + r) + REPO=$OPTARG; + ;; + d) + PKG_DIR=$OPTARG; + ;; + s) + SRV_NAME=$OPTARG; + ;; + :) + echo "Option -$OPTARG requires an argument."; + exit 1;; + ?) + echo "Invalid Option: -$OPTARG"; + usage; + exit 1;; + esac; +done; + +main