Last active
May 23, 2025 07:35
-
-
Save ilyar/ec7f560d4632cb09a319d60f75a518a2 to your computer and use it in GitHub Desktop.
tonup - TON toolchain versions manager
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# tonup - TON toolchain versions manager | |
# INSTALL | |
# wget -O tonup.sh https://gist.githubusercontent.com/ilyar/ec7f560d4632cb09a319d60f75a518a2/raw/6ad10f2e33dad7f138cefee441c0ba2dcb83d182/tonup.sh | |
# cp tonup.sh ~/bin/tonup && chmod +x ~/bin/tonup | |
# SETUP | |
# export PATH="$HOME/bin-ton/current:$PATH" | |
set -eo pipefail # https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ | |
# TODO add check pre-required | |
# sudo apt-get install unzip wget | |
function url-version() { | |
version="${1}" | |
if [ "${version}" == "v2024.12" ]; then | |
version="v2024.12-1" | |
fi | |
# TODO add detect os (linux, mac, win) and hardware (x86-64, arm64, arm64) see uname --help | |
os="linux" | |
if [[ "${version}" == *"v2023"*] || "${version}" == *"v2024"* || "${version}" == "v2025.03" ]]; then | |
hardware="x86_64" | |
else | |
hardware="x86-64" | |
fi | |
# TODO add supports ton-linux-arm64, ton-linux-x86-64, ton-mac-arm64, ton-mac-x86-64, ton-win-x86-64 | |
echo -n "https://github.com/ton-blockchain/ton/releases/download/${version}/ton-${os}-${hardware}.zip" | |
} | |
function use-version() { | |
version="${1}" | |
target="${HOME}/bin-ton/${version}" | |
if [ ! -d $target ]; then | |
release="ton-${version}.zip" | |
wget -O "${release}" "$(url-version "${version}")" | |
mkdir -p "${target}" | |
unzip "${release}" -d "${target}" | |
rm -f "${release}" | |
find "${target}" -maxdepth 1 -type f -exec chmod +x {} \; | |
echo ${version} >> "${target}/version" | |
fi | |
ln -sfnT "${target}" "${current}" | |
} | |
function rev-path() { | |
path="${1}" | |
name="${2:-$(basename "${path}" | cut -d'.' -f1)}" | |
rev=$(sha256sum "${path}" \ | |
| cut -d' ' -f1 \ | |
| cut -c1-4 \ | |
| tr '[:lower:]' '[:upper:]') | |
echo -n "${name} r${rev}" | |
} | |
function rev-dir() { | |
dir="$1" | |
name="${2:-$(basename "$dir")}" | |
rev=$(find "$dir" -maxdepth 10 -type f -exec sha256sum {} + \ | |
| awk '{print $1}' \ | |
| sort \ | |
| sha256sum \ | |
| cut -d' ' -f1 \ | |
| cut -c1-4 \ | |
| tr '[:lower:]' '[:upper:]') | |
echo -n "${name} r${rev}" | |
} | |
function check-version() { | |
version="${1}" | |
target="${HOME}/bin-ton/${version}" | |
echo -n "${version}" | |
if [ -d $target ]; then | |
echo -n " [loaded]" | |
fi | |
} | |
version=${1} | |
current="${HOME}/bin-ton/current" | |
if [ -z $version ]; then | |
# INFO TON tlbc revisions: https://gist.github.com/ilyar/b15a3441a345564481fd4033d0f8a2e3?permalink_comment_id=5590277#gistcomment-5590277 | |
echo "List TON toolchain versions" | |
# TODO add getting available version from https://github.com/ton-blockchain/ton/releases | |
# TODO add detect downloaded versions | |
echo " v2022.08 [not asset] (tlbc r04A8 func v0.2.0 stdlib r07E7 fift-lib rC1A4)" | |
echo " v2022.09 [not asset] (tlbc r04A8 func v0.2.0 stdlib r07E7 fift-lib rC1A4)" | |
echo " v2022.10 [not asset] (tlbc r8E27 func v0.3.0 stdlib rFABE fift-lib r645C)" | |
echo " v2022.12 [not asset] (tlbc r8E27 func v0.4.0 stdlib r793E fift-lib r645C)" | |
echo " v2023.01 [not asset] (tlbc r8E27 func v0.4.1 stdlib r793E fift-lib r8EC7)" | |
echo " $(check-version v2023.03) (tlbc r8E27 func v0.4.2 stdlib r7146 fift-lib r8EC7)" | |
echo " $(check-version v2023.04) (tlbc r8E27 func v0.4.3 stdlib rB37A fift-lib r1488)" | |
echo " $(check-version v2023.05) (tlbc r8E27 func v0.4.4 stdlib rB37A fift-lib r7598)" | |
echo " $(check-version v2023.06) (tlbc rF1D1 func v0.4.4 stdlib rB37A fift-lib r7598)" | |
echo " $(check-version v2023.10) (tlbc rF1D1 func v0.4.4 stdlib rB37A fift-lib r7598)" | |
echo " $(check-version v2023.11) (tlbc r7812 func v0.4.4 stdlib rB37A fift-lib r3E15)" | |
echo " $(check-version v2024.01) (tlbc r7812 func v0.4.4 stdlib rB37A fift-lib r3E15)" | |
echo " $(check-version v2024.02) (tlbc r7812 func v0.4.4 stdlib rB37A fift-lib r30AC)" | |
echo " $(check-version v2024.03) (tlbc r7812 func v0.4.4 stdlib rB37A fift-lib r30AC)" | |
echo " $(check-version v2024.04) (tlbc r7812 func v0.4.4 stdlib rB37A fift-lib r30AC)" | |
echo " $(check-version v2024.06) (tlbc r7812 func v0.4.4 stdlib rB37A fift-lib r30AC)" | |
echo " $(check-version v2024.08) (tlbc r7812 func v0.4.4 stdlib r2522 fift-lib r30AC)" | |
echo " $(check-version v2024.09) (tlbc r7812 func v0.4.4 stdlib r2522 fift-lib r30AC)" | |
echo " $(check-version v2024.10) (tlbc r1D5C func v0.4.5 stdlib r2522 fift-lib r30AC)" | |
echo " $(check-version v2024.12) (tlbc r1D5C func v0.4.6 stdlib r2522 fift-lib r875B tolk v0.6.0 tolk-stdlib r97B6)" | |
echo " $(check-version v2025.02) (tlbc rDE78 func v0.4.6 stdlib r2522 fift-lib rF386 tolk v0.8.0 tolk-stdlib r86C7)" | |
echo " $(check-version v2025.03) (tlbc rDE78 func v0.4.6 stdlib r2522 fift-lib rF386 tolk v0.9.0 tolk-stdlib r2C71)" | |
echo " $(check-version v2025.04) (tlbc rDE78 func v0.4.6 stdlib r2522 fift-lib rF2DA tolk v0.11.0 tolk-stdlib rD3EE)" | |
echo "" | |
echo "Usage tonup <version>" | |
echo "" | |
else | |
use-version "${version}" | |
fi | |
echo -n "TON toolchain version $(cat "${current}/version") (" | |
if [ `command -v func` ]; then | |
echo -n "func $(func -V | grep FunC | cut -d' ' -f4) " | |
echo -n "$(rev-path "${current}/smartcont/stdlib.fc")" | |
fi | |
if [ `command -v fift` ]; then | |
echo -n " $(rev-dir "${current}/lib" "fift-lib")" | |
fi | |
if [ `command -v tolk` ]; then | |
echo -n " tolk $(tolk -v | grep Tolk | cut -d' ' -f3) " | |
echo -n "$(rev-dir "${current}/smartcont/tolk-stdlib" "tolk-stdlib")" | |
fi | |
echo ")" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment