Skip to content

Commit

Permalink
Merge pull request #2000 from radixdlt/add-scrypto-install-shell-scripts
Browse files Browse the repository at this point in the history
Add scrypto toolchain install shell scripts
  • Loading branch information
azizi-a authored Nov 29, 2024
2 parents 72cba14 + 28b0758 commit 0f1c6cf
Show file tree
Hide file tree
Showing 4 changed files with 444 additions and 3 deletions.
10 changes: 7 additions & 3 deletions .github/actions/setup-env/action.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: 'Setup environment'
description: 'Common GH action to setup job environment'
name: "Setup environment"
description: "Common GH action to setup job environment"

runs:
using: "composite"
Expand All @@ -17,6 +17,10 @@ runs:
# different version is used.
# => [Dockerfile] Update "FROM rust:X.XX.X-slim-bookworm AS base-image" in the deterministic builder
# => [radix-clis/assets/template/rust-toolchain.toml_template] Update the rust version
# => [scrypto-install-scripts/*] Update the all version in each scripts "# Versions to install" section. Keep the current version number format:
# => [scrypto-install-scripts/install-scrypto-debian.sh] "LLVM_VERSION=XX", "RUST_VERSION=X.XX.X", "RADIX_CLI_VERSION=X.X.X"
# => [scrypto-install-scripts/install-scrypto-macos.sh] "LLVM_VERSION=XX", "RUST_VERSION=X.XX.X", "RADIX_CLI_VERSION=X.X.X"
# => [scrypto-install-scripts/install-scrypto-windows.ps1] "$llvmVersion = 'XX.X.X'", "$rustVersion = 'X.XX.X'", "$radixCliVersion = 'X.X.X'"
# => [https://docs.radixdlt.com/docs/getting-rust-scrypto] Update the recommended rust version on docs
# Additionally, Rust version should be updated in below repos on respective branches:
# - babylon-node - .github/actions/setup-env/action.yml
Expand All @@ -43,7 +47,7 @@ runs:
if: runner.os == 'Linux'
uses: RDXWorks-actions/actions-setup-cmake@master
with:
cmake-version: '3.27.9'
cmake-version: "3.27.9"
- name: Install libclang-dev
if: runner.os == 'Linux'
run: sudo apt-get -y update && sudo apt-get install clang libclang-dev -y -f
Expand Down
214 changes: 214 additions & 0 deletions scrypto-install-scripts/install-scrypto-debian.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
#!/bin/bash

# Exit on error
set -e

# Versions to install
LLVM_VERSION=18
RUST_VERSION=1.81.0
RADIX_CLI_VERSION=1.3.0

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Function to log messages with colors
log() {
local level=$1
shift
case $level in
"INFO") echo -e "${BLUE}[INFO]${NC} $*" ;;
"SUCCESS") echo -e "${GREEN}[SUCCESS]${NC} $*" ;;
"ERROR") echo -e "${RED}[ERROR]${NC} $*" ;;
"WARN") echo -e "${YELLOW}[WARN]${NC} $*" ;;
esac
}

# Function to check if command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}

# Function to check system dependencies
check_dependencies() {
log "INFO" "Checking system dependencies..."

# Check if we're on a Debian-based system
if ! command_exists apt-get; then
log "ERROR" "This script requires apt-get (Debian/Ubuntu). For other distributions, please modify the script accordingly."
exit 1
fi

# Check if sudo is available
if ! command_exists sudo; then
log "ERROR" "This script requires sudo privileges."
exit 1
fi
}

# Function to install build essentials
install_build_essentials() {
log "INFO" "Installing build essentials..."

# Update package list
sudo apt-get update

# Install build essentials
sudo apt-get install -y build-essential

if [ $? -eq 0 ]; then
log "SUCCESS" "Build essentials installed successfully"
else
log "ERROR" "Failed to install build essentials"
exit 1
fi
}

# Function to install LLVM
install_llvm() {
log "INFO" "Installing LLVM..."

# Download and install LLVM
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh $LLVM_VERSION
rm llvm.sh

if [ $? -eq 0 ]; then
log "SUCCESS" "LLVM installed successfully"
else
log "ERROR" "Failed to install LLVM"
exit 1
fi
}

# Function to install Rust
install_rust() {
log "INFO" "Installing Rust..."

# Download and install Rust with specific toolchain
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain=$RUST_VERSION -y

if [ $? -eq 0 ]; then
log "SUCCESS" "Rust installed successfully"
else
log "ERROR" "Failed to install Rust"
exit 1
fi
}

# Function to setup Cargo environment
setup_cargo() {
log "INFO" "Setting up Cargo environment..."

# Source cargo environment
source "$HOME/.cargo/env"

if command_exists cargo; then
log "SUCCESS" "Cargo environment setup successfully"
else
log "ERROR" "Failed to setup Cargo environment"
exit 1
fi
}

# Function to add WebAssembly target
add_wasm_target() {
log "INFO" "Adding WebAssembly target..."

rustup target add wasm32-unknown-unknown

if [ $? -eq 0 ]; then
log "SUCCESS" "WebAssembly target added successfully"
else
log "ERROR" "Failed to add WebAssembly target"
exit 1
fi
}

