Compare commits

...

81 Commits
v1.6 ... main

Author SHA1 Message Date
Jonas Bushart
806aa7ddf5 Add dependabot cooldown
This limits how quickly new dependencies are considered for updates.
2025-12-24 21:24:49 +02:00
Rob Ede
b598bed351 Merge pull request #83 from actions-rust-lang/dependabot/github_actions/Swatinem/rust-cache-2.8.2 2025-12-01 09:57:48 +00:00
dependabot[bot]
e541adf990 Bump Swatinem/rust-cache from 2.8.1 to 2.8.2
Bumps [Swatinem/rust-cache](https://github.com/swatinem/rust-cache) from 2.8.1 to 2.8.2.
- [Release notes](https://github.com/swatinem/rust-cache/releases)
- [Changelog](https://github.com/Swatinem/rust-cache/blob/master/CHANGELOG.md)
- [Commits](f13886b937...779680da71)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-01 09:13:07 +00:00
Rob Ede
ca4a6432af Merge pull request #82 from actions-rust-lang/dependabot/github_actions/actions/checkout-6 2025-11-24 12:17:26 +00:00
dependabot[bot]
c103666ab0 Bump actions/checkout from 5 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [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/v5...v6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-24 07:02:51 +00:00
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
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
11 changed files with 343 additions and 76 deletions

View File

@@ -8,4 +8,6 @@ updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
interval: "weekly"
cooldown:
default-days: 7

View File

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

View File

@@ -1,66 +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@v4
- uses: actions/checkout@v6
# 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 clippy
cache:
name: Cache
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- 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,74 @@ 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

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@v4
- 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@v4
- uses: actions/checkout@v5
# Ensure rustfmt is installed and setup problem matcher
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
@@ -42,28 +42,43 @@ 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, its `toolchain` value takes precedence.
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 |
| `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
### 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`.
- 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.
@@ -79,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

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,38 @@ 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
@@ -34,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:
@@ -60,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
@@ -96,29 +138,57 @@ runs:
if [[ ! -v CARGO_REGISTRIES_CRATES_IO_PROTOCOL ]]; then
echo "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" >> $GITHUB_ENV
fi
shell: bash
env:
NEW_RUSTFLAGS: ${{inputs.rustflags}}
- name: "Install Rust Problem Matcher"
- name: Install Rust Problem Matcher
if: inputs.matcher == 'true'
run: echo "::add-matcher::${{ github.action_path }}/rust.json"
shell: bash
run: echo "::add-matcher::${{ github.action_path }}/rust.json"
- 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
@@ -126,16 +196,23 @@ runs:
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
env:
targets: ${{inputs.target}}
components: ${{inputs.components}}
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
@@ -147,9 +224,9 @@ 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
- name: "Downgrade registry access protocol when needed"
- 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.
@@ -159,8 +236,17 @@ runs:
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@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
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
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!");
}