Compare commits

...

98 Commits

Author SHA1 Message Date
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
Jonas Bushart
9fa7c33ef0 Merge pull request #11 from actions-rust-lang/tweak-regex 2023-02-15 19:09:34 +01:00
Jonas Bushart
5f4f30a995 Maybe fix rustup warning
warning: Force-skipping unavailable component 'rust-std-thumbv2-none-eabi'
2023-02-15 19:06:41 +01:00
Jonas Bushart
2d7b97c05c Tweak sparse registry version regex and command not found
These issues are reported again rust-toolchain from which the code is
inspired.

https://github.com/dtolnay/rust-toolchain/issues/71

https://github.com/dtolnay/rust-toolchain/pull/69#pullrequestreview-1299712112
2023-02-15 18:49:49 +01:00
Jonas Bushart
c7c759a5c9 New version with macOS fix 2023-02-13 23:47:49 +01:00
Jonas Bushart
ba68a52e42 Merge pull request #10 from actions-rust-lang/issue-9 2023-02-13 23:43:33 +01:00
Jonas Bushart
40e33d4912 Install newer bash on macOS
The code snippets are written with bash newer than 2014 in mind. This
works fine on Linux and Windows, but not macOS.
2023-02-13 23:28:57 +01:00
Jonas Bushart
8ba1b441e5 Run CI on more platforms 2023-02-13 23:28:43 +01:00
Jonas Bushart
51b4f8316a Bump version to 1.4.0 2023-02-13 21:09:16 +01:00
Jonas Bushart
4605df10a0 Merge pull request #8 from actions-rust-lang/sparse-registry 2023-02-13 21:08:28 +01:00
Jonas Bushart
eac5ebb2ae Fix: Use acceptable crate name (lowercase) 2023-02-13 21:05:26 +01:00
Jonas Bushart
aee7133b58 Use newer nightly with "cargo add" support 2023-02-13 21:02:26 +01:00
Jonas Bushart
2ee353b897 Enable sparse registry access using the stable configuration
Exclude versions 1.66 and 1.67, which don't support stable sparse registry.
2023-02-13 21:00:11 +01:00
Jonas Bushart
045ad9ff3f Only set env vars if they are unset. 2023-02-13 20:58:51 +01:00
Jonas Bushart
dfa8744db3 Do not enable sparse registry on stable 2023-01-31 23:15:57 +01:00
Jonas Bushart
2941fbfa4a Use the correct variable to enable sparse registry access 2023-01-31 13:10:41 +01:00
Jonas Bushart
bc88fd0b3e Enable sparse registry access after stabilization
https://github.com/rust-lang/cargo/pull/11224
https://github.com/dtolnay/rust-toolchain/pull/54
2023-01-21 18:18:27 +01:00
Jonas Bushart
685abf8306 Change some missed set-output commands to GITHUB_OUTPUT 2022-10-15 15:48:55 +02:00
Jonas Bushart
b71469df8b Switch from set-output to $GITHUB_OUTPUT
https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
2022-10-13 21:01:25 +02:00
Jonas Bushart
6ccb5b2412 Merge pull request #7 from nahsi/fix-path 2022-09-15 22:20:32 +02:00
Jonas Bushart
eeb9aed65a Update Changelog 2022-09-15 22:17:16 +02:00
Anatoly Laskaris
7d2efc1a78 Fix adding CARGO_HOME to PATH 2022-09-15 11:56:37 +03:00
Jonas Bushart
aea84e9171 Merge pull request #6 from actions-rust-lang/jonasbb/issue5 2022-08-14 17:40:34 +02:00
Jonas Bushart
08010b773d Use sparse registry on nightly
Fixes #5
2022-08-14 15:09:22 +00:00
Jonas Bushart
dcf4d74c21 Update Changelog 2022-07-30 23:57:54 +02:00
Jonas Bushart
7d6ff77cf9 Merge pull request #4 from filips123/add-cache-option
Add an option to disable configuring Rust cache
2022-07-30 23:54:54 +02:00
Filip Š
3ec6dbd408 Add an option to disable configuring Rust cache 2022-07-30 20:01:50 +02:00
Jonas Bushart
137d2d5a3a Set environment variables before running rust-cache 2022-07-29 23:22:43 +02:00
Jonas Bushart
8282e10527 Show rustfmt action in example workflow
Show how the related rustfmt action can be used.
2022-07-27 20:42:53 +02:00
Jonas Bushart
2f56cd1b8a Merge pull request #2 from actions-rust-lang/support-toolchain-file
Add support for toolchain files
2022-07-21 23:33:26 +02:00
Jonas Bushart
08934cd939 Add test for toolchain file support 2022-07-21 21:31:15 +00:00
Jonas Bushart
379d2bfd83 Add support for toolchain files
A toolchain file in the repository root will always take priority.

