Skip to content

Commit b6a19c9

Browse files
authored
Fetch LLVM release according to branch in llvm submodule (#418)
This change is essential first step to unblock gracefully enable LLVM 21 in revive compiler as current action blindly fetched latest LLVM binary from the list of releases on our page. The change queries release version from the submodule and uses it. Next step: build LLVM 21 release binary Next next step: switch revive compile to LLVM 21 after all issues are fixed
1 parent d97d094 commit b6a19c9

File tree

1 file changed

+61
-8
lines changed

1 file changed

+61
-8
lines changed

.github/actions/get-llvm/action.yml

Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,56 @@ name: "Download LLVM"
77
inputs:
88
target:
99
required: true
10+
version:
11+
description: "LLVM release version (e.g., 'llvm-18.1.8'). If not specified, uses the latest LLVM release."
12+
required: false
13+
default: ""
1014

1115
runs:
1216
using: "composite"
1317
steps:
18+
- name: detect llvm version from submodule
19+
id: detect-version
20+
shell: bash
21+
run: |
22+
if [ -z "${{ inputs.version }}" ]; then
23+
# Extract branch from .gitmodules (e.g., "release/18.x")
24+
BRANCH=$(git config -f .gitmodules submodule.llvm.branch)
25+
if [ -n "$BRANCH" ]; then
26+
# Extract version from branch name (e.g., "18.x" from "release/18.x")
27+
VERSION_PREFIX=$(echo "$BRANCH" | sed 's|release/||' | sed 's|\.x$||')
28+
echo "Detected LLVM version prefix from submodule branch: $VERSION_PREFIX"
29+
30+
# Special case: pin LLVM 18 to specific version 18.1.8
31+
if [ "$VERSION_PREFIX" = "18" ]; then
32+
echo "Using pinned version for LLVM 18: llvm-18.1.8"
33+
echo "version_prefix=llvm-18.1.8" >> $GITHUB_OUTPUT
34+
else
35+
echo "version_prefix=llvm-$VERSION_PREFIX" >> $GITHUB_OUTPUT
36+
fi
37+
else
38+
echo "No branch found in .gitmodules, will use latest release"
39+
echo "version_prefix=" >> $GITHUB_OUTPUT
40+
fi
41+
else
42+
echo "Using explicitly provided version: ${{ inputs.version }}"
43+
echo "version_prefix=${{ inputs.version }}" >> $GITHUB_OUTPUT
44+
fi
45+
1446
- name: find asset
1547
id: find
1648
uses: actions/github-script@v7
1749
env:
1850
target: ${{ inputs.target }}
51+
version_prefix: ${{ steps.detect-version.outputs.version_prefix }}
1952
with:
2053
result-encoding: string
2154
script: |
2255
let page = 1;
2356
let releases = [];
2457
25-
let releasePrefix = "llvm-"
2658
let target = process.env.target
59+
let versionPrefix = process.env.version_prefix
2760
2861
do {
2962
const res = await github.rest.repos.listReleases({
@@ -38,15 +71,31 @@ runs:
3871
return (a.published_at < b.published_at) ? 1 : ((a.published_at > b.published_at) ? -1 : 0);
3972
});
4073
41-
let llvmLatestRelease = releases.find(release => {
42-
return release.tag_name.startsWith(releasePrefix);
43-
});
44-
if (llvmLatestRelease){
45-
let asset = llvmLatestRelease.assets.find(asset =>{
74+
let llvmRelease;
75+
if (versionPrefix) {
76+
// Search for latest release matching the version prefix
77+
llvmRelease = releases.find(release => {
78+
return release.tag_name.startsWith(versionPrefix);
79+
});
80+
if (llvmRelease) {
81+
core.info(`Found LLVM release matching prefix '${versionPrefix}': ${llvmRelease.tag_name}`);
82+
}
83+
} else {
84+
// Find latest LLVM release
85+
llvmRelease = releases.find(release => {
86+
return release.tag_name.startsWith('llvm-');
87+
});
88+
if (llvmRelease) {
89+
core.info(`Found latest LLVM version: ${llvmRelease.tag_name}`);
90+
}
91+
}
92+
93+
if (llvmRelease){
94+
let asset = llvmRelease.assets.find(asset =>{
4695
return asset.name.includes(target);
4796
});
4897
if (!asset){
49-
core.setFailed(`Artifact for '${target}' not found in release ${llvmLatestRelease.tag_name} (${llvmLatestRelease.html_url})`);
98+
core.setFailed(`Artifact for '${target}' not found in release ${llvmRelease.tag_name} (${llvmRelease.html_url})`);
5099
process.exit();
51100
}
52101
return asset.browser_download_url;
@@ -55,7 +104,11 @@ runs:
55104
page++;
56105
} while(releases.length > 0);
57106
58-
core.setFailed(`No LLVM releases with '${releasePrefix}' atifacts found! Please release LLVM before running this workflow.`);
107+
if (versionPrefix) {
108+
core.setFailed(`No LLVM releases matching prefix '${versionPrefix}' found! Please check the version.`);
109+
} else {
110+
core.setFailed(`No LLVM releases found! Please release LLVM before running this workflow.`);
111+
}
59112
process.exit();
60113
61114
- name: download

0 commit comments

Comments
 (0)