summaryrefslogtreecommitdiffstats
path: root/assets
diff options
context:
space:
mode:
authora-kenji <aks.kenji@protonmail.com>2022-03-17 16:46:01 +0100
committerGitHub <noreply@github.com>2022-03-17 16:46:01 +0100
commiteffccbfaa36f384f2897aa0a89ea393d5f34f0a0 (patch)
treec170b59fab1f043da5a830ea5bd379db0305848e /assets
parentccd9a55a9b5c9f7e2295ce64085573a9cda33e2b (diff)
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.
Diffstat (limited to 'assets')
-rwxr-xr-xassets/scripts/update-toolchain.sh68
1 files changed, 68 insertions, 0 deletions
diff --git a/assets/scripts/update-toolchain.sh b/assets/scripts/update-toolchain.sh
new file mode 100755
index 000000000..fe027659f
--- /dev/null
+++ b/assets/scripts/update-toolchain.sh
@@ -0,0 +1,68 @@
+#!/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