2024-02-22 16:59:13 +05:30
#!/usr/bin/env bash
2026-06-09 14:25:13 +02:00
# Install Foundry binaries (forge, cast, anvil, chisel).
#
# We bypass `foundryup` and pull the release tarball straight from GitHub.
2024-02-22 16:59:13 +05:30
2026-06-09 14:25:13 +02:00
set -euo pipefail
2025-12-19 10:55:53 +02:00
2026-06-09 14:25:13 +02:00
REQUIRED_FOUNDRY_VERSION = " ${ 1 :- } "
if [ -z " $REQUIRED_FOUNDRY_VERSION " ] ; then
echo "usage: install_anvil.sh <foundry-version>" >& 2
exit 1
fi
if command -v anvil >/dev/null 2>& 1; then
2025-12-19 10:55:53 +02:00
CURRENT_FOUNDRY_VERSION = $( anvil --version 2>/dev/null | awk '{print $2}' )
if [ -n " $CURRENT_FOUNDRY_VERSION " ] ; then
lower_version = $( printf '%s\n%s\n' " $CURRENT_FOUNDRY_VERSION " " $REQUIRED_FOUNDRY_VERSION " | sort -V | head -n1)
if [ " $lower_version " != " $REQUIRED_FOUNDRY_VERSION " ] ; then
echo " Anvil is already installed with version $CURRENT_FOUNDRY_VERSION , which is older than the required $REQUIRED_FOUNDRY_VERSION . Please update Foundry manually if needed. "
fi
fi
2026-06-09 14:25:13 +02:00
exit 0
fi
2025-06-20 11:46:08 +02:00
2026-06-09 14:25:13 +02:00
case " $( uname -s) " in
Darwin) PLATFORM = darwin ; ;
Linux) PLATFORM = linux ; ;
*) echo " Unsupported platform: $( uname -s) " >& 2; exit 1 ; ;
esac
2025-12-19 10:55:53 +02:00
2026-06-09 14:25:13 +02:00
case " $( uname -m) " in
x86_64| amd64) ARCH = amd64 ; ;
arm64| aarch64) ARCH = arm64 ; ;
*) echo " Unsupported architecture: $( uname -m) " >& 2; exit 1 ; ;
esac
2025-12-19 10:55:53 +02:00
2026-06-09 14:25:13 +02:00
BASE_DIR = " ${ XDG_CONFIG_HOME :- $HOME } "
FOUNDRY_DIR = " ${ FOUNDRY_DIR :- " $BASE_DIR /.foundry " } "
FOUNDRY_BIN_DIR = " $FOUNDRY_DIR /bin "
2025-12-19 10:55:53 +02:00
2026-06-09 14:25:13 +02:00
TAG = " v ${ REQUIRED_FOUNDRY_VERSION } "
ASSET = " foundry_ ${ TAG } _ ${ PLATFORM } _ ${ ARCH } .tar.gz "
URL = " https://github.com/foundry-rs/foundry/releases/download/ ${ TAG } / ${ ASSET } "
2025-12-19 10:55:53 +02:00
2026-06-09 14:25:13 +02:00
echo " Installing Foundry ${ TAG } for ${ PLATFORM } / ${ ARCH } ... "
mkdir -p " $FOUNDRY_BIN_DIR "
tmpdir = $( mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT
archive = " $tmpdir /foundry.tar.gz "
curl -fL --retry 5 --retry-delay 2 --retry-all-errors -o " $archive " " $URL "
# Validate the archive before extracting -- catches truncated/HTML responses
# loudly instead of leaving a half-installed Foundry on disk.
tar tzf " $archive " >/dev/null
tar -xzf " $archive " -C " $FOUNDRY_BIN_DIR " forge cast anvil chisel
chmod +x " $FOUNDRY_BIN_DIR " /{ forge,cast,anvil,chisel}
export PATH = " $FOUNDRY_BIN_DIR : $PATH "
if [ -n " ${ GITHUB_PATH :- } " ] ; then
echo " $FOUNDRY_BIN_DIR " >> " $GITHUB_PATH "
fi
if ! command -v anvil >/dev/null 2>& 1; then
echo "Error: anvil installation failed" >& 2
exit 1
fi
2025-12-19 10:55:53 +02:00
2026-06-09 14:25:13 +02:00
echo " Anvil successfully installed: $( anvil --version) "