Fix rate-limited cloning of LLVM submodule (#569)

## Description

We started seeing rate-limit `429` errors when cloning LLVM (as seen in
e.g. [this failed
run](https://github.com/paritytech/revive/actions/runs/28924583524/job/85809154518)
and [this failed
run](https://github.com/paritytech/revive/actions/runs/28926259175/job/85821336465?pr=564)).
`llvm/llvm-project` now seems to be heavily rate-limited by GitHub.
(Authenticating the clone did not seem to have much effect.)

Even though our resolc build steps only do a treeless clone, all build
steps still did the same clone.

### Changes

* I've instead introduced a `.llvm-version` file that the `get-llvm`
action reads from, eliminating the network request all together.
* `.llvm-version` is meant to be kept in sync with the LLVM submodule
version we use. This is enforced by:
  * Introduced a `check-llvm-version.yml` workflow
* Runs once to check that the recorded version in `.llvm-version`
coincides with the version detected from the submodule.
* The submodule version detection *does* perform a network request as
before, but this is only run once now (when relevant files change),
rather than for all our resolc build jobs.
* Since the differential test jobs require checking out our
revive-differential-tests (rdt) submodule, those checkout steps cloned
not only rdt, but also LLVM. I've updated this to not clone LLVM at all.
This commit is contained in:
LJ authored and GitHub committed 2026-07-08 14:31:39 +02:00
1 parent da547e9dd9
commit 066c6d26f0
4 files changed
+87 -29

No files matched your search

+12 -26
View File
@@ -14,48 +14,34 @@ inputs:
runs:
using: "composite"
steps:
- name: detect llvm version from submodule
id: detect-version
- name: check override version
id: override
shell: bash
env:
# To test a draft LLVM release across every CI workflow, set this to the full
# draft name (e.g. "llvm-21.1.8-revive.0f80912") and revert to "" before merging.
OVERRIDE_VERSION: ""
run: echo "version=${OVERRIDE_VERSION}" | tee -a "$GITHUB_OUTPUT"
- name: resolve llvm version
id: resolve-version
if: ${{ steps.override.outputs.version == '' }}
shell: bash
run: |
set -euo pipefail
if [ -n "${OVERRIDE_VERSION}" ]; then
echo "Using override version: ${OVERRIDE_VERSION}"
echo "version_prefix=${OVERRIDE_VERSION}" >> "$GITHUB_OUTPUT"
exit 0
fi
LLVM_SHA=$(git ls-tree HEAD llvm | awk '{print $3}')
echo "LLVM_SHA: $LLVM_SHA"
LLVM_URL=$(git config -f .gitmodules submodule.llvm.url)
echo "LLVM_URL: $LLVM_URL"
if [ -z "$LLVM_SHA" ] || [ -z "$LLVM_URL" ]; then
echo "::error::Could not resolve LLVM submodule SHA or URL from this repo." >&2
if [ ! -s .llvm-version ]; then
echo "::error file=.llvm-version::Missing or empty .llvm-version. It must contain the version matching the llvm submodule pin."
exit 1
fi
# Do a treeless clone to avoid unnecessarily fetching source files.
git clone --filter=tree:0 --no-checkout "$LLVM_URL" llvm-tmp
# Try to get the most recent tag (e.g., "llvmorg-18.1.8").
LLVM_TAG=$(git -C llvm-tmp describe --tags --abbrev=0 "$LLVM_SHA")
rm -rf llvm-tmp
# Convert "llvmorg-x.y.z" to "llvm-x.y.z".
LLVM_VERSION=$(echo "$LLVM_TAG" | sed 's/^llvmorg-/llvm-/')
echo "Detected LLVM version from submodule pin: $LLVM_VERSION"
echo "version_prefix=$LLVM_VERSION" >> "$GITHUB_OUTPUT"
echo "version_prefix=$(cat .llvm-version)" | tee -a "$GITHUB_OUTPUT"
- name: find asset
id: find
uses: actions/github-script@v7
env:
target: ${{ inputs.target }}
version_prefix: ${{ steps.detect-version.outputs.version_prefix }}
version_prefix: ${{ steps.override.outputs.version || steps.resolve-version.outputs.version_prefix }}
with:
result-encoding: string
script: |