#!/usr/bin/env bash set -e main(){ if [ -z "$PROG_PATH" ] || [ -z "$REPO" ]; then usage exit 1 fi echo "Update for $REPO" api_url="https://api.github.com/repos/$REPO/releases/latest" dl_url=$(curl $SET_PROXY -sSfL $api_url | grep -P $MATCH_RELEASE | grep browser_download_url | cut -d '"' -f 4) echo "From: $dl_url" if [ -z $dl_url ]; then usage exit 1 fi if [ ! -z $PROG_NAME ]; then curr_ver=$($PROG_PATH/$PROG_NAME $VER_PARAM||echo VERSION_NOT_EXIST) else curr_ver="VERSION_NOT_EXIST" fi if (echo $dl_url | grep -i $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 $SET_PROXY -SfLo pkg.zip "$dl_url" unzip -o pkg.zip else curl $SET_PROXY -SfLo pkg.tar.$ext "$dl_url" tar -xvf pkg.tar.$ext fi if [ ! -z "$PKG_DIR" ]; then cd $PKG_DIR fi if [ ! -z $PROG_NAME ]; then cp -fr "$PROG_NAME" "$PROG_PATH/" chmod +x "$PROG_PATH/$PROG_NAME" echo "Update Complete ($curr_ver -> $($PROG_PATH/$PROG_NAME $VER_PARAM||echo VERSION_NOT_EXIST))!" else cp -fr * "$PROG_PATH/" echo "Update Complete!" fi 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 " -m Match release with regexp"; echo " -d Dir inside package"; echo " -v Version param"; echo " -s Service name"; echo " -x Proxy [protocol://]host[:port]"; } PROG_PATH= PROG_NAME= REPO= MATCH_RELEASE= PKG_DIR= VER_PARAM= SRV_NAME= SET_PROXY= while getopts ":p:n:r:m:d:v:s:x:" OPT; do case $OPT in p) PROG_PATH=$OPTARG; ;; n) PROG_NAME=$OPTARG; ;; r) REPO=$OPTARG; ;; m) MATCH_RELEASE=$OPTARG; ;; d) PKG_DIR=$OPTARG; ;; v) VER_PARAM=$OPTARG; ;; s) SRV_NAME=$OPTARG; ;; x) SET_PROXY="-x $OPTARG"; ;; :) echo "Option -$OPTARG requires an argument."; exit 1;; ?) echo "Invalid Option: -$OPTARG"; usage; exit 1;; esac; done; main