polyrec 0.0.1

polyrec: a polynomial reconstruction library, blazing fast ⚡ and written in Rust 🦀
Documentation
#!/bin/sh

NAME="polyrec"
INSTALLER="${NAME}up"

PROJECT_ROOT="$HOME/.$NAME"
PROJECT_BIN="$PROJECT_ROOT/bin"
PROJECT_TMP="$PROJECT_ROOT/tmp"
INSTALLER_PATH="$PROJECT_BIN/$INSTALLER"

PROJECT_REPO="abdelhamidbakhta/polyrec-rs/main"
INSTALLER_URL="https://raw.githubusercontent.com/$PROJECT_REPO/$INSTALLER"

# Store the correct profile file
add_to_shell() {
    mkdir -p $PROJECT_BIN
    mkdir -p $PROJECT_TMP
    curl -sL $INSTALLER_URL -o $INSTALLER_PATH
    chmod +x "$INSTALLER_PATH"

    case $SHELL in
    */zsh)
        PROFILE=$HOME/.zshrc
        PREF_SHELL=zsh
        ;;
    */bash)
        PROFILE=$HOME/.bashrc
        PREF_SHELL=bash
        ;;
    */fish)
        PROFILE=$HOME/.config/fish/config.fish
        PREF_SHELL=fish
        ;;
    *)
        echo "$INSTALLER: could not detect shell, manually add ${PROJECT_ROOT} to your PATH."
        exit 1
    esac

    IN_PROFILE=$(grep $NAME $PROFILE)
    if [ $? -ne 0 ]; then
        echo "export PATH=\"\$PATH:$PROJECT_BIN\"" >> $PROFILE
    fi
}

# Install latest polyrec Release
# pull releaes tarball by platform and architecture
# (ref: https://github.com/a16z/helios/blob/master/heliosup/heliosup)
install_polyrec() {
    PLATFORM="$(uname -s)"
    case $PLATFORM in
    Linux)
        PLATFORM="linux"
        ;;
    Darwin)
        PLATFORM="darwin"
        ;;
    *)
        err "unsupported platform: $PLATFORM"
        ;;
    esac

    ARCHITECTURE="$(uname -m)"
    if [ "${ARCHITECTURE}" = "x86_64" ]; then
        if [ "$(sysctl -n sysctl.proc_translated 2>/dev/null)" = "1" ]; then
            ARCHITECTURE="arm64" # Rosetta.
        else
            ARCHITECTURE="amd64" # Intel.
        fi
    elif [ "${ARCHITECTURE}" = "arm64" ] ||[ "${ARCHITECTURE}" = "aarch64" ] ; then
        ARCHITECTURE="arm64" # Arm.
    else
        ARCHITECTURE="amd64" # Amd.
    fi

    echo "Pulling $NAME release..."
    TARBALL_URL="https://github.com/$PROJECT_REPO/releases/download/${LATEST_VER}/${NAME}_${PLATFORM}_${ARCHITECTURE}.tar.gz"
    
    find $PROJECT_BIN ! -name "$INSTALLER" -type f -exec rm {} +

    echo "Unpacking polyrec release...\n"
    curl -L $TARBALL_URL | tar -xzC $PROJECT_BIN

    echo "$NAME installed at version: ${LATEST_VER}\n"
}

# Clone polyrec Repo
# install based on latest commit
install_polyrec_manually() {
    if ! command -v cargo > /dev/null
    then
        echo "please install rustlang: https://www.rust-lang.org/tools/install"
        exit 1
    fi

    if ! command -v rustup > /dev/null
    then
        echo "please install rustup: https://rustup.rs"
        exit 1
    fi

    if ! command -v git > /dev/null
    then
        echo "please install git"
        exit 1
    fi

    DEFAULT=$(rustup default | grep nightly)
    if [ $? -ne 0 ]; then
        echo "please set the following:"
        echo "\trustup toolchain install nightly"
        echo "\trustup default nightly\n"
        exit 1
    fi

    WRK_DIR=$(pwd)
    echo "Pulling $NAME repo..."
    
    git clone --quiet https://github.com/keep-starknet-strange/polyrec.git $PROJECT_TMP/polyrec
    cd $PROJECT_TMP/polyrec
    
    echo "Building $NAME...\n"
    cargo build -q --all --release 

    find $PROJECT_BIN ! -name "$INSTALLER" -type f -exec rm {} +

    mv ./target/release/polyrec $PROJECT_BIN

    polyrec_VER=$(polyrec --version | awk '{print $2}')

    cd $WRK_DIR
    rm -rf $PROJECT_TMP/polyrec

    echo "$NAME installed at version: ${polyrec_VER}\n"
}

# Create polyrec root if doesn't exist
if [ ! -d "$PROJECT_ROOT" ]; then
    echo "Installing $NAME root..."
    add_to_shell
fi

# check latest version
LATEST_VER=$(curl -sL https://api.github.com/repos/$PROJECT_REPO/releases/latest | grep -o '"tag_name": "[^"]*' | grep -o '[^"]*$')

# TODO:
# remove ([ $? -ne 0 ]) after first release

# Build latest dev version if directed
if [ "$1" = "dev" ] || [ $? -ne 0 ]; then
    install_polyrec_manually
else
    # Pull latest release if there is a new version
    CURRENT_VER=$(polyrec --version | awk '{print $2}')
    if [ "$LATEST_TAG" = "v$CURRENT_VER" ]; then
        echo "$NAME is currently running the latest version: $LATEST_VER"
    else
        echo "$NAME being updated to $LATEST_VER"
        install_polyrec
    fi
fi

echo "$NAME root installed at: $PROJECT_ROOT"
if [ ! -z "$PROFILE" ]; then echo "\trun 'source $PROFILE' to activate path"; fi

# TODO: add if configuration through env variables is needed
#echo "\nSet config:"
exit 0