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
This commit is contained in:
Jonas Bushart 2023-02-21 21:02:41 +00:00
parent 9fa7c33ef0
commit f010a58728

View file

@ -85,6 +85,9 @@ runs:
if [[ ! -v CARGO_UNSTABLE_SPARSE_REGISTRY ]]; then if [[ ! -v CARGO_UNSTABLE_SPARSE_REGISTRY ]]; then
echo "CARGO_UNSTABLE_SPARSE_REGISTRY=true" >> $GITHUB_ENV echo "CARGO_UNSTABLE_SPARSE_REGISTRY=true" >> $GITHUB_ENV
fi fi
if [[ ! -v CARGO_REGISTRIES_CRATES_IO_PROTOCOL ]]; then
echo "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" >> $GITHUB_ENV
fi
shell: bash shell: bash
- name: "Install Rust Problem Matcher" - name: "Install Rust Problem Matcher"
run: echo "::add-matcher::${{ github.action_path }}/rust.json" run: echo "::add-matcher::${{ github.action_path }}/rust.json"
@ -126,17 +129,15 @@ runs:
echo "cachekey=$(echo $DATE$HASH | head -c12)" >> $GITHUB_OUTPUT echo "cachekey=$(echo $DATE$HASH | head -c12)" >> $GITHUB_OUTPUT
shell: bash shell: bash
# Copied from dtolnay/rust-toolchain and adapted - name: "Downgrade registry access protocol when needed"
# https://github.com/dtolnay/rust-toolchain/blob/25dc93b901a87e864900a8aec6c12e9aa794c0c3/action.yml#L100-L108
- name: "Enable cargo sparse registry on stable"
run: | run: |
# except on 1.66 and 1.67, on which it is unstable # Not all versions support setting CARGO_REGISTRIES_CRATES_IO_PROTOCOL
# Not all 1.68.0-nightly versions support it either # 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 # https://github.com/dtolnay/rust-toolchain/pull/69#discussion_r1107268108
if [[ ! -v CARGO_REGISTRIES_CRATES_IO_PROTOCOL ]]; then # If we detect an incompatible value, set it to "git" which is always supported.
if echo "${{steps.versions.outputs.rustc-version}}" | grep --invert --quiet '^rustc \(1\.6[67]\.\|1\.68\.0-nightly\)'; then if [[ "${{steps.versions.outputs.rustc-version}}" =~ ^rustc\ (1\.6[67]\.|1\.68\.0-nightly) && "${CARGO_REGISTRIES_CRATES_IO_PROTOCOL}" == "sparse" ]]; then
echo "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" >> $GITHUB_ENV echo "Downgrade cargo registry protocol to git"
fi echo "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=git" >> $GITHUB_ENV
fi fi
shell: bash shell: bash