xpipe/get-xpipe.sh
crschnick 3e7fbe89ac Merge branch prefs into master
The changes have been squashed as the commit history and messages were not very carefully crafted. There isn't that much value in preserving random commit messages.

Also due to diverging branches, rebasing or merging it was difficult.
2024-02-28 07:36:31 +00:00

251 lines
5.2 KiB
Bash

#!/usr/bin/env bash
release_url() {
local repo="$1"
local version="$2"
if [[ -z "$version" ]] ; then
echo "$repo/releases/latest/download"
else
echo "$repo/releases/download/$version"
fi
}
get_file_ending() {
local uname_str="$(uname -s)"
case "$uname_str" in
Linux)
if [ -f "/etc/debian_version" ]; then
echo "deb"
else
echo "rpm"
fi
;;
Darwin)
echo "pkg"
;;
*)
exit 1
;;
esac
}
download_release_from_repo() {
local os_info="$1"
local tmpdir="$2"
local repo="$3"
local version="$4"
local arch="$5"
local ending=$(get_file_ending)
local release_url=$(release_url "$repo" "$version")
local filename="xpipe-installer-$os_info-$arch.$ending"
local download_file="$tmpdir/$filename"
local archive_url="$release_url/$filename"
info "Downloading file $archive_url"
curl --progress-bar --show-error --location --fail "$archive_url" --output "$download_file" --write-out "$download_file"
}
info() {
local action="$1"
local details="$2"
command printf '\033[1;32m%12s\033[0m %s\n' "$action" "$details" 1>&2
}
error() {
command printf '\033[1;31mError\033[0m: %s\n\n' "$1" 1>&2
}
warning() {
command printf '\033[1;33mWarning\033[0m: %s\n\n' "$1" 1>&2
}
request() {
command printf '\033[1m%s\033[0m\n' "$1" 1>&2
}
eprintf() {
command printf '%s\n' "$1" 1>&2
}
bold() {
command printf '\033[1m%s\033[0m' "$1"
}
# returns the os name to be used in the packaged release
parse_os_name() {
local uname_str="$1"
local arch="$(uname -m)"
case "$uname_str" in
Linux)
echo "linux"
;;
FreeBSD)
echo "linux"
;;
Darwin)
echo "macos"
;;
*)
return 1
;;
esac
return 0
}
install() {
local uname_str="$(uname -s)"
local file="$1"
case "$uname_str" in
Linux)
if [ -f "/etc/debian_version" ]; then
info "Installing file $file with apt"
sudo apt update
DEBIAN_FRONTEND=noninteractive sudo apt install "$file"
elif [ -x "$(command -v zypper)" ]; then
info "Installing file $file with zypper"
sudo zypper refresh
sudo zypper install --allow-unsigned-rpm "$file"
elif [ -x "$(command -v dnf)" ]; then
info "Installing file $file with dnf"
sudo dnf install --refresh "$file"
elif [ -x "$(command -v yum)" ]; then
info "Installing file $file with yum"
sudo yum clean expire-cache
sudo yum install "$file"
else
info "Installing file $file with rpm"
sudo rpm -U -v --force "$file"
fi
;;
Darwin)
sudo installer -verboseR -allowUntrusted -pkg "$file" -target /
;;
*)
exit 1
;;
esac
}
launch() {
"$kebap_product_name" open
}
download_release() {
local uname_str="$(uname -s)"
local os_info
os_info="$(parse_os_name "$uname_str")"
if [ "$?" != 0 ]; then
error "The current operating system ($uname_str) does not appear to be supported."
return 1
fi
# store the downloaded archive in a temporary directory
local download_dir="$(mktemp -d)"
local repo="$1"
local version="$2"
download_release_from_repo "$os_info" "$download_dir" "$repo" "$version" "$arch"
}
check_architecture() {
local arch="$(uname -m)"
case "$arch" in
x86_64)
echo x86_64
;;
amd64)
echo x86_64
;;
arm64)
echo arm64
;;
aarch64)
echo arm64
;;
*)
exit 1
;;
esac
}
# return if sourced (for testing the functions above)
return 0 2>/dev/null
arch=$(check_architecture)
exit_status="$?"
if [ "$exit_status" != 0 ]; then
error "Sorry! $product_name currently does not support your processor architecture."
exit "$exit_status"
fi
repo="https://github.com/xpipe-io/xpipe"
aur="https://aur.archlinux.org/xpipe.git"
product_name="XPipe"
kebap_product_name="xpipe"
version=
while getopts 'sv:' OPTION; do
case "$OPTION" in
s)
repo="https://github.com/xpipe-io/xpipe-ptb"
aur="https://aur.archlinux.org/xpipe-ptb.git"
product_name="XPipe PTB"
kebap_product_name="xpipe-ptb"
;;
v)
version="$OPTARG"
;;
?)
echo "Usage: $(basename $0) [-s] [-v <version>]"
exit 1
;;
esac
done
if ! [ -x "$(command -v apt)" ] && ! [ -x "$(command -v rpm)" ] && [ -x "$(command -v pacman)" ]; then
info "Installing from AUR at $aur"
rm -rf "/tmp/xpipe_aur" || true
if [[ -z "$version" ]] ; then
git clone "$aur" /tmp/xpipe_aur
else
git clone --branch "$version" "$aur" /tmp/xpipe_aur
fi
cd "/tmp/xpipe_aur"
makepkg -si
launch
exit 0
fi
if ! [ -x "$(command -v apt)" ] && ! [ -x "$(command -v rpm)" ] && ! [ -x "$(command -v pacman)" ]; then
info "Installation is not supported on this system (no apt, rpm, pacman). Can you try a portable version of $product_name?"
info "https://github.com/xpipe-io/xpipe#portable"
exit 1
fi
download_archive="$(
download_release "$repo" "$version" "$arch"
exit "$?"
)"
exit_status="$?"
if [ "$exit_status" != 0 ]; then
error "Could not download $product_name release."
exit "$exit_status"
fi
install "$download_archive"
exit_status="$?"
if [ "$exit_status" != 0 ]; then
error "Installation failed."
exit "$exit_status"
fi
echo ""
echo "$product_name was successfully installed. You should be able to find $product_name in your desktop environment now."
launch