# Function to install Radix tools
install_radix_tools() {
log "INFO" "Installing Radix Engine Simulator and CLI tools..."

cargo install --force radix-clis@$RADIX_CLI_VERSION

if [ $? -eq 0 ]; then
log "SUCCESS" "Radix tools installed successfully"
else
log "ERROR" "Failed to install Radix tools"
exit 1
fi
}

# Function to add Clang to shell configuration
add_clang_to_shell_config() {
# Determine the user's shell
SHELL_NAME=$(basename "$SHELL")

# Determine the shell configuration file based on the default shell
case "$SHELL_NAME" in
bash) SHELL_CONFIG="$HOME/.bashrc" ;;
zsh) SHELL_CONFIG="$HOME/.zshrc" ;;
ksh) SHELL_CONFIG="$HOME/.kshrc" ;;
fish) SHELL_CONFIG="$HOME/.config/fish/config.fish" ;;
*)
log "ERROR" "Unsupported shell. Please add 'export CC=clang-${LLVM_VERSION}' to your shell configuration manually."
exit 1
;;
esac

# The line to add
EXPORT_LINE="export CC=clang-${LLVM_VERSION}"

# Check if the line already exists to prevent duplicates
if grep -Fxq "$EXPORT_LINE" "$SHELL_CONFIG"
then
log "INFO" "The CC variable is already set in $SHELL_CONFIG"
else
# Backup the shell configuration file
cp "$SHELL_CONFIG" "${SHELL_CONFIG}.backup"

# Append the export line to the shell configuration file
echo "$EXPORT_LINE" >> "$SHELL_CONFIG"
log "INFO" "Added '$EXPORT_LINE' to $SHELL_CONFIG"
fi
}

# Main installation process
main() {
log "INFO" "Starting installation process..."

# Check system dependencies
check_dependencies

# Install components
install_build_essentials
install_llvm
install_rust
setup_cargo
add_wasm_target
install_radix_tools
add_clang_to_shell_config

# Final success message
log "SUCCESS" "Installation completed successfully!"
source $HOME/.cargo/env

# Verify installations
log "INFO" "Verifying installations..."
echo -e "\nVersions installed:"
echo -e "LLVM: $(llvm-config-${LLVM_VERSION} --version)"
echo -e "Clang: $(clang-${LLVM_VERSION} --version | head -n 1)"
echo -e "Rust: $(rustc --version)"
echo -e "Cargo: $(cargo --version)"
echo -e "Radix CLI: $(scrypto --version)\n"

log "INFO" "Please restart your terminal or run:"
echo "source $SHELL_CONFIG"
}

# Run main function
main
78 changes: 78 additions & 0 deletions scrypto-install-scripts/install-scrypto-macos.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#!/bin/bash

# Print commands and exit on errors
set -ex

# Versions to install
LLVM_VERSION=18
RUST_VERSION=1.81.0
RADIX_CLI_VERSION=1.3.0

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo -e "${BLUE}Starting installation process...${NC}"

# Function to check if a command was successful
check_status() {
if [ $? -eq 0 ]; then
echo -e "${GREEN}$1 successful${NC}"
else
echo -e "${RED}$1 failed${NC}"
exit 1
fi
}

# Install Xcode Command Line Tools
echo -e "\n${BLUE}Installing Xcode Command Line Tools...${NC}"
xcode-select --install 2>/dev/null || true
check_status "Xcode Command Line Tools installation"

# Install cmake and LLVM
echo -e "\n${BLUE}Installing cmake and LLVM...${NC}"
brew install cmake llvm@$LLVM_VERSION
check_status "cmake and LLVM installation"

# Detect shell and configure appropriate rc file
SHELL_CONFIG=""
if [[ "$SHELL" == */bin/zsh ]]; then
SHELL_CONFIG="$HOME/.zshrc"
elif [[ "$SHELL" == */bin/bash ]]; then
SHELL_CONFIG="$HOME/.profile"
else
echo -e "${RED}Unsupported shell: $SHELL${NC}"
exit 1
fi

# Add LLVM to PATH
echo -e "\n${BLUE}Configuring LLVM in $SHELL_CONFIG...${NC}"
if ! grep -q "$(brew --prefix llvm@${LLVM_VERSION})/bin" "$SHELL_CONFIG"; then
echo 'PATH="$(brew --prefix llvm@'$LLVM_VERSION')/bin:$PATH"' >> "$SHELL_CONFIG"
fi
check_status "LLVM path configuration"

# Install Rust
echo -e "\n${BLUE}Installing Rust...${NC}"
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain=$RUST_VERSION -y
check_status "Rust installation"

# Source cargo environment
echo -e "\n${BLUE}Enabling cargo in current shell...${NC}"
source "$HOME/.cargo/env"
check_status "Cargo environment setup"

# Add WebAssembly target
echo -e "\n${BLUE}Adding WebAssembly target...${NC}"
rustup target add wasm32-unknown-unknown
check_status "WebAssembly target installation"

# Install Radix Engine Simulator and CLI tools
echo -e "\n${BLUE}Installing Radix Engine Simulator and CLI tools...${NC}"
cargo install --force radix-clis@$RADIX_CLI_VERSION
check_status "Radix tools installation"

echo -e "\n${GREEN}Installation complete! Please restart your terminal or run:${NC}"
echo -e "source $SHELL_CONFIG"
Loading

0 comments on commit 0f1c6cf

Please sign in to comment.