toolchain/README.md

170 lines
7.3 KiB
Markdown
Raw Normal View History

2019-09-16 15:40:48 +08:00
# `rust-toolchain` Action
2019-09-12 21:44:29 +08:00
2020-03-24 21:26:10 +08:00
[![Sponsoring](https://img.shields.io/badge/Support%20it-Say%20%22Thank%20you!%22-blue)](https://actions-rs.github.io/#sponsoring)
2019-09-15 17:24:13 +08:00
![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)
2019-09-15 01:42:34 +08:00
[![Gitter](https://badges.gitter.im/actions-rs/community.svg)](https://gitter.im/actions-rs/community)
2020-03-24 21:26:10 +08:00
![Continuous integration](https://github.com/actions-rs/toolchain/workflows/Continuous%20integration/badge.svg)
![Dependabot enabled](https://api.dependabot.com/badges/status?host=github&repo=actions-rs/toolchain)
2019-09-15 01:42:34 +08:00
This GitHub Action installs [Rust toolchain](https://rust-lang.github.io/rustup/concepts/toolchains.html#toolchain-specification)
2020-03-24 21:26:10 +08:00
with [rustup](https://github.com/rust-lang/rustup) help.
2019-09-12 21:44:29 +08:00
2020-03-24 21:26:10 +08:00
It supports additional targets, components and profiles and handles all
2020-04-07 14:19:47 +08:00
these small papercuts for you.
2020-03-24 21:26:10 +08:00
**Table of Contents**
* [Example workflow](#example-workflow)
* [Inputs](#inputs)
* [Outputs](#outputs)
* [Profiles](#profiles)
* [Components](#components)
* [The toolchain file](#the-toolchain-file)
* [License](#license)
* [Contribute and support](#contribute-and-support)
2019-09-12 21:44:29 +08:00
## Example workflow
```yaml
on: [push]
name: build
jobs:
check:
name: Rust project
runs-on: ubuntu-latest
steps:
2020-01-26 23:25:57 +08:00
- uses: actions/checkout@v2
2019-10-16 20:12:53 +08:00
- name: Install latest nightly
2019-09-15 17:24:13 +08:00
uses: actions-rs/toolchain@v1
2019-09-12 21:44:29 +08:00
with:
toolchain: nightly
override: true
2020-03-24 21:26:10 +08:00
components: rustfmt, clippy
2019-09-16 15:40:48 +08:00
# `cargo check` command here will use installed `nightly`
2020-03-24 21:26:10 +08:00
# as it is set as an "override" for current directory
2019-09-16 15:40:48 +08:00
- name: Run cargo check
uses: actions-rs/cargo@v1
with:
command: check
2019-09-12 21:44:29 +08:00
```
2019-09-16 15:40:48 +08:00
See [additional recipes here](https://github.com/actions-rs/meta).
2019-09-12 21:44:29 +08:00
## Inputs
2019-10-16 20:12:53 +08:00
| Name | Required | Description | Type | Default |
| ------------ | :------: | ----------------------------------------------------------------------------------------------------------------------------------------------------| ------ | --------|
| `toolchain` | | [Toolchain](https://github.com/rust-lang/rustup.rs#toolchain-specification) name to use, ex. `stable`, `nightly`, `nightly-2019-04-20`, or `1.32.0` | string | stable |
2019-10-16 20:12:53 +08:00
| `target` | | Additionally install specified target for this toolchain, ex. `x86_64-apple-darwin` | string | |
| `default` | | Set installed toolchain as a default toolchain | bool | false |
| `override` | | Set installed toolchain as an override for the current directory | bool | false |
| `profile` | | Execute `rustup set profile {value}` before installing the toolchain, ex. `minimal` | string | default |
2019-10-16 20:12:53 +08:00
| `components` | | Comma-separated list of the additional components to install, ex. `clippy, rustfmt` | string | |
2020-01-26 23:25:57 +08:00
Note: since `v1.0.4` version, `toolchain` input is not marked as required
in order to support toolchain files. See the details [below](#the-toolchain-file).
## Outputs
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)` |
2020-01-27 00:20:01 +08:00
| `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)` |
2020-11-28 04:49:20 +08:00
Note: `rustc_hash` output value can be used with [actions/cache](https://github.com/actions/cache) Action
to store cache for different Rust versions, as it is unique across different Rust versions and builds (including `nightly`).
2019-10-16 20:12:53 +08:00
## Profiles
This Action supports rustup [profiles](https://blog.rust-lang.org/2019/10/15/Rustup-1.20.0.html#profiles),
which are can be used to speed up the workflow execution by installing the
minimally required set of components, for example:
```yaml
- name: Install minimal nightly
uses: actions-rs/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 supports them.
In order 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.
2019-09-12 21:44:29 +08:00
2019-09-15 17:24:13 +08:00
## Components
2019-10-16 20:12:53 +08:00
This Action supports rustup [components](https://blog.rust-lang.org/2019/10/15/Rustup-1.20.0.html#installing-the-latest-compatible-nightly) too,
and in combination with the [profiles](#profiles) input it allows to install only the needed components:
```yaml
- name: Install minimal stable with clippy and rustfmt
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
2019-10-16 20:12:53 +08:00
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:
```yaml
- name: Install minimal nightly with clippy and rustfmt
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: nightly
components: rustfmt, clippy
```
2020-03-24 21:26:10 +08:00
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:
1. `toolchain` input is `nightly` exactly.
2. At least one component is provided in `components` input.
Same to the `profile` input, if installed `rustup` does not supports "components",
2019-10-16 20:12:53 +08:00
it will be automatically upgraded by this Action.
2019-09-15 17:24:13 +08:00
2020-01-26 23:25:57 +08:00
## The toolchain file
This Action supports [toolchain files](https://rust-lang.github.io/rustup/overrides.html#the-toolchain-file),
2020-01-26 23:25:57 +08:00
so it is not necessary to use `toolchain` input anymore.
2020-03-24 21:26:10 +08:00
Input has higher priority, so if you are 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.
## License
This Action is distributed under the terms of the MIT license, see [LICENSE](https://github.com/actions-rs/toolchain/blob/master/LICENSE) for details.
## Contribute and support
2020-01-26 23:25:57 +08:00
2020-03-24 21:26:10 +08:00
Any contributions are welcomed!
2020-01-26 23:25:57 +08:00
2020-03-24 21:26:10 +08:00
If you want to report a bug or have a feature request,
check the [Contributing guide](https://github.com/actions-rs/.github/blob/master/CONTRIBUTING.md).
2020-03-24 21:26:10 +08:00
You can also support author by funding the ongoing project work,
see [Sponsoring](https://actions-rs.github.io/#sponsoring).