@@ -7,23 +7,56 @@ name: "Download LLVM"
77inputs :
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
1115runs :
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