From 370604f8eb1c7836cc26cf06b3c0a2cebd2fb611 Mon Sep 17 00:00:00 2001 From: Li Jie Date: Thu, 13 Feb 2025 13:34:45 +0800 Subject: [PATCH] add install.sh for local and remote installation --- install.sh | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100755 install.sh diff --git a/install.sh b/install.sh new file mode 100755 index 00000000..0e174860 --- /dev/null +++ b/install.sh @@ -0,0 +1,85 @@ +#!/bin/bash + +set -e + +# Change to script directory +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +cd "$SCRIPT_DIR" + +# Function to check if running locally with proper module +check_local_install() { + if [ -f "go.mod" ]; then + FIRST_LINE=$(head -n 1 go.mod) + if [ "$FIRST_LINE" = "module github.com/goplus/llgo" ]; then + return 0 + fi + fi + return 1 +} + +# Function to get latest release version +get_latest_version() { + curl --silent "https://api.github.com/repos/goplus/llgo/releases/latest" | + grep '"tag_name":' | + sed -E 's/.*"([^"]+)".*/\1/' +} + +# Function to get system information +get_system_info() { + ARCH=$(uname -m) + OS=$(uname -s | tr '[:upper:]' '[:lower:]') + + case $ARCH in + x86_64) ARCH="amd64" ;; + aarch64) ARCH="arm64" ;; + esac + + echo "${OS}-${ARCH}" +} + +# Function to install from local source +install_local() { + echo "Installing llgo from local source..." + cd compiler + go install ./cmd/llgo + echo "Local installation complete." + echo "llgo is now available in your GOPATH." +} + +# Function to install from remote release +install_remote() { + VERSION=$(get_latest_version) + VERSION_NO_V=${VERSION#v} # Remove the 'v' prefix + SYSTEM=$(get_system_info) + INSTALL_DIR="$HOME/.llgo" + DOWNLOAD_URL="https://github.com/goplus/llgo/releases/download/${VERSION}/llgo${VERSION_NO_V}.${SYSTEM}" + + echo "Installing llgo ${VERSION} for ${SYSTEM}..." + + # Create installation directory + mkdir -p "$INSTALL_DIR" + + # Download and extract + curl -L "$DOWNLOAD_URL.tar.gz" | tar xz -C "$INSTALL_DIR" + + # Handle old package structures + if [ -f "$INSTALL_DIR/llgo" ]; then + mkdir -p "$INSTALL_DIR/bin" + mv "$INSTALL_DIR/llgo" "$INSTALL_DIR/bin/" + fi + + echo "Installation complete!" + echo + echo "Please add the following line to your shell configuration file (.bashrc, .zshrc, etc.):" + echo "export PATH=\$PATH:$INSTALL_DIR/bin" + echo + echo "Then restart your shell or run:" + echo "source ~/.bashrc # or source ~/.zshrc" +} + +# Main installation logic +if check_local_install; then + install_local +else + install_remote +fi