GitHub Action
rust-toolchain-reborn
This GitHub Action installs Rust toolchain with the help of rustup.
It supports additional targets, components, profiles and handles all these small paper cuts for you.
on: [push]
name: build
jobs:
check:
name: Rust project
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install latest nightly
uses: crusty-pie/toolchain@v1
with:
toolchain: nightly
override: true
components: rustfmt, clippy
# `cargo check` command here will use installed `nightly`
# as it is set as an "override" for current directory
- name: Run cargo check
run: cargo check
Name | Required | Description | Type | Default |
---|---|---|---|---|
toolchain |
false | Toolchain name to use, ex. stable , nightly , nightly-2019-04-20 , or 1.32.0 |
string | stable |
profile |
false | Execute rustup set profile {value} before installing the toolchain, ex. minimal |
string | default |
components |
false | Comma-separated list of the additional components to install, ex. clippy, rustfmt |
string | '' |
targets |
false | Comma-separated list of the additional targets for the toolchain, ex. x86_64-apple-darwin |
string | '' |
default |
false | Set installed toolchain as a default toolchain | bool | false |
override |
false | Set installed toolchain as an override for the current directory | bool | false |
force |
false | Force an update, even if some components are missing | bool | false |
Note: since v1.0.4
version, toolchain
input is not marked as required
to support toolchain files.
See the details below.
Installed rustc
, cargo
and rustup
versions can be fetched from the Action outputs:
Name | Description | Example |
---|---|---|
rustc |
Rustc version | 1.40.0 (73528e339 2019-12-16) |
rustc_hash |
Rustc version hash | 73528e339 |
cargo |
Cargo version | 1.40.0 (bc8e4c8be 2019-11-22) |
rustup |
rustup version | 1.21.1 (7832b2ebe 2019-12-20) |
Note: rustc_hash
output value can be used with actions/cache Action
to store cache for different Rust versions, as it is unique across different Rust versions and builds (including nightly
).
This Action supports rustup profiles, which can be used to speed up the workflow execution by installing the minimally required to be set of components, for example:
- name: Install minimal nightly
uses: crusty-pie/toolchain@v1
with:
profile: minimal
toolchain: nightly
This Action will automatically run rustup self update
if profile
input is set
and the installed rustup
version does not support them.
To provide backwards compatibility for v1
version, there is no value for
profile
input set by default, which means that the default
profile is used
by rustup
(and that includes rust-docs
, clippy
and rustfmt
).
You may want to consider using profile: minimal
to speed up toolchain installation.
This Action supports rustup components too, and in combination with the profiles input it allows to install only the needed components:
- name: Install minimal stable with clippy and rustfmt
uses: crusty-pie/toolchain@v1
with:
profile: minimal
toolchain: stable
components: rustfmt, clippy
As an extra perk, rustup >= 1.20.0
is able to find the most recent nightly
toolchain
with the requested components available; next example is utilizing this feature
to install the minimal set of nightly
toolchain components with the rustfmt
and clippy
extras:
- name: Install minimal nightly with clippy and rustfmt
uses: crusty-pie/toolchain@v1
with:
profile: minimal
toolchain: nightly
components: rustfmt, clippy
In case if nightly
toolchain is requested and one of the components is missing in
latest nightly
release, this Action will attempt the downgrade till it find
the most recent nightly
with all components needed.
Note that this behavior will work only if the following two conditions apply:
toolchain
input isnightly
exactly.- At least one component is provided in
components
input.
Same to the profile
input, if installed rustup
does not support
"components" it will be automatically upgraded by this Action.
This Action supports toolchain files,
so it is not necessary to use toolchain
input anymore.
Input has higher priority, so if you want to use toolchain file, you need to remove the input from the workflow file.
If neither toolchain
input or rust-toolchain
file are provided,
Action execution will fail.
This Action is distributed under the terms of the MIT license. See LICENSE for details.
Any contributions are welcomed!
If you want to report a bug or have a feature request, check the Contributing guide.