Closes #1
2022-07-21 21:16:38 +00:00
Jonas Bushart
c17331ebbf Update changelog for v1.1.0 2022-07-19 19:03:54 +00:00
Jonas Bushart
49e54cc50a Update to newer version of caching action 2022-07-19 19:01:40 +00:00
Jonas Bushart
29a2385140 Better and more verbose version printing and cachekey version. 2022-07-19 19:00:36 +00:00
Jonas Bushart
8ba04cb6f2 Install rustup if not available, Linux only
The original code stems from this PR:
https://github.com/dtolnay/rust-toolchain/pull/8
2022-07-19 18:48:19 +00:00
Jonas Bushart
5c0654516c Create dependabot configuration for GitHub Actions 2022-07-19 20:16:04 +02:00
11 changed files with 537 additions and 59 deletions

11
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"

View File

@@ -15,11 +15,11 @@ jobs:
permissions:
contents: write
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Get version from tag
id: tag_name
run: |
echo ::set-output name=current_version::${GITHUB_REF#refs/tags/}
echo "current_version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
shell: bash
- name: Create and push tags
run: |

View File

@@ -1,31 +1,106 @@
name: CI
on:
push:
push: { branches: [main] }
pull_request:
schedule: [cron: "40 1 * * *"]
jobs:
install:
name: Rust ${{matrix.rust}}
runs-on: ubuntu-latest
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: [nightly, beta, stable]
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"
steps:
- uses: actions/checkout@v3
- uses: ./
name: Run actions-rust-lang/setup-rust-toolchain ${{matrix.rust}}
id: toolchain
- uses: actions/checkout@v4
# 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-2024-01-10"
components = [ "rustfmt", "rustc-dev" ]
targets = [ "wasm32-unknown-unknown", "thumbv7m-none-eabi" ]
profile = "minimal"
EOF
- 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 clippy
cache:
name: Cache
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- 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,183 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
* 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
* Tweak sparse registry version regex to better work with 1.68 nightly versions.
* Fix command not found issue
## [1.4.1] - 2023-02-13
### Fixed
* Fixed running on macOS #9 #10
The macOS images have an ancient version of bash, but the action relies on "newer" features than 2014.
We install bash via brew (already pre-installed) to have a new enough version.
The CI is extended to also run on Windows and macOS to catch such issues earlier in the future.
Thanks to @GeorgeHahn for reporting the issue.
## [1.4.0] - 2023-02-13
### Changed
* Only set environment variables, if they are not set before.
This allows setting environment variables before using this action and keeping their values.
* Enable stable sparse registry, except on versions 1.66 and 1.67 where this leads to errors.
## [1.3.7] - 2023-01-31
### Fixed
* Disable the stable access to the sparse registry.
Setting the value causes problem on version before stabilization, e.g., 1.67.
For example, "cargo add" fails.
## [1.3.6] - 2023-01-31
### Fixed
* The the correct environment variable to enable the sparse registry access.
The pull request originally had the wrong value, without `CARGO_` prefix.
## [1.3.5] - 2023-01-21
### Changed
* Use the newly stabilized setting to enable sparse registry access.
This speeds up access to the crate registry and is in addition to the unstable nightly env var.
<https://github.com/rust-lang/cargo/pull/11224>
## [1.3.4] - 2022-10-15
### Changed
* The last version did not fix all "set-output" commands
## [1.3.3] - 2022-10-13
### Changed
* Switch from set-output to $GITHUB_OUTPUT to avoid warning
https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
## [1.3.2] - 2022-09-15
### Fixed
* Fix setting `$CARGO_HOME` to a valid path, in case rustup is installed from the internet.
Thanks to @nahsi for providing the fix.
## [1.3.1] - 2022-08-14
### Changed
* Use the sparse-registry on nightly for faster access to the crate registry on nightly.
<https://internals.rust-lang.org/t/call-for-testing-cargo-sparse-registry/16862>
## [1.3.0] - 2022-07-30
### Added
* An option to disable configuring Rust cache.
Thanks to @filips123 for the PR.
## [1.2.1] - 2022-07-29
### Fixed
* Set environment variables before invoking the cache action.
This ensures restoring and saving are using the same cache key.
## [1.2.0] - 2022-07-21
### Added
* Prefer toolchain definitions in `rust-toolchain` or `rust-toolchain.toml` files ([Toolchain File](https://rust-lang.github.io/rustup/overrides.html#the-toolchain-file)).
Other input values are ignored if either file is found.
## [1.1.0] - 2022-07-19
### Added
* Install rustup if not available in the CI environment. (Linux only)
The code is taken from this issue: <https://github.com/dtolnay/rust-toolchain/pull/8>
* Add rustc version output suitable as a cache key.
This is based on <https://github.com/dtolnay/rust-toolchain/pull/20> and <https://github.com/dtolnay/rust-toolchain/pull/17>.
### Changed
* Update to `Swatinem/rust-cache@v2`.
## [1.0.2] - 2022-05-02
### Changed
* Enable colored cargo output.
* Print short backtraces during test failure.
## [1.0.1] - 2022-04-20
### Added

View File

@@ -21,28 +21,72 @@ jobs:
name: cargo test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- 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@v4
# Ensure rustfmt is installed and setup problem matcher
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
components: rustfmt
- name: Rustfmt Check
uses: actions-rust-lang/rustfmt@v1
```
## 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 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` | |
| 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" |
| `override` | Setup the last installed toolchain as the default via `rustup override` | true |
[`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 |
## License
@@ -51,3 +95,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,15 +13,43 @@ 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
components:
description: "Comma-separated list of components to be additionally installed"
required: false
cache:
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: "Also cache on workflow failures"
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
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"
outputs:
rustc-version:
@@ -33,46 +61,142 @@ outputs:
rustup-version:
description: "Version as reported by `rustup --version`"
value: ${{steps.versions.outputs.rustup-version}}
cachekey:
description: A short hash of the rustc version, appropriate for use as a cache key. "20220627a831"
value: ${{steps.versions.outputs.cachekey}}
runs:
using: composite
steps:
- id: flags
# The later code uses "newer" bash features, which are not available in the ancient bash 3 (from 2014) of macOS
- name: Unbork mac
if: runner.os == 'macOS'
run: |
: construct rustup command line
echo "::set-output name=targets::$(for t in ${targets//,/ }; do echo -n ' --target' $t; done)"
echo "::set-output name=components::$(for c in ${components//,/ }; do echo -n ' --component' $c; done)"
echo "::set-output name=downgrade::${{inputs.toolchain == 'nightly' && inputs.components && ' --allow-downgrade' || ''}}"
brew install bash
shell: bash
- id: flags
env:
targets: ${{inputs.target}}
components: ${{inputs.components}}
shell: bash
- name: rustup toolchain install ${{inputs.toolchain}}
run: |
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}}
shell: bash
- name: Print installed versions
id: versions
run: |
echo "::set-output name=rustc-version::$(rustc --version)"
rustc --version
echo "::set-output name=cargo-version::$(cargo --version)"
cargo --version
echo "::set-output name=rustup-version::$(rustup --version)"
rustup --version
shell: bash
: 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
- name: "Setup Rust Caching"
uses: Swatinem/rust-cache@v1
- name: "Install Rust Problem Matcher"
run: echo "::add-matcher::${{ github.action_path }}/rust.json"
# The environment variables always need to be set before the caching action
- name: Setting Environment Variables
env:
NEW_RUSTFLAGS: ${{inputs.rustflags}}
shell: bash
- name: "Setting Environment Variables"
run: |
echo "CARGO_INCREMENTAL=0" >> $GITHUB_ENV
echo "CARGO_PROFILE_DEV_DEBUG=0" >> $GITHUB_ENV
echo "CARGO_TERM_COLOR=always" >> $GITHUB_ENV
echo "RUST_BACKTRACE=short" >> $GITHUB_ENV
echo "RUSTFLAGS=-D warnings" >> $GITHUB_ENV
if [[ ! -v CARGO_INCREMENTAL ]]; then
echo "CARGO_INCREMENTAL=0" >> $GITHUB_ENV
fi
if [[ ! -v CARGO_PROFILE_DEV_DEBUG ]]; then
echo "CARGO_PROFILE_DEV_DEBUG=0" >> $GITHUB_ENV
fi
if [[ ! -v CARGO_TERM_COLOR ]]; then
echo "CARGO_TERM_COLOR=always" >> $GITHUB_ENV
fi
if [[ ! -v RUST_BACKTRACE ]]; then
echo "RUST_BACKTRACE=short" >> $GITHUB_ENV
fi
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
# https://internals.rust-lang.org/t/call-for-testing-cargo-sparse-registry/16862
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
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
fi
- name: rustup toolchain install ${{inputs.toolchain || 'stable'}}
env:
toolchain: ${{inputs.toolchain}}
targets: ${{inputs.target}}
components: ${{inputs.components}}
override: ${{inputs.override}}
shell: bash
run: |
if [[ -z "$toolchain" && ( -f "rust-toolchain" || -f "rust-toolchain.toml" ) ]]
then
# Install the toolchain as specified in the file
# 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
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
- id: versions
name: Print installed versions
shell: bash
run: |
echo "rustc-version=$(rustc --version)" >> $GITHUB_OUTPUT
rustc --version --verbose
echo "cargo-version=$(cargo --version)" >> $GITHUB_OUTPUT
cargo --version --verbose
echo "rustup-version=$(rustup --version)" >> $GITHUB_OUTPUT
rustup --version
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
- name: Downgrade registry access protocol when needed
shell: bash
run: |
# 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 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
- name: Setup Rust Caching
if: inputs.cache == 'true'
uses: Swatinem/rust-cache@v2
with:
workspaces: ${{inputs.cache-workspaces}}
cache-directories: ${{inputs.cache-directories}}
cache-on-failure: ${{inputs.cache-on-failure}}
key: ${{inputs.cache-key}}

View File

@@ -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!");
}