mirror of
https://github.com/actions-rust-lang/setup-rust-toolchain.git
synced 2024-12-26 17:00:34 +01:00
40e33d4912
The code snippets are written with bash newer than 2014 in mind. This works fine on Linux and Windows, but not macOS.
143 lines
5.7 KiB
YAML
143 lines
5.7 KiB
YAML
name: Setup Rust Toolchain for GitHub CI
|
|
description: |
|
|
Setup specific Rust versions with caching pre-configured.
|
|
It provides problem matchers for cargo and rustfmt issues.
|
|
|
|
branding:
|
|
icon: "play"
|
|
color: "gray-dark"
|
|
|
|
# Add option to install directly from rust-toolchain file
|
|
# Blocked on rustup support: https://github.com/rust-lang/rustup/issues/2686
|
|
#
|
|
# 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"
|
|
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"
|
|
|
|
outputs:
|
|
rustc-version:
|
|
description: "Version as reported by `rustc --version`"
|
|
value: ${{steps.versions.outputs.rustc-version}}
|
|
cargo-version:
|
|
description: "Version as reported by `cargo --version`"
|
|
value: ${{steps.versions.outputs.cargo-version}}
|
|
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:
|
|
# 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: |
|
|
brew install bash
|
|
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
|
|
# The environment variables always need to be set before the caching action
|
|
- name: "Setting Environment Variables"
|
|
run: |
|
|
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 ]]; then
|
|
echo "RUSTFLAGS=-D warnings" >> $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
|
|
shell: bash
|
|
- name: "Install Rust Problem Matcher"
|
|
run: echo "::add-matcher::${{ github.action_path }}/rust.json"
|
|
shell: bash
|
|
|
|
- name: Install rustup, if needed
|
|
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
|
|
if: runner.os != 'Windows'
|
|
shell: bash
|
|
- name: rustup toolchain install ${{inputs.toolchain}}
|
|
run: |
|
|
if [[ -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
|
|
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}}
|
|
fi
|
|
shell: bash
|
|
|
|
- name: Print installed versions
|
|
id: versions
|
|
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
|
|
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"
|
|
run: |
|
|
# except on 1.66 and 1.67, on which it is unstable
|
|
if [[ ! -v CARGO_REGISTRIES_CRATES_IO_PROTOCOL ]]; then
|
|
if echo "${{steps.versions.outputs.rustc-version}}" | not grep -q '^rustc 1\.6[67]\.'; then
|
|
echo "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" >> $GITHUB_ENV
|
|
fi
|
|
fi
|
|
shell: bash
|
|
|
|
- name: "Setup Rust Caching"
|
|
if: inputs.cache == 'true'
|
|
uses: Swatinem/rust-cache@v2
|