zellij/assets/scripts/update-toolchain.sh
a-kenji effccbfaa3
Feat/add rust toolchain (#1235)
* feature: update rust-toolchain

* add(ci): action that updates `rust-toolchain`

We purposefully keep our version a little behind the newest releases,
to give people the time to update. Now this is unambigious and we can
use all the features our current toolchain allows.
2022-03-17 16:46:01 +01:00

68 lines
1.9 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
# dependencies: bash, curl, jq
#
# Updates a rust-toolchain file in relation to the official rust releases.
# How many minor versions delta there should be,
# will automatically advance patch versions.
MINOR_DELTA=2
RUST_TOOLCHAIN_VERSION=$(grep -oP 'channel = "\K[^"]+' "./rust-toolchain")
#RUST_TOOLCHAIN_FILE=../../rust-toolchain
RUST_TOOLCHAIN_FILE=./rust-toolchain
# update with new version number
update_channel(){
printf \
"
# This file is updated by \`update-toolchain.sh\`
# We aim to be around 1-2 rust releases behind in order
# to get people the time to update their toolchains properly.
# By enforcing this, we can also make full use of the features
# provided by the current channel.
"
sed -e "/channel/s/\".*\"/\"$1\"/" "${RUST_TOOLCHAIN_FILE}"
}
get_last_no_releases() {
curl --silent "https://api.github.com/repos/rust-lang/rust/releases" | \
jq '.[range(20)].tag_name' | sed -e 's/\"//g'
}
function parse_semver() {
local token="$1"
local major=0
local minor=0
local patch=0
if grep -E '^[0-9]+\.[0-9]+\.[0-9]+' <<<"$token" >/dev/null 2>&1 ; then
local n=${token//[!0-9]/ }
local a=(${n//\./ })
major=${a[0]}
minor=${a[1]}
patch=${a[2]}
fi
echo "$major $minor $patch"
}
function get_string_arrary() {
IFS=' ' read -r -a array <<< "$1";
echo "${array["${2}"]}"
}
RUST_TOOLCHAIN_VERSION="$(parse_semver $(echo $RUST_TOOLCHAIN_VERSION))"
TARGET_TOOLCHAIN_MINOR_VERSION=$(($(get_string_arrary "${RUST_TOOLCHAIN_VERSION}" 1) - MINOR_DELTA))
LATEST=0
for i in $(get_last_no_releases);do
SEMVER=($(parse_semver "$i"))
if [ "$LATEST" != "${SEMVER[1]}" ];then
MINOR_DELTA=$((MINOR_DELTA - 1))
fi
LATEST="${SEMVER[1]}"
if [ -1 == "${MINOR_DELTA}" ];then
echo "$(update_channel "$i")"> ${RUST_TOOLCHAIN_FILE}
exit
fi
done