This commit is contained in:
hl 2024-11-05 04:02:09 +08:00
parent 93fb5449b7
commit feddbf42a2
2 changed files with 40 additions and 31 deletions

View File

@ -152,7 +152,7 @@ Architectures: $OS_ARCH
else
git -C /usr/share clone --depth 1 https://git.tink.ltd:8443/tink/zsh-autocomplete.git 2>/dev/null || \
git -C /usr/share/zsh-autocomplete pull
$SCRIPTPATH/install-github-release.sh -r ajeetdsouza/zoxide -m x86_64-unknown -p /usr/local/bin -n zoxide -f
$SCRIPTPATH/install-release.sh -r ajeetdsouza/zoxide -m x86_64-unknown -p /usr/local/bin -n zoxide -f
fi
}

View File

@ -6,21 +6,25 @@ DEFAULT_MATCH_STAGE_1="browser_download_url"
main(){
if [ -z $REPO ]; then
if [ -z "$REPO" ] && [ -z "$DD_URL" ]; then
usage
exit 1
fi
echo "Query for $REPO"
echo
api_url="https://api.github.com/repos/$REPO/releases/$TAG"
echo "API: $api_url"
echo
candidates=$(curl $SET_PROXY -sSfL $api_url | grep -P "$MATCH_STAGE_1")
echo "Candidates:"
echo "$candidates"
echo
dl_url=$(echo "$candidates" | grep -P "$MATCH_STAGE_2" | cut -d '"' -f 4)
if [ $(echo -e "$dl_url" | wc -l) -ne 1 ] || [ -z $dl_url ]; then
if [ -z "$DD_URL" ]; then
echo "Query for $REPO"
echo
api_url="https://api.github.com/repos/$REPO/releases/$TAG"
echo "API: $api_url"
echo
candidates=$(curl $SET_PROXY -sSfL $api_url | grep -P "$MATCH_STAGE_1")
echo "Candidates:"
echo "$candidates"
echo
dl_url=$(echo "$candidates" | grep -P "$MATCH_STAGE_2" | cut -d '"' -f 4)
else
dl_url="$DD_URL"
fi
if [ $(echo -e "$dl_url" | wc -l) -ne 1 ] || [ -z "$dl_url" ]; then
exit 0
fi
echo "From:"
@ -28,38 +32,38 @@ main(){
echo
if [ -z $PROG_PATH ]; then
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
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
ext=$(echo $pkgname | awk -F'.' '{print $NF}')
ext_tar=$(echo $pkgname | awk -F'.' '{print $(NF-1)}')
ext=$(echo "$pkgname" | awk -F'.' '{print $NF}')
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 source_pkg.zip "$dl_url"
unzip -o source_pkg.zip
dirname=$(rev <<< $pkgname | cut -d '.' -f 2- | rev)
dirname=$(rev <<< "$pkgname" | cut -d '.' -f 2- | rev)
elif (echo $ext | grep -i tar) || (echo $ext | grep -i tgz) >/dev/null 2>&1; then
curl $SET_PROXY -SfLo source_pkg.$ext "$dl_url"
tar -xvf source_pkg.$ext
dirname=$(rev <<< $pkgname | cut -d '.' -f 2- | rev)
dirname=$(rev <<< "$pkgname" | cut -d '.' -f 2- | rev)
elif (echo $ext_tar | grep -i tar) >/dev/null 2>&1; then
curl $SET_PROXY -SfLo source_pkg.tar.$ext "$dl_url"
tar -xvf source_pkg.tar.$ext
dirname=$(rev <<< $pkgname | cut -d '.' -f 3- | rev)
dirname=$(rev <<< "$pkgname" | cut -d '.' -f 3- | rev)
else
echo "Unknown format: $pkgname"
exit 1
fi
rm source_pkg.*
if [ ! -z $PKG_DIR ]; then
if [ ! -z "$PKG_DIR" ]; then
if [ "$PKG_DIR" = "-" ]; then
if [ -z $SED_EXP ]; then
cd "$dirname"
@ -80,20 +84,20 @@ main(){
echo "Wrong dir inside package!"
exit 1
fi
PROG_PATH=$(realpath $PROG_PATH);
PROG_PATH=$(realpath "$PROG_PATH");
echo
echo "Installing..."
echo "From: $CWD"
echo "To: $PROG_PATH/"
if [ ! -d $PROG_PATH ]; then
if [ -e $PROG_PATH ]; then
if [ ! -d "$PROG_PATH" ]; then
if [ -e "$PROG_PATH" ]; then
echo "Program path is not directory!"
exit 1
else
mkdir -p $PROG_PATH
mkdir -p "$PROG_PATH"
fi
fi
if [ -z $PROG_NAME ]; then
if [ -z "$PROG_NAME" ]; then
cp -fr * "$PROG_PATH/"
else
if [ $FILE_COPY -eq 1 ]; then
@ -107,7 +111,7 @@ main(){
popd >/dev/null
rm -rf "$tmp_dir"
if [ ! -z $CMD_RELOAD ]; then
if [ ! -z "$CMD_RELOAD" ]; then
$CMD_RELOAD
fi
}
@ -116,10 +120,11 @@ main(){
usage(){
echo "Usage: $0 [OPTIONS]";
echo "Options:";
echo " -r <REPO> Github repo (required)";
echo " -r <REPO> Github repo";
echo " -t <TAG> Release tag (default: $DEFAULT_RELEASE)";
echo " -k <KEY> Match stage 1 with regexp (default: $DEFAULT_MATCH_STAGE_1)";
echo " -m <MATCH> Match stage 2 with regexp";
echo " -u <URL> Direct download url (bypass query repo)";
echo " -p <PATH> Program path";
echo " -n <NAME> Program name";
echo " -f Copy program name file only (when -n is set)";
@ -134,6 +139,7 @@ REPO=
TAG=$DEFAULT_RELEASE
MATCH_STAGE_1=$DEFAULT_MATCH_STAGE_1
MATCH_STAGE_2=
DD_URL=
PROG_PATH=
PROG_NAME=
FILE_COPY=0
@ -142,7 +148,7 @@ PKG_DIR=
SED_EXP=
CMD_RELOAD=
SET_PROXY=
while getopts ":r:t:k:m:p:n:fo:d:e:c:x:" OPT; do
while getopts ":r:t:k:m:u:p:n:fo:d:e:c:x:" OPT; do
case $OPT in
r)
REPO=$OPTARG;
@ -156,6 +162,9 @@ while getopts ":r:t:k:m:p:n:fo:d:e:c:x:" OPT; do
m)
MATCH_STAGE_2=$OPTARG;
;;
u)
DD_URL=$OPTARG;
;;
p)
PROG_PATH=$OPTARG;
;;