From 505dd9ea9684380289944a297540e2c134b193bf Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Tue, 4 Apr 2023 18:07:14 +0200 Subject: [PATCH] Add `install` script Downloads binaries and installs them, based on your operating system. Can be used in a one liner, for example: sh <(curl https://radicle.xyz/install) --- scripts/install | 120 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100755 scripts/install diff --git a/scripts/install b/scripts/install new file mode 100755 index 00000000..01cb10f7 --- /dev/null +++ b/scripts/install @@ -0,0 +1,120 @@ +#!/bin/sh +# +# Radicle isntallation script. +# +set -e + +url() { + echo "https://files.radicle.xyz/$1/latest/radicle-$1.tar.gz" +} + +info() { + printf "\033[36m$*\033[0m\n" +} + +success() { + echo + printf "\033[32m✓\033[0m Radicle has been installed successfully. Run \`rad auth\` to get started.\n" +} + +fatal() { + printf "\033[31merror\033[0m: $*\n" >&2 + exit 1 +} + +target() { + TARGET="" + + case "$(uname)/$(uname -m)" in + Darwin/arm64) + TARGET="aarch64-apple-darwin" ;; + Darwin/x86_64) + TARGET="x86_64-apple-darwin" ;; + Linux/arm64|Linux/aarch64) + TARGET="aarch64-unknown-linux-musl" ;; + Linux/x86_64) + TARGET="x86_64-unknown-linux-musl" ;; + *) + fatal "Your operating system is currently unsupported. Sorry!" ;; + esac + echo $TARGET +} + +tempdir() { + if [ -n "$TMPDIR" ]; then + echo "$TMPDIR" + elif [ -d "/tmp" ]; then + echo "/tmp" + else + fatal "Could not locate temporary directory" + fi +} + +in_path() { + IFS=":" + + for dir in $PATH; do + if [ "$dir" = "$1" ]; then + return 0 # The path is in $PATH + fi + done + + return 1 # The path is not in $PATH +} + +echo +echo "Welcome to Radicle 🌞" +echo + +RAD_HOME=${RAD_HOME:-"$HOME/.radicle"} +RAD_PATH=${RAD_PATH:-"$RAD_HOME/bin"} +SHELL=${SHELL:-"/bin/sh"} + +info "Detecting operating system..." +TARGET=$(target) + +if ! command -v tar >/dev/null 2>&1; then + fatal "Please install 'tar' and try again" +fi + +if ! command -v curl >/dev/null 2>&1; then + fatal "Please install 'curl' and try again" +fi + +info "Installing radicle into '$RAD_PATH'..." +mkdir -p "$RAD_PATH" +curl -# -L "$(url "$TARGET")" | tar -xz --strip-components=1 -C "$RAD_PATH" +chmod +x \ + $RAD_PATH/radicle-node \ + $RAD_PATH/radicle-httpd \ + $RAD_PATH/rad \ + $RAD_PATH/git-remote-rad + +# If radicle is not in $PATH, add it here. +if ! in_path $RAD_PATH; then + case $SHELL in + */zsh) + PROFILE=$HOME/.zshrc ;; + */bash) + PROFILE=$HOME/.bashrc ;; + */fish) + PROFILE=$HOME/.config/fish/config.fish ;; + */csh) + PROFILE=$HOME/.cshrc ;; + *) + PROFILE=$HOME/.profile ;; + esac + + info "Configuring PATH in '$PROFILE'..." + echo >> "$PROFILE" + echo "# Radicle binaries." >> "$PROFILE" + echo "export PATH=\"\$PATH:$RAD_PATH\"" >> "$PROFILE" + + success + + # Ensure that the current shell has the updated PATH. + export PATH="$PATH:$RAD_PATH" + exec "$SHELL" +fi + +success