mirror of
https://github.com/actions-rust-lang/setup-rust-toolchain.git
synced 2024-12-26 00:52:17 +01:00
f010a58728
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
146 lines
6 KiB
YAML
146 lines
6 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
|
|
if [[ ! -v CARGO_REGISTRIES_CRATES_IO_PROTOCOL ]]; then
|
|
echo "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" >> $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
|
|
|
|
- name: "Downgrade registry access protocol when needed"
|
|
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
|
|
shell: bash
|
|
|
|
- name: "Setup Rust Caching"
|
|
if: inputs.cache == 'true'
|
|
uses: Swatinem/rust-cache@v2
|