diff options
-rw-r--r-- | .github/workflows/update-rust-toolchain.yml | 38 | ||||
-rwxr-xr-x | assets/scripts/update-toolchain.sh | 68 | ||||
-rw-r--r-- | rust-toolchain | 2 |
3 files changed, 107 insertions, 1 deletions
diff --git a/.github/workflows/update-rust-toolchain.yml b/.github/workflows/update-rust-toolchain.yml new file mode 100644 index 000000000..f5f7731c2 --- /dev/null +++ b/.github/workflows/update-rust-toolchain.yml @@ -0,0 +1,38 @@ +name: update-flake-lock +on: + workflow_dispatch: # allows manual triggering + schedule: + - cron: '0 0 * * 0' # runs weekly on Sunday at 00:00 + +jobs: + lockfile: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Install Nix + uses: cachix/install-nix-action@v16 + with: + extra_nix_config: | + access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} + - name: install dependencies + run: nix profile install nixpkgs#jq nixpkgs#curl + - name: update rust-toolchain + run: assets/scripts/update-toolchain.sh + - name: Create Pull Request + id: cpr + uses: peter-evans/create-pull-request@v3 + with: + commit-message: Update `rust-toolchain` + committer: GitHub <noreply@github.com> + author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com> + signoff: false + branch: update/rust-toolchain + delete-branch: true + title: '[Update] rust-toolchain' + body: | + Update rust-toolchain file + labels: | + dependencies + automated + rust 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 diff --git a/rust-toolchain b/rust-toolchain index 2e6fad376..58dff0d77 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1,4 +1,4 @@ [toolchain] -channel = "stable" +channel = "1.55.0" components = ["rustfmt", "clippy", "rust-analysis"] targets = ["wasm32-wasi"] |