mirror of
https://github.com/actions-rust-lang/setup-rust-toolchain.git
synced 2025-12-27 01:54:20 -05:00
Compare commits
50 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1780873c7b | ||
|
|
063a3b947b | ||
|
|
f89a806691 | ||
|
|
51897173ae | ||
|
|
d6688fbd7a | ||
|
|
02be93da58 | ||
|
|
69e4802460 | ||
|
|
183cfebcbd | ||
|
|
2fcdc490d6 | ||
|
|
89d3d963c9 | ||
|
|
1812c7dfe1 | ||
|
|
fd2478fbf0 | ||
|
|
4222ef9487 | ||
|
|
0be57f121b | ||
|
|
7659442a2c | ||
|
|
40ca850926 | ||
|
|
ac90e63697 | ||
|
|
c6aecb0031 | ||
|
|
8b890917a5 | ||
|
|
426e06d077 | ||
|
|
f964086661 | ||
|
|
ab6845274e | ||
|
|
eb1c1a5d34 | ||
|
|
fb51252c7b | ||
|
|
33b85c358d | ||
|
|
82947d77a9 | ||
|
|
9d7e65c320 | ||
|
|
9988a3d74b | ||
|
|
0ddce9f632 | ||
|
|
d9c91b20fd | ||
|
|
9399c7bb15 | ||
|
|
3c7cfa82dc | ||
|
|
b38f618be2 | ||
|
|
6cbea1a794 | ||
|
|
6f9a9da9f9 | ||
|
|
2ad14f9ee2 | ||
|
|
30081c4da5 | ||
|
|
f8efd60d2d | ||
|
|
97db979bf8 | ||
|
|
11df97af8e | ||
|
|
4d1965c914 | ||
|
|
b31b1317f2 | ||
|
|
9f99923fad | ||
|
|
86a2ce6673 | ||
|
|
eb4a655afd | ||
|
|
a90048dfdd | ||
|
|
597574aacb | ||
|
|
634cedf365 | ||
|
|
5d6934e965 | ||
|
|
b01657d9bb |
2
.github/dependabot.yml
vendored
2
.github/dependabot.yml
vendored
@@ -8,4 +8,4 @@ updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "monthly"
|
||||
interval: "weekly"
|
||||
|
||||
2
.github/workflows/autotag-releases.yml
vendored
2
.github/workflows/autotag-releases.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
- name: Get version from tag
|
||||
id: tag_name
|
||||
run: |
|
||||
|
||||
4
.github/workflows/ci.yml
vendored
4
.github/workflows/ci.yml
vendored
@@ -32,7 +32,7 @@ jobs:
|
||||
- "beta"
|
||||
- "stable"
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
# Test toolchain file support
|
||||
- name: Write rust-toolchain.toml
|
||||
@@ -93,7 +93,7 @@ jobs:
|
||||
name: Cache
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Install Rust
|
||||
uses: ./
|
||||
|
||||
18
.pre-commit-config.yaml
Normal file
18
.pre-commit-config.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v4.6.0
|
||||
hooks:
|
||||
- id: check-case-conflict
|
||||
- id: check-executables-have-shebangs
|
||||
- id: check-merge-conflict
|
||||
- id: check-json
|
||||
- id: check-yaml
|
||||
- id: end-of-file-fixer
|
||||
- id: trailing-whitespace
|
||||
args: [--markdown-linebreak-ext=md]
|
||||
- repo: https://github.com/python-jsonschema/check-jsonschema
|
||||
rev: 0.29.2
|
||||
hooks:
|
||||
- id: check-dependabot
|
||||
- id: check-github-actions
|
||||
- id: check-github-workflows
|
||||
52
CHANGELOG.md
52
CHANGELOG.md
@@ -7,6 +7,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [1.15.2] - 2025-10-04
|
||||
|
||||
* Fix: Run the version detection steps in the selected `rust-src-dir` directory.
|
||||
This should enable the version selection even without a default toolchain installed.
|
||||
Fixes #74.
|
||||
|
||||
## [1.15.1] - 2025-09-23
|
||||
|
||||
* Update `Swatinem/rust-cache` to v2.8.1
|
||||
|
||||
## [1.15.0] - 2025-09-14
|
||||
|
||||
* Add support for non-root source directory.
|
||||
Accept source code and `rust-toolchain.toml` file in subdirectories of the repository.
|
||||
Adds a new parameter `rust-src-dir` that controls the lookup for toolchain files and sets a default value for the `cache-workspace` input. (#69 by @Kubaryt)
|
||||
|
||||
## [1.14.1] - 2025-08-28
|
||||
|
||||
* Pin `Swatinem/rust-cache` action to a full commit SHA (#68 by @JohnTitor)
|
||||
|
||||
## [1.14.0] - 2025-08-23
|
||||
|
||||
* Add new parameters `cache-all-crates` and `cache-workspace-crates` that are propagated to `Swatinem/rust-cache` as `cache-all-crates` and `cache-workspace-crates`
|
||||
|
||||
## [1.13.0] - 2025-06-16
|
||||
|
||||
* Add new parameter `cache-provider` that is propagated to `Swatinem/rust-cache` as `cache-provider` (#65 by @mindrunner)
|
||||
|
||||
## [1.12.0] - 2025-04-23
|
||||
|
||||
* Add support for installing rustup on Windows (#58 by @maennchen)
|
||||
This adds support for using Rust on the GitHub provided Windows ARM runners.
|
||||
|
||||
## [1.11.0] - 2025-02-24
|
||||
|
||||
* Add new parameter `cache-bin` that is propagated to `Swatinem/rust-cache` as `cache-bin` (#51 by @enkhjile)
|
||||
* Add new parameter `cache-shared-key` that is propagated to `Swatinem/rust-cache` as `shared-key` (#52 by @skanehira)
|
||||
|
||||
## [1.10.1] - 2024-10-01
|
||||
|
||||
* Fix problem matcher for rustfmt output.
|
||||
The format has changed since https://github.com/rust-lang/rustfmt/pull/5971 and now follows the form "filename:line".
|
||||
Thanks to @0xcypher02 for pointing out the problem.
|
||||
|
||||
## [1.10.0] - 2024-09-23
|
||||
|
||||
* 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.
|
||||
* Configure the `rustup override` behavior via the new `override` input. (#38)
|
||||
|
||||
## [1.9.0] - 2024-06-08
|
||||
|
||||
* Add extra argument `cache-on-failure` and forward it to `Swatinem/rust-cache`. (#39 by @samuelhnrq)
|
||||
|
||||
53
README.md
53
README.md
@@ -6,7 +6,7 @@ Caching for Rust tools and build artifacts is enabled.
|
||||
Environment variables are set to optimize the cache hits.
|
||||
[Problem Matchers] are provided for build messages (cargo, clippy) and formatting (rustfmt).
|
||||
|
||||
The action is heavily inspired by *dtolnay*'s <https://github.com/dtolnay/rust-toolchain> and extends it with further features.
|
||||
The action is heavily inspired by _dtolnay_'s <https://github.com/dtolnay/rust-toolchain> and extends it with further features.
|
||||
|
||||
## Example workflow
|
||||
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
name: cargo test
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
- run: cargo test --all-features
|
||||
|
||||
@@ -30,7 +30,7 @@ jobs:
|
||||
name: cargo fmt
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
# Ensure rustfmt is installed and setup problem matcher
|
||||
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
with:
|
||||
@@ -48,16 +48,25 @@ 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-workspaces` | Propagates the value to [`Swatinem/rust-cache`] | |
|
||||
| `cache-on-failure` | Propagates the value to [`Swatinem/rust-cache`] | true |
|
||||
| `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`]. Influenced by the value of `rust-src-dir`. | |
|
||||
| `cache-on-failure` | Propagates the value to [`Swatinem/rust-cache`] | true |
|
||||
| `cache-key` | Propagates the value to [`Swatinem/rust-cache`] as `key` | |
|
||||
| `cache-shared-key` | Propagates the value to [`Swatinem/rust-cache`] as `shared-key` | |
|
||||
| `cache-bin` | Propagates the value to [`Swatinem/rust-cache`] as `cache-bin` | true |
|
||||
| `cache-provider` | Propagates the value to [`Swatinem/rust-cache`] as `cache-provider` | 'github' |
|
||||
| `cache-all-crates` | Propagates the value to [`Swatinem/rust-cache`] as `cache-all-crates` | false |
|
||||
| `cache-workspace-crates` | Propagates the value to [`Swatinem/rust-cache`] as `cache-workspace-crates` | false |
|
||||
| `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" |
|
||||
| `override` | Setup the last installed toolchain as the default via `rustup override` | true |
|
||||
| `rust-src-dir` | Path from root directory to directory with the Rust source directory (if its not in the root of the repository). Sets a default value for `cache-workspaces` that enables caching. | |
|
||||
|
||||
[`Swatinem/rust-cache`]: https://github.com/Swatinem/rust-cache
|
||||
|
||||
@@ -66,10 +75,10 @@ Afterward, the `components` and `target` specified via inputs are installed in a
|
||||
By default, this action sets the `RUSTFLAGS` environment variable to `-D warnings`.
|
||||
However, rustflags sources are mutually exclusive, so setting this environment variable omits any configuration through `target.*.rustflags` or `build.rustflags`.
|
||||
|
||||
* If `RUSTFLAGS` is already set, no modifications of the variable are made and the original value remains.
|
||||
* If `RUSTFLAGS` is unset and the `rustflags` input is empty (i.e., the empty string), then it will remain unset.
|
||||
Use this, if you want to prevent the value from being set because you make use of `target.*.rustflags` or `build.rustflags`.
|
||||
* Otherwise, the environment variable `RUSTFLAGS` is set to the content of `rustflags`.
|
||||
- If `RUSTFLAGS` is already set, no modifications of the variable are made and the original value remains.
|
||||
- If `RUSTFLAGS` is unset and the `rustflags` input is empty (i.e., the empty string), then it will remain unset.
|
||||
Use this, if you want to prevent the value from being set because you make use of `target.*.rustflags` or `build.rustflags`.
|
||||
- Otherwise, the environment variable `RUSTFLAGS` is set to the content of `rustflags`.
|
||||
|
||||
To prevent this from happening, set the `rustflags` input to an empty string, which will
|
||||
prevent the action from setting `RUSTFLAGS` at all, keeping any existing preferences.
|
||||
@@ -85,6 +94,16 @@ You can read more rustflags, and their load order, in the [Cargo reference].
|
||||
| `rustup-version` | Version as reported by `rustup --version` |
|
||||
| `cachekey` | A short hash of the installed rustc version |
|
||||
|
||||
## Dependencies
|
||||
|
||||
The action works best on the GitHub-hosted runners, but can work on self-hosted ones too, provided the necessary dependencies are available.
|
||||
PRs to add support for more environments are welcome.
|
||||
|
||||
- bash 5
|
||||
- brew (macOS only)
|
||||
- rustup or curl
|
||||
- using other node actions
|
||||
|
||||
## License
|
||||
|
||||
The scripts and documentation in this project are released under the [MIT
|
||||
|
||||
93
action.yml
93
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"
|
||||
@@ -28,10 +28,35 @@ inputs:
|
||||
cache-workspaces:
|
||||
description: "Paths to multiple Cargo workspaces and their target directories, separated by newlines."
|
||||
required: false
|
||||
cache-directories:
|
||||
description: "Additional non workspace directories to be cached, separated by newlines."
|
||||
required: false
|
||||
cache-on-failure:
|
||||
description: "Also cache on workflow failures"
|
||||
description: "Cache even if the build fails."
|
||||
default: "true"
|
||||
required: false
|
||||
cache-key:
|
||||
description: "An additional cache key that is added alongside the automatic `job`-based cache key and can be used to further differentiate jobs."
|
||||
required: false
|
||||
cache-shared-key:
|
||||
description: "A cache key that is used instead of the automatic `job`-based key, and is stable over multiple jobs."
|
||||
required: false
|
||||
cache-bin:
|
||||
description: "Determines whether to cache ${CARGO_HOME}/bin."
|
||||
required: false
|
||||
default: "true"
|
||||
cache-provider:
|
||||
description: "Determines which provider to use for caching. Options are github, buildjet, or warpbuild. Defaults to github."
|
||||
required: false
|
||||
default: "github"
|
||||
cache-all-crates:
|
||||
description: "Determines which crates are cached. If `true` all crates will be cached, otherwise only dependent crates will be cached."
|
||||
required: false
|
||||
default: "false"
|
||||
cache-workspace-crates:
|
||||
description: "Determines which crates are cached. If `true` all crates will be cached, otherwise only dependent crates will be cached."
|
||||
required: false
|
||||
default: "false"
|
||||
matcher:
|
||||
description: "Enable the Rust problem matcher"
|
||||
required: false
|
||||
@@ -40,6 +65,13 @@ inputs:
|
||||
description: "set RUSTFLAGS environment variable, set to empty string to avoid overwriting build.rustflags"
|
||||
required: false
|
||||
default: "-D warnings"
|
||||
override:
|
||||
description: "Setup the last installed toolchain as the default via `rustup override`"
|
||||
required: false
|
||||
default: "true"
|
||||
rust-src-dir:
|
||||
description: "Specify path from root directory to the Rust source directory. By default root directory will be used."
|
||||
required: false
|
||||
|
||||
outputs:
|
||||
rustc-version:
|
||||
@@ -74,7 +106,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
|
||||
@@ -113,26 +145,50 @@ runs:
|
||||
run: echo "::add-matcher::${{ github.action_path }}/rust.json"
|
||||
|
||||
- name: Install rustup, if needed
|
||||
if: runner.os != 'Windows'
|
||||
shell: bash
|
||||
run: |
|
||||
if ! command -v rustup &> /dev/null ; then
|
||||
curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused -fsSL "https://sh.rustup.rs" | sh -s -- --default-toolchain none -y
|
||||
echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> $GITHUB_PATH
|
||||
|
||||
# Resolve the correct CARGO_HOME path depending on OS
|
||||
if [[ "$RUNNER_OS" == "Windows" ]]; then
|
||||
echo "${CARGO_HOME:-$USERPROFILE/.cargo}/bin" | sed 's|/|\\|g' >> $GITHUB_PATH
|
||||
else
|
||||
echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> $GITHUB_PATH
|
||||
fi
|
||||
fi
|
||||
env:
|
||||
RUNNER_OS: "${{ runner.os }}"
|
||||
|
||||
- name: rustup toolchain install ${{inputs.toolchain || 'stable'}}
|
||||
env:
|
||||
toolchain: ${{inputs.toolchain}}
|
||||
targets: ${{inputs.target}}
|
||||
components: ${{inputs.components}}
|
||||
override: ${{inputs.override}}
|
||||
rust_src_dir: ${{inputs.rust-src-dir}}
|
||||
shell: bash
|
||||
run: |
|
||||
if [[ -z "$toolchain" && ( -f "rust-toolchain" || -f "rust-toolchain.toml" ) ]]
|
||||
# Check if value is set
|
||||
if [[ -n "$rust_src_dir" ]]
|
||||
then
|
||||
# If value is set the directory must exist
|
||||
if [[ -d "$rust_src_dir" ]]
|
||||
then
|
||||
cd "$rust_src_dir"
|
||||
else
|
||||
echo "'rust-src-dir' does not point to an existing directory" >&2
|
||||
echo "The value of 'rust-src-dir' is: ${rust_src_dir}" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
if [[ -z "$toolchain" && ( -f "rust-toolchain" || -f "rust-toolchain.toml") ]]
|
||||
then
|
||||
# Install the toolchain as specified in the file
|
||||
# Might break at some point: https://github.com/rust-lang/rustup/issues/1397
|
||||
rustup show
|
||||
# rustup show is the old way that implicitly installed a toolchain
|
||||
# rustup toolchain install is the new explicit way
|
||||
# https://github.com/rust-lang/rustup/issues/3635#issuecomment-2343511297
|
||||
rustup show active-toolchain || rustup toolchain install
|
||||
if [[ -n $components ]]; then
|
||||
rustup component add ${components//,/ }
|
||||
fi
|
||||
@@ -144,13 +200,19 @@ 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
|
||||
if [[ "$override" == "true" ]]
|
||||
then
|
||||
rustup override set ${toolchain//*,/ }
|
||||
fi
|
||||
fi
|
||||
|
||||
- id: versions
|
||||
name: Print installed versions
|
||||
shell: bash
|
||||
# Switch to the Rust sub-directory
|
||||
working-directory: ${{inputs.rust-src-dir || '.'}}
|
||||
run: |
|
||||
echo "rustc-version=$(rustc --version)" >> $GITHUB_OUTPUT
|
||||
rustc --version --verbose
|
||||
@@ -177,7 +239,14 @@ runs:
|
||||
|
||||
- name: Setup Rust Caching
|
||||
if: inputs.cache == 'true'
|
||||
uses: Swatinem/rust-cache@v2
|
||||
uses: Swatinem/rust-cache@f13886b937689c021905a6b90929199931d60db1 # v2.8.1
|
||||
with:
|
||||
workspaces: ${{inputs.cache-workspaces}}
|
||||
workspaces: ${{ inputs.cache-workspaces || inputs.rust-src-dir }}
|
||||
cache-directories: ${{inputs.cache-directories}}
|
||||
cache-on-failure: ${{inputs.cache-on-failure}}
|
||||
cache-bin: ${{inputs.cache-bin}}
|
||||
cache-provider: ${{inputs.cache-provider}}
|
||||
cache-all-crates: ${{inputs.cache-all-crates}}
|
||||
cache-workspace-crates: ${{inputs.cache-workspace-crates}}
|
||||
key: ${{inputs.cache-key}}
|
||||
shared-key: ${{inputs.cache-shared-key}}
|
||||
|
||||
Reference in New Issue
Block a user