Skip to content

Instantly share code, notes, and snippets.

@nolddor
Last active December 16, 2023 20:20
Show Gist options
  • Save nolddor/e7a4d649de6458c1799dfb6126298059 to your computer and use it in GitHub Desktop.
Save nolddor/e7a4d649de6458c1799dfb6126298059 to your computer and use it in GitHub Desktop.
#!/usr/bin/env sh
set -eu
# Logger
export VERBOSITY=3
GET_DATE() {
case "$(uname -s)" in
"Darwin") date -u ;;
*) date -u --rfc-3339=seconds ;;
esac
}
DEBUG() {
if [ "$VERBOSITY" -gt 3 ]; then
COLOR_DARK_GRAY "$(GET_DATE) [$(basename "$0")] DEBUG: $*"
fi
}
INFO() {
if [ "$VERBOSITY" -gt 2 ]; then
COLOR_WHITE "$(GET_DATE) [$(basename "$0")] INFO: $*"
fi
}
WARN() {
if [ "$VERBOSITY" -gt 1 ]; then
COLOR_YELLOW "$(GET_DATE) [$(basename "$0")] WARN: $*"
fi
}
ERROR() {
if [ "$VERBOSITY" -gt 0 ]; then
COLOR_RED "$(GET_DATE) [$(basename "$0")] ERROR: $*"
fi
}
FATAL() {
COLOR_RED "$(GET_DATE) [$(basename "$0")] FATAL: $*"
exit 1
}
COLOR_DARK_GRAY() {
printf "\033[1;30m%s\033[0m\n" "$*"
}
COLOR_RED() {
printf "\033[1;31m%s\033[0m\n" "$*"
}
COLOR_GREEN() {
printf "\033[1;32m%s\033[0m\n" "$*"
}
COLOR_YELLOW() {
printf "\033[1;33m%s\033[0m\n" "$*"
}
COLOR_WHITE() {
printf "\033[1;37m%s\033[0m\n" "$*"
}
# Pre-Flights
for i in "dpkg" "grep" "sed" "tr" "curl" "xargs" "wget" "apt" "rm" "id" "uname" "date" "basename"
do
if ! type "$i" > /dev/null 2>&1; then
FATAL "Missing requirement. Binary '$i' is not present."
fi
done
IS_ROOT() { [ "${EUID:-$(id -u)}" -eq 0 ]; }
if ! IS_ROOT; then
FATAL "Insufficient permissions. Use 'sudo $(basename "$0")' instead."
fi
# Main
PKG_NAME="discord"
DOWNLOAD_URL="https://discordapp.com/api/download?platform=linux&format=deb"
INFO "Checking local version..."
LOCAL_PKG=$(dpkg -s "$PKG_NAME" | grep '^Version:' | sed -r "s/Version: (.*)/$PKG_NAME-\1\.deb/" | tr -d '\r')
INFO "Success! $LOCAL_PKG found."
INFO "Checking remote version..."
REMOTE_PKG=$(curl -sIL $DOWNLOAD_URL | grep '^location:' | sed 's/location: //' | xargs basename | tr -d '\r')
INFO "Success! $REMOTE_PKG found."
if [ "$LOCAL_PKG" = "$REMOTE_PKG" ]; then
INFO "Package is up-to-date."
else
INFO "Downloading ${REMOTE_PKG}, please wait..."
wget -qO "/tmp/${REMOTE_PKG}" "$DOWNLOAD_URL"
INFO "Installing ${REMOTE_PKG}, please wait..."
apt install "/tmp/${REMOTE_PKG}"
rm -f "/tmp/${REMOTE_PKG}"
INFO "Done!"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment