Compare commits

..

39 Commits
v1.10.1 ... 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
6 changed files with 134 additions and 30 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@v4
- uses: actions/checkout@v5
- name: Get version from tag
id: tag_name
run: |

View File

@@ -32,7 +32,7 @@ jobs:
- "beta"
- "stable"
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
# Test toolchain file support
- name: Write rust-toolchain.toml
@@ -93,7 +93,7 @@ jobs:
name: Cache
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Install Rust
uses: ./

View File

@@ -7,6 +7,44 @@ 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.

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,7 +21,7 @@ jobs:
name: cargo test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- uses: actions-rust-lang/setup-rust-toolchain@v1
- run: cargo test --all-features
@@ -30,7 +30,7 @@ jobs:
name: cargo fmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
# Ensure rustfmt is installed and setup problem matcher
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
@@ -48,19 +48,25 @@ If no `toolchain` value or toolchain file is present, it will default to `stable
First, all items specified in the toolchain file are installed.
Afterward, the `components` and `target` specified via inputs are installed in addition to the items from the toolchain file.
| Name | Description | Default |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------- |
| `toolchain` | 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 |
| 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
@@ -69,10 +75,10 @@ Afterward, the `components` and `target` specified via inputs are installed in a
By default, this action sets the `RUSTFLAGS` environment variable to `-D warnings`.
However, rustflags sources are mutually exclusive, so setting this environment variable omits any configuration through `target.*.rustflags` or `build.rustflags`.
* If `RUSTFLAGS` is already set, no modifications of the variable are made and the original value remains.
* If `RUSTFLAGS` is unset and the `rustflags` input is empty (i.e., the empty string), then it will remain unset.
Use this, if you want to prevent the value from being set because you make use of `target.*.rustflags` or `build.rustflags`.
* Otherwise, the environment variable `RUSTFLAGS` is set to the content of `rustflags`.
- If `RUSTFLAGS` is already set, no modifications of the variable are made and the original value remains.
- If `RUSTFLAGS` is unset and the `rustflags` input is empty (i.e., the empty string), then it will remain unset.
Use this, if you want to prevent the value from being set because you make use of `target.*.rustflags` or `build.rustflags`.
- Otherwise, the environment variable `RUSTFLAGS` is set to the content of `rustflags`.
To prevent this from happening, set the `rustflags` input to an empty string, which will
prevent the action from setting `RUSTFLAGS` at all, keeping any existing preferences.
@@ -88,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

@@ -32,12 +32,31 @@ inputs:
description: "Additional non workspace directories to be cached, separated by newlines."
required: false
cache-on-failure:
description: "Also cache on workflow failures"
description: "Cache even if the build fails."
default: "true"
required: false
cache-key:
description: "An additional cache key that is added alongside the automatic `job`-based cache key and can be used to further differentiate jobs."
required: false
cache-shared-key:
description: "A cache key that is used instead of the automatic `job`-based key, and is stable over multiple jobs."
required: false
cache-bin:
description: "Determines whether to cache ${CARGO_HOME}/bin."
required: false
default: "true"
cache-provider:
description: "Determines which provider to use for caching. Options are github, buildjet, or warpbuild. Defaults to github."
required: false
default: "github"
cache-all-crates:
description: "Determines which crates are cached. If `true` all crates will be cached, otherwise only dependent crates will be cached."
required: false
default: "false"
cache-workspace-crates:
description: "Determines which crates are cached. If `true` all crates will be cached, otherwise only dependent crates will be cached."
required: false
default: "false"
matcher:
description: "Enable the Rust problem matcher"
required: false
@@ -50,6 +69,9 @@ inputs:
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:
@@ -123,13 +145,20 @@ runs:
run: echo "::add-matcher::${{ github.action_path }}/rust.json"
- name: Install rustup, if needed
if: runner.os != 'Windows'
shell: bash
run: |
if ! command -v rustup &> /dev/null ; then
curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused -fsSL "https://sh.rustup.rs" | sh -s -- --default-toolchain none -y
echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> $GITHUB_PATH
# Resolve the correct CARGO_HOME path depending on OS
if [[ "$RUNNER_OS" == "Windows" ]]; then
echo "${CARGO_HOME:-$USERPROFILE/.cargo}/bin" | sed 's|/|\\|g' >> $GITHUB_PATH
else
echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> $GITHUB_PATH
fi
fi
env:
RUNNER_OS: "${{ runner.os }}"
- name: rustup toolchain install ${{inputs.toolchain || 'stable'}}
env:
@@ -137,9 +166,23 @@ runs:
targets: ${{inputs.target}}
components: ${{inputs.components}}
override: ${{inputs.override}}
rust_src_dir: ${{inputs.rust-src-dir}}
shell: bash
run: |
if [[ -z "$toolchain" && ( -f "rust-toolchain" || -f "rust-toolchain.toml" ) ]]
# Check if value is set
if [[ -n "$rust_src_dir" ]]
then
# If value is set the directory must exist
if [[ -d "$rust_src_dir" ]]
then
cd "$rust_src_dir"
else
echo "'rust-src-dir' does not point to an existing directory" >&2
echo "The value of 'rust-src-dir' is: ${rust_src_dir}" >&2
exit 1
fi
fi
if [[ -z "$toolchain" && ( -f "rust-toolchain" || -f "rust-toolchain.toml") ]]
then
# Install the toolchain as specified in the file
# rustup show is the old way that implicitly installed a toolchain
@@ -168,6 +211,8 @@ runs:
- 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
@@ -194,9 +239,14 @@ runs:
- name: Setup Rust Caching
if: inputs.cache == 'true'
uses: Swatinem/rust-cache@v2
uses: Swatinem/rust-cache@f13886b937689c021905a6b90929199931d60db1 # v2.8.1
with:
workspaces: ${{inputs.cache-workspaces}}
workspaces: ${{ inputs.cache-workspaces || inputs.rust-src-dir }}
cache-directories: ${{inputs.cache-directories}}
cache-on-failure: ${{inputs.cache-on-failure}}
cache-bin: ${{inputs.cache-bin}}
cache-provider: ${{inputs.cache-provider}}
cache-all-crates: ${{inputs.cache-all-crates}}
cache-workspace-crates: ${{inputs.cache-workspace-crates}}
key: ${{inputs.cache-key}}
shared-key: ${{inputs.cache-shared-key}}