109 lines
2.7 KiB
Bash
Executable File
109 lines
2.7 KiB
Bash
Executable File
#!/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 -v)
|
|
else
|
|
curr_ver="SHOUDNOTEXIST"
|
|
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/"
|
|
echo "Update Complete ($curr_ver -> $($PROG_PATH/$PROG_NAME -v))!"
|
|
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 <PATH> Program path";
|
|
echo " -n <NAME> Program name";
|
|
echo " -r <REPO> Github repo";
|
|
echo " -m <MATCH> Match release with regexp";
|
|
echo " -d <DIR> Dir inside package";
|
|
echo " -s <SERVICE> Service name";
|
|
echo " -x <PROXY> Proxy [protocol://]host[:port]";
|
|
}
|
|
|
|
PROG_PATH=
|
|
PROG_NAME=
|
|
REPO=
|
|
MATCH_RELEASE=
|
|
PKG_DIR=
|
|
SRV_NAME=
|
|
SET_PROXY=
|
|
while getopts ":p:n:r:m:d: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;
|
|
;;
|
|
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
|