7d3d60fb29
- Add libclang-dev for Ubuntu/Debian - Add clang-devel for Fedora - Add llvm-libs for Arch - opensuse already has clang-devel from previous commit - Fix EVM workflow: use 'main' branch ref instead of short SHA - Update VPS list with 3 new runners
187 lines
6.8 KiB
Bash
Executable File
187 lines
6.8 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
|
|
set -e
|
|
|
|
prompt() {
|
|
while true; do
|
|
printf "$1 [y/N]\n"
|
|
read yn
|
|
case $yn in
|
|
[Yy]* ) return 0;; # Yes, return 0 (true)
|
|
[Nn]* ) return 1;; # No, return 1 (false)
|
|
"" ) return 1;; # Default to no if user just presses Enter
|
|
* ) printf "Please answer yes or no.\n";;
|
|
esac
|
|
done
|
|
}
|
|
|
|
prompt_default_yes() {
|
|
while true; do
|
|
printf "$1 [Y/n]\n"
|
|
read yn
|
|
case $yn in
|
|
[Yy]* ) return 0;; # Yes, return 0 (true)
|
|
[Nn]* ) return 1;; # No, return 1 (false)
|
|
"" ) return 0;; # Default to yes if user just presses Enter
|
|
* ) printf "Please answer yes or no.\n";;
|
|
esac
|
|
done
|
|
}
|
|
|
|
clone_and_enter_template() {
|
|
template="$1" # minimal, solochain, or teyrchain
|
|
if [ -d "${template}-template" ]; then
|
|
printf "\n✅︎ ${template}-template directory already exists. -> Entering.\n"
|
|
else
|
|
# PEZKUWI_TEMPLATE_SOURCE can be set to a local path for CI testing
|
|
# e.g., PEZKUWI_TEMPLATE_SOURCE="/path/to/pezkuwi-sdk/templates"
|
|
if [ -n "$PEZKUWI_TEMPLATE_SOURCE" ] && [ -d "$PEZKUWI_TEMPLATE_SOURCE/${template}" ]; then
|
|
printf "\n↓ Copying ${template} template from local source.\n"
|
|
cp -r "$PEZKUWI_TEMPLATE_SOURCE/${template}" "${template}-template"
|
|
else
|
|
printf "\n↓ Let's grab the ${template} template from github.\n"
|
|
git clone --quiet https://github.com/pezkuwichain/pezkuwi-sdk-${template}-template.git ${template}-template
|
|
fi
|
|
fi
|
|
cd ${template}-template
|
|
}
|
|
|
|
cat <<EOF
|
|
|
|
Welcome to the
|
|
|
|
____ _ _ ____ ____ _ __
|
|
| _ \ ___ ____| | ___ ___ _(_) / ___|| _ \| |/ /
|
|
| |_) / _ \_ /| |/ / | | \ \ / / | \___ \| | | | ' /
|
|
| __/ __// /_| <| |_| |\ V /| | ___) | |_| | . \
|
|
|_| \___/____|_|\_\\__,_| \_/ |_| |____/|____/|_|\_\
|
|
quickstart!
|
|
|
|
⚡ We will help setting up the environment for you to experiment with.
|
|
EOF
|
|
|
|
# Determine OS
|
|
os_name=$(uname -s)
|
|
if [ "$os_name" = "Darwin" ]; then
|
|
printf "🍎 Detected macOS. Installing dependencies via Homebrew.\n"
|
|
|
|
# Check if brew is installed
|
|
if command -v brew >/dev/null 2>&1; then
|
|
printf "\n✅︎🍺 Homebrew already installed.\n"
|
|
else
|
|
if prompt_default_yes "\n🍺 Homebrew is not installed. Install it?\n"; then
|
|
printf "🍺 Installing Homebrew.\n"
|
|
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
|
|
else
|
|
printf "❌ Cannot continue without homebrew. Aborting.\n"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
brew update
|
|
if command -v git >/dev/null 2>&1; then
|
|
printf "\n✅︎🍺 git already installed.\n"
|
|
else
|
|
if prompt_default_yes "\n🍺 git seems to be missing but we will need it; install git?\n"; then
|
|
brew install git
|
|
else
|
|
printf "❌ Cannot continue without git. Aborting.\n"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if prompt "\n🍺 Install cmake, openssl and protobuf?"; then
|
|
brew install cmake openssl protobuf
|
|
else
|
|
printf "🍺 Assuming cmake, openssl and protobuf are present.\n"
|
|
fi
|
|
elif [ "$os_name" = "Linux" ]; then
|
|
# find the distro name in the release files
|
|
distro=$( cat /etc/*-release | tr '[:upper:]' '[:lower:]' | grep -Poi '(debian|ubuntu|arch|fedora|opensuse)' | uniq | head -n 1 )
|
|
|
|
if [ "$distro" = "ubuntu" ]; then
|
|
printf "\n🐧 Detected Ubuntu. Using apt to install dependencies.\n"
|
|
sudo apt -qq update
|
|
sudo apt -qq install --assume-yes git clang libclang-dev curl libssl-dev protobuf-compiler make
|
|
elif [ "$distro" = "debian" ]; then
|
|
printf "\n🐧 Detected Debian. Using apt to install dependencies.\n"
|
|
sudo apt -qq update
|
|
sudo apt -qq install --assume-yes git clang libclang-dev curl libssl-dev llvm libudev-dev make protobuf-compiler
|
|
elif [ "$distro" = "arch" ]; then
|
|
printf "\n🐧 Detected Arch Linux. Using pacman to install dependencies.\n"
|
|
pacman -Syu --needed --noconfirm curl git clang llvm-libs make protobuf
|
|
elif [ "$distro" = "fedora" ]; then
|
|
printf "\n🐧 Detected Fedora. Using dnf to install dependencies.\n"
|
|
sudo dnf update --assumeyes
|
|
sudo dnf install --assumeyes clang clang-devel curl git openssl-devel make protobuf-compiler perl
|
|
elif [ "$distro" = "opensuse" ]; then
|
|
printf "\n🐧 Detected openSUSE. Using zypper to install dependencies.\n"
|
|
sudo zypper install --no-confirm clang clang-devel gcc gcc-c++ curl git openssl-devel llvm-devel libudev-devel make awk protobuf-devel
|
|
else
|
|
if prompt "\n🐧 Unknown Linux distribution. Unable to install dependencies. Continue anyway?\n"; then
|
|
printf "\n🐧 Proceeding with unknown linux distribution...\n"
|
|
else
|
|
exit 1
|
|
fi
|
|
fi
|
|
else
|
|
printf "❌ Unknown operating system. Aborting.\n"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if rust is installed
|
|
[ -f "$HOME/.cargo/env" ] && . "$HOME/.cargo/env"
|
|
if command -v rustc >/dev/null 2>&1; then
|
|
printf "\n✅︎🦀 Rust already installed.\n"
|
|
else
|
|
if prompt_default_yes "\n🦀 Rust is not installed. Install it?"; then
|
|
printf "🦀 Installing via rustup.\n"
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
|
. "$HOME/.cargo/env"
|
|
else
|
|
printf "Aborting.\n"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Ensure that we have wasm support
|
|
if prompt_default_yes "\n🦀 Setup the Rust environment (e.g. WASM support)?"; then
|
|
printf "🦀 Setting up Rust environment.\n"
|
|
rustup default stable
|
|
rustup update
|
|
rustup target add wasm32-unknown-unknown
|
|
rustup component add rust-src
|
|
fi
|
|
|
|
if ! prompt "\nWould you like to start with one of the templates?"; then
|
|
printf "⚡ All done, the environment is ready for hacking.\n"
|
|
exit 0
|
|
fi
|
|
|
|
while true; do
|
|
printf "\nWhich template would you like to start with?\n"
|
|
printf "1) minimal template\n"
|
|
printf "2) teyrchain template\n"
|
|
printf "3) solochain template\n"
|
|
printf "q) cancel\n"
|
|
read -p "#? " template
|
|
case $template in
|
|
[1]* ) clone_and_enter_template minimal; break;;
|
|
[2]* ) clone_and_enter_template teyrchain; break;;
|
|
[3]* ) clone_and_enter_template solochain; break;;
|
|
[qQ]* ) printf "Canceling, not using a template.\n"; exit 0;;
|
|
* ) printf "Selection not recognized.\n";;
|
|
esac
|
|
done
|
|
|
|
if ! prompt_default_yes "\n⚙️ Let's compile the node? It might take a while."; then
|
|
printf "⚡ Script finished, you can continue in the ${template}-template directory.\n"
|
|
exit 0
|
|
fi
|
|
|
|
cargo build --release
|
|
|
|
if prompt_default_yes "\n🚀 Everything ready to go, let's run the node?\n"; then
|
|
cargo run --release -- --dev
|
|
fi
|