Compare commits

..

102 Commits
v1.4.2 ... v1

Author SHA1 Message Date
Jonas Bushart
1780873c7b 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.
2025-10-04 15:50:05 +02:00
Jonas Bushart
063a3b947b Use correct quoting style for working-directory 2025-10-04 13:10:09 +02:00
Jonas Bushart
f89a806691 Use the built-in working-directory selector and default to "." if rust-src-dir is not set 2025-10-04 13:06:57 +02:00
Jonas Bushart
51897173ae Gate the rust-src-dir check by first checking if the value is set 2025-10-04 12:57:01 +02:00
Jonas Bushart
d6688fbd7a Print an error and exit if 'rust-src-dir' does not point to an existing directory 2025-10-03 23:23:33 +02:00
Jonas Bushart
02be93da58 Update Swatinem/rust-cache to v2.8.1 2025-09-23 22:16:00 +02:00
Rob Ede
69e4802460 Merge pull request #73 from actions-rust-lang/dependabot/github_actions/Swatinem/rust-cache-2.8.1 2025-09-22 13:15:15 +01:00
dependabot[bot]
183cfebcbd Bump Swatinem/rust-cache from 2.8.0 to 2.8.1
Bumps [Swatinem/rust-cache](https://github.com/swatinem/rust-cache) from 2.8.0 to 2.8.1.
- [Release notes](https://github.com/swatinem/rust-cache/releases)
- [Changelog](https://github.com/Swatinem/rust-cache/blob/master/CHANGELOG.md)
- [Commits](98c8021b55...f13886b937)

---
updated-dependencies:
- dependency-name: Swatinem/rust-cache
  dependency-version: 2.8.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-22 07:02:11 +00:00
Jonas Bushart
2fcdc490d6 Update readme and changelog for 1.15.0 2025-09-14 21:49:03 +02:00
Jonas Bushart
89d3d963c9 Merge pull request #69 from Kubaryt/main 2025-09-14 20:38:20 +01:00
Rob Ede
1812c7dfe1 Merge pull request #72 from martinfrances107/README 2025-09-03 19:06:02 +01:00
martinfrances107
fd2478fbf0 README should direct users to actions/checkout@5. 2025-09-03 18:58:19 +01:00
Kubaryt
4222ef9487 Set workspaces in Swatinem/rust-cache to rust-src-dir if cache-workspaces is not set 2025-08-28 14:20:24 +02:00
Kubaryt
0be57f121b combine rust-src-dir presence and rust_toolchain file presence checks 2025-08-28 14:20:24 +02:00
Rob Ede
7659442a2c Merge pull request #71 from actions-rust-lang/dependabot/github_actions/actions/checkout-5 2025-08-28 13:07:54 +01:00
dependabot[bot]
40ca850926 Bump actions/checkout from 4 to 5
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-28 01:51:01 +00:00
Jonas Bushart
ac90e63697 Update changelog for v1.14.1 2025-08-28 00:30:26 +02:00
Jonas Bushart
c6aecb0031 Update the dependabot schedule
Run weekly update checks now that actions are pinned by hash instead of major version tag.
2025-08-28 00:23:23 +02:00
Jonas Bushart
8b890917a5 Merge pull request #68 from JohnTitor/pin-actions 2025-08-28 00:18:14 +02:00
Kubaryt
426e06d077 enhancement: Add option to specify rust-toolchain.toml path (#47) 2025-08-27 17:28:40 +02:00
Rob Ede
f964086661 Merge branch 'main' into pin-actions 2025-08-26 07:10:09 +01:00
Jonas Bushart
ab6845274e Add new parameters cache-all-crates and cache-workspace-crates
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`

Closes #67
2025-08-23 17:08:42 +02:00
Yuki Okushi
eb1c1a5d34 Pin Swatinem/rust-cache action to a full commit SHA 2025-08-22 16:07:16 +09:00
Jonas Bushart
fb51252c7b Update CHANGELOG.md 2025-06-16 23:47:58 +02:00
Jonas Bushart
33b85c358d Merge pull request #65 from mindrunner/main 2025-06-16 23:44:51 +02:00
lukas
82947d77a9 feat: support cache-provider 2025-06-16 08:02:53 +02:00
Jonas Bushart
9d7e65c320 Update changelog for windows support 2025-04-23 22:46:51 +02:00
Jonas Bushart
9988a3d74b Update the dependency section to mark the new windows rustup support 2025-04-23 22:42:15 +02:00
Jonas Bushart
0ddce9f632 Merge pull request #58 from maennchen/jm/windows-arm 2025-04-23 22:39:32 +02:00
Jonatan Männchen
d9c91b20fd Support rustup installation for Windows 2025-04-23 16:47:51 +02:00
Jonas Bushart
9399c7bb15 Merge pull request #53 from actions-rust-lang/rel-1110 2025-02-24 21:55:37 +01:00
Rob Ede
3c7cfa82dc Merge branch 'main' into rel-1110 2025-02-24 02:35:39 +00:00
Rob Ede
b38f618be2 Merge pull request #51 from enkhjile/main 2025-02-24 02:34:33 +00:00
Rob Ede
6cbea1a794 chore: prepare release 1.11.0 2025-02-24 02:19:52 +00:00
Rob Ede
6f9a9da9f9 Merge branch 'main' into main 2025-02-24 02:15:25 +00:00
Rob Ede
2ad14f9ee2 Merge pull request #52 from skanehira/main 2025-02-24 02:09:24 +00:00
Enkhjil Enkhbaatar
30081c4da5 fix: add cache-bin input with true as default value 2025-02-11 12:01:30 +09:00
skanehira
f8efd60d2d feat: add shared-cache-key to inputs 2025-02-08 01:24:48 +09:00
Jonas Bushart
97db979bf8 Specify dependencies in README 2024-10-21 23:54:51 +02:00
Jonas Bushart
11df97af8e Update the rustfmt problem matcher
https://github.com/rust-lang/rustfmt/pull/5971
https://github.com/actions-rust-lang/rustfmt/issues/5
2024-10-01 23:06:20 +02:00
Jonas Bushart
4d1965c914 Add override input parameter that controls the rustup override behavior 2024-09-22 16:04:02 +02:00
Jonas Bushart
b31b1317f2 Allow installing multiple Rust toolchains at once. 2024-09-22 15:28:43 +02:00
Jonas Bushart
9f99923fad Add pre-commit for basic checks 2024-09-20 00:46:09 +02:00
Jonas Bushart
86a2ce6673 Make toolchain install more robust 2024-09-20 00:39:06 +02:00
Jonas Bushart
eb4a655afd Document new keys and add changelog 2024-09-20 00:27:10 +02:00
Jonas Bushart
a90048dfdd Merge pull request #41 from iainlane/iainlane/propagate-cache-key 2024-09-20 00:23:43 +02:00
Jonas Bushart
597574aacb Update key name in README 2024-09-20 00:23:09 +02:00
Jonas Bushart
634cedf365 Merge pull request #44 from pranc1ngpegasus/feat/able-to-cache-additional-directories 2024-09-20 00:09:58 +02:00
Fukaya Temma
5d6934e965 Able to cache additional directories 2024-08-18 01:34:59 +09:00
Iain Lane
b01657d9bb Add support for adding to cache key
When using this action in multiple matrix jobs in the same workflow, the
generated cache key is the same for all of them, because they all get
the same job ID. This means that all apart from the first job are unable
to save the cache, and subsequent runs might restore the wrong cache.

The `Swatinem/rust-cache` action which we use for caching has a `key`
input which it puts in its cache key. (It doesn't override the key, just
adds to it.) Providing this as an input here will allow us to generate a
unique cache key for each job in the matrix.
2024-07-13 07:31:43 +01:00
Jonas Bushart
1fbea72663 Merge pull request #40 from actions-rust-lang/prepare-release 2024-06-08 12:49:07 +02:00
Jonas Bushart
46dca5d120 Add changelog entry 2024-06-08 12:40:20 +02:00
Jonas Bushart
1734e14b0b Switch default of cache-on-failure to true 2024-06-08 12:33:50 +02:00
Jonas Bushart
74e1b40e68 Merge pull request #39 from samuelhnrq/main 2024-06-05 20:01:48 +02:00
Samuel Henrique
d60b90debe feat: adds cache-on-failure propagation 2024-05-25 08:26:47 +00:00
Jonas Bushart
b113a30d27 Merge pull request #34 from actions-rust-lang/rel-180 2024-01-14 00:29:32 +01:00
Rob Ede
039765bd18 chore: prepare release 1.8.0 2024-01-13 17:45:49 +00:00
Rob Ede
84e65ce315 Merge pull request #32 from gruebel/add-workspaces 2024-01-13 17:40:39 +00:00
Rob Ede
6f719a240e Merge branch 'main' into add-workspaces 2024-01-13 17:36:40 +00:00
Rob Ede
15d0afaad9 ci: fix cache test 2024-01-13 17:36:31 +00:00
Rob Ede
922cc935eb ci: add cache-workspaces test 2024-01-13 17:25:41 +00:00
Rob Ede
bcda41b18d Merge pull request #33 from fprasx/fprasx/fix-toolchain-overrides 2024-01-13 16:07:27 +00:00
Rob Ede
ba41ca6f71 ci: clearer test names 2024-01-13 16:03:46 +00:00
Rob Ede
aa089182f2 ci: fix conditional 2024-01-13 15:57:48 +00:00
Rob Ede
c6086ae6e5 test: add toolchain file override test 2024-01-13 15:54:38 +00:00
Felix Prasanna
d473183fe9 use rustup override set to select toolchain
Using rustup override set will override a local rust-toolchain.toml file
while rustup default will not.
2024-01-12 17:14:34 -05:00
gruebel
f2e9ed58bd add workspaces input field to support non-root projects 2024-01-12 18:41:01 +01:00
Jonas Bushart
d5fcac478a Merge pull request #30 from actions-rust-lang/prep-1.7.0 2024-01-11 23:57:44 +01:00
Rob Ede
c4ac4d95de Prepare 1.7.0 release 2024-01-11 03:20:22 +00:00
Rob Ede
154a347b2a Merge pull request #29 from actions-rust-lang/upd-toolchain-nightly 2024-01-11 03:16:11 +00:00
Rob Ede
af702488e5 ci: update checked rust-toolchain version 2024-01-11 03:12:29 +00:00
Rob Ede
bb3f6a170e Merge pull request #26 from Twey/allow-overriding-toolchain-file 2024-01-11 03:00:13 +00:00
Rob Ede
99ab88ad00 Merge branch 'main' into allow-overriding-toolchain-file 2024-01-11 02:56:08 +00:00
Rob Ede
962ed5edf0 ci: add indicate toolchain file in job name 2024-01-11 02:20:44 +00:00
Jonas Bushart
c7e1de2846 Update CHANGELOG.md 2023-12-04 00:16:34 +01:00
Jonas Bushart
24c9dd087b Merge pull request #24 from obi1kenobi/patch-1 2023-12-04 00:15:38 +01:00
Jonas Bushart
74a4154991 Merge pull request #27 from oxideai/feature/config-matcher 2023-12-04 00:13:10 +01:00
dcvz
84ba0c9d1b Update README 2023-11-30 11:45:35 +01:00
dcvz
51173b3da4 feature(matcher): allow disabling problem matcher 2023-11-30 11:42:45 +01:00
James ‘Twey’ Kay
6ed6429951 Use the empty string to trigger toolchain file check instead of an old version 2023-11-01 09:44:05 +00:00
James ‘Twey’ Kay
5ea736b97f Allow overriding the toolchain file 2023-10-31 12:58:53 +00:00
Predrag Gruevski
33678a48c0 Add docs for the cachekey output to the README
It seems like it's being output, just wasn't documented: https://github.com/actions-rust-lang/setup-rust-toolchain/blob/main/action.yml#L144
2023-10-17 22:01:06 -04:00
Jonas Bushart
317ed62323 Update example workflow in readme 2023-10-03 18:55:16 +02:00
Jonas Bushart
8cb8f77172 Merge pull request #23 from actions-rust-lang/dependabot/github_actions/actions/checkout-4
Bump actions/checkout from 3 to 4
2023-10-01 10:55:40 +02:00
dependabot[bot]
1f541c5b05 Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-01 07:14:31 +00:00
Jonas Bushart
f3c84ee10b Merge pull request #18 from JeanMertz/rustflags 2023-05-29 21:44:44 +02:00
Jonas Bushart
1ef811fbfb Restore behavior to not touch existing RUSTFLAGS variable
Add changelog
2023-05-29 21:38:39 +02:00
Jean Mertz
70241ab2e9 fixes 2023-05-29 21:27:29 +02:00
Jean Mertz
823a4a135d fixes 2023-05-29 21:27:29 +02:00
Jean Mertz
aaa7eef1a2 requred -> required 2023-05-29 21:27:29 +02:00
Jean Mertz
24274e4435 allow disabling RUSTFLAGS config 2023-05-29 21:27:29 +02:00
Jonas Bushart
cf60eafd0a Merge pull request #19 from actions-rust-lang/better-toolchain-support 2023-05-29 20:43:47 +02:00
Jonas Bushart
289d5e6164 Add changelog 2023-05-29 20:31:27 +02:00
Jonas Bushart
661e2d23dd Explain the new behavior in the README 2023-05-20 18:03:52 +02:00
Jonas Bushart
b065e5ab9f Install components and targets after installing everything from the rust-toolchain file 2023-05-20 16:49:42 +02:00
Jonas Bushart
03aaf6be76 Check that listed components are installed even with a rust-toolchain file 2023-05-20 16:29:33 +02:00
Jonas Bushart
ac6bb38f31 Merge pull request #15 from actions-rust-lang/fix-problem-matcher 2023-03-18 00:30:54 +01:00
Jonas Bushart
12a4c2d9dc Add new problem matcher that is aware of color codes
The action runner currently fails to strip color codes from the output.
This means that many matchers currectly do not work.

https://github.com/actions/runner/issues/2341
https://github.com/actions/runner/pull/2430

The new matcher is copied from kaj/rsass which is MIT licensed.

3e5d6c0600/.github/workflows/rust-problem-matcher.json
2023-03-18 00:18:20 +01:00
Jonas Bushart
3b557ff24c Update rust.json
The regex for the problem matcher is invalid, since the `-` creates a range. But the range is invalid, since it cannot start with `\s`.
2023-03-18 00:09:26 +01:00
Jonas Bushart
64fef3b541 Merge pull request #13 from actions-rust-lang/double-run 2023-02-21 22:23:42 +01:00
Jonas Bushart
cea2ca57ed Add changelog entry 2023-02-21 21:15:17 +00:00
Jonas Bushart
f010a58728 Always downgrade the registry protocol to supported versions
Not all version support the new sparse protocol. While old versions
ignore the value, 1.66 and other fail due to unstable features.

If such a version is detected, always downgrade to the git protocol.

This fixes running the action twice with different toolchains. Even if
the first install uses something which supports "sparse", the second run
can still downgrade it to "git".

Closes #12
2023-02-21 21:02:41 +00:00
11 changed files with 430 additions and 86 deletions

View File

@@ -8,4 +8,4 @@ updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
interval: "weekly"

View File

@@ -15,7 +15,7 @@ jobs:
permissions:
contents: write
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v5
- name: Get version from tag
id: tag_name
run: |

View File

@@ -1,65 +1,106 @@
name: CI
on:
push:
push: { branches: [main] }
pull_request:
schedule: [cron: "40 1 * * *"]
jobs:
install:
name: Rust ${{matrix.rust}} ${{matrix.os}}
name: Rust ${{matrix.rust || '(default)'}} (toolchain-file=${{matrix.write-toolchain-file}}) (${{matrix.os}})
runs-on: ${{matrix.os}}
strategy:
fail-fast: false
max-parallel: 5
matrix:
rust: [
# Test with toolchain file override
"1.60",
os:
- ubuntu-latest
- windows-latest
- macos-latest
write-toolchain-file:
- false
- true
rust:
# use stable toolchain as default
- null
# Test that the sparse registry check works.
# 1.66 and 1.67 don't support stable sparse registry.
"1.66",
"nightly",
"beta",
"stable",
]
os: [
"ubuntu-latest",
"windows-latest",
"macos-latest",
]
- "1.66"
- "nightly"
- "beta"
- "stable"
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v5
# Test toolchain file support
- name: Write rust-toolchain.toml
if: matrix.write-toolchain-file
shell: bash
run: |
cat <<EOF >>rust-toolchain.toml
[toolchain]
channel = "nightly-2022-09-10"
channel = "nightly-2024-01-10"
components = [ "rustfmt", "rustc-dev" ]
targets = [ "wasm32-unknown-unknown", "thumbv7m-none-eabi" ]
profile = "minimal"
EOF
shell: bash
if: matrix.rust == '1.60'
- uses: ./
name: Run actions-rust-lang/setup-rust-toolchain ${{matrix.rust}}
id: toolchain
- id: toolchain
name: Run actions-rust-lang/setup-rust-toolchain ${{matrix.rust || 'on toolchain file'}}
uses: ./
with:
toolchain: ${{matrix.rust}}
components: clippy
- name: Check ${{'${{steps.toolchain.outputs.rustc-version}}'}}
run: echo '${{steps.toolchain.outputs.rustc-version}}'
- name: Check ${{'${{steps.toolchain.outputs.cargo-version}}'}}
run: echo '${{steps.toolchain.outputs.cargo-version}}'
- name: Check ${{'${{steps.toolchain.outputs.rustup-version}}'}}
run: echo '${{steps.toolchain.outputs.rustup-version}}'
- run: rustc --version && cargo --version
- name: Check lack of toolchain input or file results in stable
if: matrix.write-toolchain-file == false && matrix.rust == null
shell: bash
run: |-
rustcv="$(rustc --version)"
[[ "$rustcv" != *"nightly"* && "$rustcv" != *"beta"* ]]
- name: Check toolchain file is being overridden
if: matrix.write-toolchain-file
shell: bash
run: |-
rustcv="$(rustc --version)"
[[ ! ( "$rustcv" == *"nightly"* && "$rustcv" == *"2024-01-10"* ) ]]
- shell: bash
run: rustc --version && cargo --version
# Test with creating a small project
- run: cargo init . --bin --name ci
# Add tiny empty crate.
# This checks that registry access works.
- run: cargo add serde_as
- run: cargo check
- run: cargo clippy
cache:
name: Cache
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Install Rust
uses: ./
with:
components: clippy
cache: true
cache-workspaces: |-
./test-workspace
- run: cargo clippy --manifest-path=./test-workspace/Cargo.toml

18
.pre-commit-config.yaml Normal file
View 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

View File

@@ -7,6 +7,111 @@ 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)
Set the default the value to true.
This will result in more caching than previously.
This helps when large dependencies are compiled only for testing to fail.
## [1.8.0] - 2024-01-13
* Allow specifying subdirectories for cache.
* Fix toolchain file overriding.
## [1.7.0] - 2024-01-11
* Allow overriding the toolchain file with explicit `toolchain` input. (#26)
## [1.6.0] - 2023-12-04
### Added
* Allow disabling problem matchers (#27)
This can be useful when having a matrix of jobs, that produce the same errors.
## [1.5.0] - 2023-05-29
### Added
* Support installing additional components and targets that are not listed in `rust-toolchain` (#14)
Before only the items listed in `rust-toolchain` were installed.
Now all the items from the toolchain file are installed and then all the `target`s and `components` that are provided as action inputs.
This allows installing extra tools only for CI or simplify testing special targets in CI.
* Allow skipping the creation of a `RUSTFLAGS` environment variable.
Cargos logic for rustflags is complicated, and setting the `RUSTFLAGS` environment variable prevents other ways of working.
Provide a new `rustflags` input, which controls the environment variable creation.
If the value is set to the empty string, then `RUSTFLAGS` is not created.
Pre-existing `RUSTFLAGS` variables are never modified by this extension.
## [1.4.4] - 2023-03-18
### Fixed
* Use color aware problem matcher.
The problem matcher currently runs against the colored terminal output ([Bug 1](https://github.com/actions/runner/issues/2341), [Bug 2](https://github.com/actions/runner/pull/2430)).
The previous matcher was not aware of ANSII color codes and did not work.
## [1.4.3] - 2023-02-21
### Fixed
* Executing the action twice for different toolchains now no longer fails around unstable features #12.
If multiple toolchains are installed, the "CARGO_REGISTRIES_CRATES_IO_PROTOCOL" can be downgraded to "git" if any of the installed toolchains require it.
## [1.4.2] - 2023-02-15
### Fixed

View File

@@ -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,16 +21,16 @@ jobs:
name: cargo test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v5
- uses: actions-rust-lang/setup-rust-toolchain@v1
- run: cargo test --all-features
# Check formatting with rustfmt
formatting:
name: cargo fmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v5
# Ensure rustfmt is installed and setup problem matcher
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
@@ -42,23 +42,67 @@ jobs:
## Inputs
All inputs are optional.
If a [toolchain file](https://rust-lang.github.io/rustup/overrides.html#the-toolchain-file) (i.e., `rust-toolchain` or `rust-toolchain.toml`) is found in the root of the repository, it takes precedence.
All input values are ignored if a toolchain file exists.
If a [toolchain file](https://rust-lang.github.io/rustup/overrides.html#the-toolchain-file) (i.e., `rust-toolchain` or `rust-toolchain.toml`) is found in the root of the repository and no `toolchain` value is provided, all items specified in the toolchain file will be installed.
If a `toolchain` value is provided, the toolchain file will be ignored.
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 |
| 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
### RUSTFLAGS
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`.
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.
You can read more rustflags, and their load order, in the [Cargo reference].
## Outputs
| Name | Description |
| ---------------- | ----------------------------------------- |
| `rustc-version` | Version as reported by `rustc --version` |
| `cargo-version` | Version as reported by `cargo --version` |
| `rustup-version` | Version as reported by `rustup --version` |
| Name | Description |
| ---------------- | ------------------------------------------- |
| `rustc-version` | Version as reported by `rustc --version` |
| `cargo-version` | Version as reported by `cargo --version` |
| `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
@@ -67,3 +111,4 @@ License].
[MIT License]: LICENSE
[Problem Matchers]: https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md
[Cargo reference]: https://doc.rust-lang.org/cargo/reference/config.html?highlight=unknown#buildrustflags

View File

@@ -13,9 +13,8 @@ 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
default: "stable"
target:
description: "Target triple to install for this toolchain"
required: false
@@ -26,6 +25,53 @@ inputs:
description: "Automatically configure Rust cache"
required: false
default: "true"
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: "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
default: "true"
rustflags:
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:
@@ -52,17 +98,21 @@ runs:
shell: bash
- id: flags
run: |
: 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
env:
targets: ${{inputs.target}}
components: ${{inputs.components}}
shell: bash
run: |
: 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=${{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"
- name: Setting Environment Variables
env:
NEW_RUSTFLAGS: ${{inputs.rustflags}}
shell: bash
run: |
if [[ ! -v CARGO_INCREMENTAL ]]; then
echo "CARGO_INCREMENTAL=0" >> $GITHUB_ENV
@@ -76,8 +126,8 @@ runs:
if [[ ! -v RUST_BACKTRACE ]]; then
echo "RUST_BACKTRACE=short" >> $GITHUB_ENV
fi
if [[ ! -v RUSTFLAGS ]]; then
echo "RUSTFLAGS=-D warnings" >> $GITHUB_ENV
if [[ ( ! -v RUSTFLAGS ) && $NEW_RUSTFLAGS != "" ]]; then
echo "RUSTFLAGS=$NEW_RUSTFLAGS" >> $GITHUB_ENV
fi
# Enable faster sparse index on nightly
# The value is ignored on stable and causes no problems
@@ -85,34 +135,84 @@ runs:
if [[ ! -v CARGO_UNSTABLE_SPARSE_REGISTRY ]]; then
echo "CARGO_UNSTABLE_SPARSE_REGISTRY=true" >> $GITHUB_ENV
fi
if [[ ! -v CARGO_REGISTRIES_CRATES_IO_PROTOCOL ]]; then
echo "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" >> $GITHUB_ENV
fi
- name: Install Rust Problem Matcher
if: inputs.matcher == 'true'
shell: bash
- name: "Install Rust Problem Matcher"
run: echo "::add-matcher::${{ github.action_path }}/rust.json"
shell: bash
- name: Install rustup, if needed
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
if: runner.os != 'Windows'
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
- name: rustup toolchain install ${{inputs.toolchain}}
run: |
if [[ -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
if [[ -n $targets ]]; then
rustup target add ${targets//,/ }
fi
else
rustup toolchain install ${{inputs.toolchain}}${{steps.flags.outputs.targets}}${{steps.flags.outputs.components}} --profile minimal${{steps.flags.outputs.downgrade}} --no-self-update
rustup default ${{inputs.toolchain}}
if [[ -z "$toolchain" ]]
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
# Take the last element from the list
if [[ "$override" == "true" ]]
then
rustup override set ${toolchain//*,/ }
fi
fi
shell: bash
- name: Print installed versions
id: versions
- 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
@@ -124,22 +224,29 @@ runs:
DATE=$(rustc --version --verbose | sed -ne 's/^commit-date: \(20[0-9][0-9]\)-\([01][0-9]\)-\([0-3][0-9]\)$/\1\2\3/p')
HASH=$(rustc --version --verbose | sed -ne 's/^commit-hash: //p')
echo "cachekey=$(echo $DATE$HASH | head -c12)" >> $GITHUB_OUTPUT
shell: bash
# Copied from dtolnay/rust-toolchain and adapted
# https://github.com/dtolnay/rust-toolchain/blob/25dc93b901a87e864900a8aec6c12e9aa794c0c3/action.yml#L100-L108
- name: "Enable cargo sparse registry on stable"
- name: Downgrade registry access protocol when needed
shell: bash
run: |
# except on 1.66 and 1.67, on which it is unstable
# Not all 1.68.0-nightly versions support it either
# Not all versions support setting CARGO_REGISTRIES_CRATES_IO_PROTOCOL
# On versions 1.66, 1.67, and 1.68.0-nightly the value "sparse" is still unstable.
# https://github.com/dtolnay/rust-toolchain/pull/69#discussion_r1107268108
if [[ ! -v CARGO_REGISTRIES_CRATES_IO_PROTOCOL ]]; then
if echo "${{steps.versions.outputs.rustc-version}}" | grep --invert --quiet '^rustc \(1\.6[67]\.\|1\.68\.0-nightly\)'; then
echo "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" >> $GITHUB_ENV
fi
# If we detect an incompatible value, set it to "git" which is always supported.
if [[ "${{steps.versions.outputs.rustc-version}}" =~ ^rustc\ (1\.6[67]\.|1\.68\.0-nightly) && "${CARGO_REGISTRIES_CRATES_IO_PROTOCOL}" == "sparse" ]]; then
echo "Downgrade cargo registry protocol to git"
echo "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=git" >> $GITHUB_ENV
fi
shell: bash
- name: "Setup Rust Caching"
- 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 || 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}}

View File

@@ -5,7 +5,7 @@
"severity": "warning",
"pattern": [
{
"regexp": "^(Diff in (.+)) at line (\\d+):$",
"regexp": "^(Diff in (.+))(?: at line |:)(\\d+):$",
"message": 1,
"file": 2,
"line": 3
@@ -16,16 +16,16 @@
"owner": "clippy",
"pattern": [
{
"regexp": "^(warning|warn|error)(\\[(.*)\\])?: (.*)$",
"regexp": "^(?:\\x1b\\[[\\d;]+m)*(warning|warn|error)(?:\\x1b\\[[\\d;]+m)*(\\[(.*)\\])?(?:\\x1b\\[[\\d;]+m)*:(?:\\x1b\\[[\\d;]+m)* ([^\\x1b]*)(?:\\x1b\\[[\\d;]+m)*$",
"severity": 1,
"message": 4,
"code": 3
},
{
"regexp": "^([\\s->=]*(.*):(\\d*):(\\d*)|.*)$",
"file": 2,
"line": 3,
"column": 4
"regexp": "^(?:\\x1b\\[[\\d;]+m)*\\s*(?:\\x1b\\[[\\d;]+m)*\\s*--> (?:\\x1b\\[[\\d;]+m)*(.*):(\\d*):(\\d*)(?:\\x1b\\[[\\d;]+m)*$",
"file": 1,
"line": 2,
"column": 3
}
]
}

16
test-workspace/Cargo.lock generated Normal file
View File

@@ -0,0 +1,16 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "ci"
version = "0.1.0"
dependencies = [
"serde_as",
]
[[package]]
name = "serde_as"
version = "0.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ee4afe4c5c3b69699c4267ae42b838e911466d7ca0005046adc93ac95bb16dd"

View File

@@ -0,0 +1,9 @@
[package]
name = "ci"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
serde_as = "0.0.1"

View File

@@ -0,0 +1,3 @@
fn main() {
println!("Hello, world!");
}