init-debian/update-github-release.sh
2024-01-27 06:28:23 +08:00

117 lines
2.9 KiB
Bash
Executable File

#!/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_DOMAIN/repos/$REPO/releases/latest"
dl_url=$(curl -sSf $api_url | grep -i $build_arch | grep browser_download_url | cut -d '"' -f 4)
dl_url=$(echo $dl_url | sed -r s/$GH_DOMAIN/$DL_DOMAIN/g)
if [ -z $dl_url ]; then
usage
exit 1
fi
curr_ver=$($PROG_PATH/$PROG_NAME -v)
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 -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 <PATH> Program path";
echo " -n <NAME> Program name";
echo " -r <REPO> Github repo";
echo " -d <DIR> Dir inside package";
echo " -s <SERVICE> Service name";
echo " -a <API> API domain";
echo " -b <DOWNLOAD> Download domain";
}
PROG_PATH=
PROG_NAME=
REPO=
PKG_DIR=
SRV_NAME=
API_DOMAIN=api.github.com
GH_DOMAIN=github.com
DL_DOMAIN=github.com
while getopts ":p:n:r:d:s:a:b:" OPT; do
case $OPT in
p)
PROG_PATH=$OPTARG;
;;
n)
PROG_NAME=$OPTARG;
;;
r)
REPO=$OPTARG;
;;
d)
PKG_DIR=$OPTARG;
;;
s)
SRV_NAME=$OPTARG;
;;
a)
API_DOMAIN=$OPTARG;
;;
b)
DL_DOMAIN=$OPTARG;
;;
:)
echo "Option -$OPTARG requires an argument.";
exit 1;;
?)
echo "Invalid Option: -$OPTARG";
usage;
exit 1;;
esac;
done;
main