diff --git a/update-github-release.sh b/install-github-release.sh similarity index 56% rename from update-github-release.sh rename to install-github-release.sh index 2d970f2..c5a89cd 100755 --- a/update-github-release.sh +++ b/install-github-release.sh @@ -1,15 +1,27 @@ #!/usr/bin/env bash set -e +DEFAULT_URL_KEY="browser_download_url" + + main(){ - if [ -z "$PROG_PATH" ] || [ -z "$REPO" ]; then + if [ -z "$REPO" ]; then usage exit 1 fi - echo "Update for $REPO" + echo "Query for $REPO" + echo 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" + echo "API: $api_url" + echo + candidates=$(curl $SET_PROXY -sSfL $api_url | grep -P $MATCH_RELEASE) + echo "Candidates:" + echo "$candidates" + echo + dl_url=$(echo "$candidates" | grep $URL_KEY | cut -d '"' -f 4) + echo "From:" + echo "$dl_url" + echo if [ $(echo -e "$dl_url" | wc -l) -ne 1 ] || [ -z $dl_url ]; then usage @@ -20,10 +32,18 @@ main(){ else curr_ver=$($PROG_PATH/$PROG_NAME $VER_PARAM 2>/dev/null||echo VERSION_NOT_EXIST) fi + if (echo $dl_url | grep -i $curr_ver) >/dev/null 2>&1; then echo "Already latest version!" else + if [ -z $PROG_PATH ]; then + exit 0 + fi + echo "Downloading..." pkgname=$(echo $dl_url | awk -F'/' '{print $NF}') + if [ ! -z $PKG_NAME ]; then + pkgname=$PKG_NAME + fi tmp_dir="/tmp/$pkgname-$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)" mkdir -p "$tmp_dir" pushd "$tmp_dir" >/dev/null 2>&1 @@ -31,38 +51,55 @@ main(){ ext_tar=$(echo $pkgname | awk -F'.' '{print $(NF-1)}') dirname= if (echo $ext | grep -i zip) >/dev/null 2>&1; then - curl $SET_PROXY -SfLo pkg.zip "$dl_url" - unzip -o pkg.zip + curl $SET_PROXY -SfLo source_pkg.zip "$dl_url" + unzip -o source_pkg.zip dirname=$(rev <<< $pkgname | cut -d '.' -f 2- | rev) elif (echo $ext_tar | grep -i tar) >/dev/null 2>&1; then - curl $SET_PROXY -SfLo pkg.tar.$ext "$dl_url" - tar -xvf pkg.tar.$ext + curl $SET_PROXY -SfLo source_pkg.tar.$ext "$dl_url" + tar -xvf source_pkg.tar.$ext dirname=$(rev <<< $pkgname | cut -d '.' -f 3- | rev) else echo "Unknown format: $pkgname" exit 1 fi - if [ ! -z "$PKG_DIR" ]; then + if [ ! -z $PKG_DIR ]; then if [ "$PKG_DIR" = "-" ]; then - cd $(echo $dirname | sed $SED_EXP) + if [ -z $SED_EXP ]; then + cd $dirname + else + cd $(echo $dirname | sed $SED_EXP) + fi + elif [ $PKG_DIR -ge 0 ]; then + dirs=$(ls -l|awk '/^d/ {print $NF}') + arr_dirs=($dirs) + cd ${arr_dirs[$PKG_DIR]} else cd $PKG_DIR fi fi + + CWD=$(pwd) + if [ ${CWD:0:5} != "/tmp/" ]; then + echo "Wrong dir inside package!" + exit 1 + fi + echo + echo "Installing..." + echo "From: $CWD" + echo "To: $PROG_PATH/" + cp -fr * "$PROG_PATH/" if [ -z $PROG_NAME ]; then - cp -fr * "$PROG_PATH/" - echo "Update Complete!" + echo "Install Complete!" else - cp -fr "$PROG_NAME" "$PROG_PATH/" chmod +x "$PROG_PATH/$PROG_NAME" if [ -z $VER_PARAM ]; then - echo "Update Complete!" + echo "Install Complete!" else - echo "Update Complete ($curr_ver -> $($PROG_PATH/$PROG_NAME $VER_PARAM 2>/dev/null||echo VERSION_NOT_EXIST))!" + echo "Install Complete ($curr_ver -> $($PROG_PATH/$PROG_NAME $VER_PARAM 2>/dev/null||echo VERSION_NOT_EXIST))!" fi fi - popd >/dev/null + rm -rf "$tmp_dir" if [ ! -z "$SRV_NAME" ]; then systemctl restart $SRV_NAME @@ -70,43 +107,54 @@ main(){ fi } + usage(){ echo "Usage: $0 [OPTIONS]"; echo "Options:"; + echo " -r Github repo (required)"; + echo " -m Match release with regexp (required)"; + echo " -k URL key for Github API (default: $DEFAULT_URL_KEY)"; echo " -p Program path"; echo " -n Program name"; - echo " -r Github repo"; - echo " -m Match release with regexp"; - echo " -d Dir inside package (set '-' as packge name)"; + echo " -o Package name"; + echo " -d Dir inside package (set number as index; set '-' as packge name)"; echo " -e Expression for sed (only for '-d -')"; echo " -v Version param"; echo " -s Service name"; echo " -x Proxy [protocol://]host[:port]"; } -PROG_PATH= -PROG_NAME= REPO= MATCH_RELEASE= +URL_KEY=$DEFAULT_URL_KEY +PROG_PATH= +PROG_NAME= +PKG_NAME= PKG_DIR= SED_EXP= VER_PARAM= SRV_NAME= SET_PROXY= -while getopts ":p:n:r:m:d:e:v:s:x:" OPT; do +while getopts ":r:m:k:p:n:o:d:e:v:s:x:" OPT; do case $OPT in - p) - PROG_PATH=$OPTARG; - ;; - n) - PROG_NAME=$OPTARG; - ;; r) REPO=$OPTARG; ;; m) MATCH_RELEASE=$OPTARG; ;; + k) + URL_KEY=$OPTARG; + ;; + p) + PROG_PATH=$(realpath -e $OPTARG); + ;; + n) + PROG_NAME=$OPTARG; + ;; + o) + PKG_NAME=$OPTARG; + ;; d) PKG_DIR=$OPTARG; ;;