From b31b1317f290cc8743fce262ee98435b8c2a3c5a Mon Sep 17 00:00:00 2001 From: Jonas Bushart Date: Sun, 22 Sep 2024 15:28:43 +0200 Subject: [PATCH] Allow installing multiple Rust toolchains at once. --- CHANGELOG.md | 1 + README.md | 24 ++++++++++++------------ action.yml | 9 +++++---- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5091e71..997762c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Add new parameter `cache-directories` that is propagated to `Swatinem/rust-cache` (#44 by @pranc1ngpegasus) * Add new parameter `cache-key` that is propagated to `Swatinem/rust-cache` as `key` (#41 by @iainlane) * Make rustup toolchain installation more robust in light of planned changes https://github.com/rust-lang/rustup/issues/3635 and https://github.com/rust-lang/rustup/pull/3985 +* Allow installing multiple Rust toolchains by specifying multiple versions in the `toolchain` input parameter. ## [1.9.0] - 2024-06-08 diff --git a/README.md b/README.md index 3cbc487..6cacb74 100644 --- a/README.md +++ b/README.md @@ -48,18 +48,18 @@ If no `toolchain` value or toolchain file is present, it will default to `stable First, all items specified in the toolchain file are installed. Afterward, the `components` and `target` specified via inputs are installed in addition to the items from the toolchain file. -| Name | Description | Default | -| ------------------- | -------------------------------------------------------------------------------------- | ------------- | -| `toolchain` | Rustup toolchain specifier e.g. `stable`, `nightly`, `1.42.0`. | stable | -| `target` | Additional target support to install e.g. `wasm32-unknown-unknown` | | -| `components` | Comma-separated string of additional components to install e.g. `clippy, rustfmt` | | -| `cache` | Automatically configure Rust cache (using [`Swatinem/rust-cache`]) | true | -| `cache-directories` | Propagates the value to [`Swatinem/rust-cache`] | | -| `cache-workspaces` | Propagates the value to [`Swatinem/rust-cache`] | | -| `cache-on-failure` | Propagates the value to [`Swatinem/rust-cache`] | true | -| `cache-key` | Propagates the value to [`Swatinem/rust-cache`] as `key` | | -| `matcher` | Enable problem matcher to surface build messages and formatting issues | true | -| `rustflags` | Set the value of `RUSTFLAGS` (set to empty string to avoid overwriting existing flags) | "-D warnings" | +| Name | Description | Default | +| ------------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------- | +| `toolchain` | Comma-separated list of Rustup toolchain specifier e.g. `stable`, `nightly`, `1.42.0`. The last version is the default. | stable | +| `target` | Additional target support to install e.g. `wasm32-unknown-unknown` | | +| `components` | Comma-separated string of additional components to install e.g. `clippy, rustfmt` | | +| `cache` | Automatically configure Rust cache (using [`Swatinem/rust-cache`]) | true | +| `cache-directories` | Propagates the value to [`Swatinem/rust-cache`] | | +| `cache-workspaces` | Propagates the value to [`Swatinem/rust-cache`] | | +| `cache-on-failure` | Propagates the value to [`Swatinem/rust-cache`] | true | +| `cache-key` | Propagates the value to [`Swatinem/rust-cache`] as `key` | | +| `matcher` | Enable problem matcher to surface build messages and formatting issues | true | +| `rustflags` | Set the value of `RUSTFLAGS` (set to empty string to avoid overwriting existing flags) | "-D warnings" | [`Swatinem/rust-cache`]: https://github.com/Swatinem/rust-cache diff --git a/action.yml b/action.yml index f6929f3..240e88a 100644 --- a/action.yml +++ b/action.yml @@ -13,7 +13,7 @@ branding: # The action is heavily inspired by https://github.com/dtolnay/rust-toolchain inputs: toolchain: - description: "Rust toolchain specification -- see https://rust-lang.github.io/rustup/concepts/toolchains.html#toolchain-specification" + description: "Comma-separated list of Rust toolchain specifications. Last version becomes the default. -- see https://rust-lang.github.io/rustup/concepts/toolchains.html#toolchain-specification" required: false target: description: "Target triple to install for this toolchain" @@ -80,7 +80,7 @@ runs: : construct rustup command line echo "targets=$(for t in ${targets//,/ }; do echo -n ' --target' $t; done)" >> $GITHUB_OUTPUT echo "components=$(for c in ${components//,/ }; do echo -n ' --component' $c; done)" >> $GITHUB_OUTPUT - echo "downgrade=${{inputs.toolchain == 'nightly' && inputs.components && ' --allow-downgrade' || ''}}" >> $GITHUB_OUTPUT + echo "downgrade=${{contains(inputs.toolchain, 'nightly') && inputs.components && ' --allow-downgrade' || ''}}" >> $GITHUB_OUTPUT # The environment variables always need to be set before the caching action - name: Setting Environment Variables @@ -152,8 +152,9 @@ runs: then toolchain=stable fi - rustup toolchain install $toolchain${{steps.flags.outputs.targets}}${{steps.flags.outputs.components}} --profile minimal${{steps.flags.outputs.downgrade}} --no-self-update - rustup override set $toolchain + rustup toolchain install ${toolchain//,/ } ${{steps.flags.outputs.targets}}${{steps.flags.outputs.components}} --profile minimal${{steps.flags.outputs.downgrade}} --no-self-update + # Take the last element from the list + rustup override set ${toolchain//*,/ } fi - id: versions