mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-04-22 21:58:01 +00:00
2fb8beee62
This PR changes the CI build scripts to also build LLVM for windows. **It doesn't build `revive` itself for windows**. This will come in a follow up. But once we have a LLVM binary release the turn around time will be much quicker for experimenting with the revive windows build. I manually uploaded the release those changes produce [here](https://github.com/paritytech/revive-alex-workflowtest/releases/tag/llvm-18.1.8-revive.22f3ceb). This enables this PR's CI to find the proper release. This is necessary because I am also making changes to the folder structure and artifact naming that the other CI jobs are depending on. Releases generated from this branch can be inspected here: https://github.com/paritytech/revive-alex-workflowtest/releases/tag/v0.1.0-dev.12 Summary of changes: - Change `llvm-builder` to use MSVC toolchain on windows - Fix `llvm-builder` to work with `.exe` files - Unify the llvm release jobs into a single one. This removed a lot of copy pasted code and also speeds up the build by giving each their own runner. - Use the LLVM target triple to name the binary releases instead of an ad-hoc naming convention - Remove the nested folder hierarchy inside the llvm release. Its just now a single folder `llvm-<target>` that contains the toolchain. - Give jobs and workflows consistent names - Replace all runners bei their `*-latest` counterpart - Only use `parity-large` to build llvm now. All other jobs use github runners
71 lines
2.0 KiB
YAML
71 lines
2.0 KiB
YAML
# example:
|
|
# - uses: ./.github/actions/get-llvm
|
|
# with:
|
|
# target: x86_64-unknown-linux-gnu
|
|
|
|
name: "Download LLVM"
|
|
inputs:
|
|
target:
|
|
required: true
|
|
|
|
runs:
|
|
using: "composite"
|
|
steps:
|
|
- name: find asset
|
|
id: find
|
|
uses: actions/github-script@v7
|
|
env:
|
|
target: ${{ inputs.target }}
|
|
with:
|
|
result-encoding: string
|
|
script: |
|
|
let page = 1;
|
|
let releases = [];
|
|
|
|
let releasePrefix = "llvm-"
|
|
let target = process.env.target
|
|
|
|
do {
|
|
const res = await github.rest.repos.listReleases({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
per_page: 50,
|
|
page,
|
|
});
|
|
|
|
releases = res.data
|
|
releases.sort((a, b) => {
|
|
return (a.published_at < b.published_at) ? 1 : ((a.published_at > b.published_at) ? -1 : 0);
|
|
});
|
|
|
|
let llvmLatestRelease = releases.find(release => {
|
|
return release.tag_name.startsWith(releasePrefix);
|
|
});
|
|
if (llvmLatestRelease){
|
|
let asset = llvmLatestRelease.assets.find(asset =>{
|
|
return asset.name.includes(target);
|
|
});
|
|
if (!asset){
|
|
core.setFailed(`Artifact for '${target}' not found in release ${llvmLatestRelease.tag_name} (${llvmLatestRelease.html_url})`);
|
|
process.exit();
|
|
}
|
|
return asset.browser_download_url;
|
|
}
|
|
|
|
page++;
|
|
} while(releases.length > 0);
|
|
|
|
core.setFailed(`No LLVM releases with '${releasePrefix}' atifacts found! Please release LLVM before running this workflow.`);
|
|
process.exit();
|
|
|
|
- name: download
|
|
shell: bash
|
|
run: |
|
|
curl -sSLo llvm.tar.gz ${{ steps.find.outputs.result }}
|
|
|
|
- name: unpack
|
|
shell: bash
|
|
run: |
|
|
tar -xf llvm.tar.gz
|
|
rm llvm.tar.gz
|