Skip to content

[workflows] Rework pre-commit CI for the release branch #3

[workflows] Rework pre-commit CI for the release branch

[workflows] Rework pre-commit CI for the release branch #3

Workflow file for this run

name: "CI Tests"
permissions:
contents: read
on:
pull_request:
types:
- opened
- synchronize
- reopened
# When a PR is closed, we still start this workflow, but then skip
# all the jobs, which makes it effectively a no-op. The reason to
# do this is that it allows us to take advantage of concurrency groups
# to cancel in progress CI jobs whenever the PR is closed.
- closed
branches:
- 'release/**'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
cancel-in-progress: True
jobs:
compute-test-configs:
name: "Compute Configurations to Test"
if: >-
github.repository_owner == 'llvm' &&
github.event.action != 'closed'
runs-on: ubuntu-22.04
outputs:
projects: ${{ steps.vars.outputs.projects }}
check-targets: ${{ steps.vars.outputs.check-targets }}
test-build: ${{ steps.vars.outputs.check-targets != '' }}
test-platforms: ${{ steps.platforms.outputs.result }}
steps:
- name: Fetch LLVM sources
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Compute projects to test
id: vars
uses: ./.github/workflows/compute-projects-to-test
- name: Compute platforms to test
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea #v7.0.1
id: platforms
with:
script: |
linuxConfig = {
name: "linux-x86_64",
runs_on: "ubuntu-22.04"
}
windowsConfig = {
name: "windows-x86_64",
runs_on: "windows-2022"
}
macConfig = {
name: "macos-x86_64",
runs_on: "macos-13"
}
macArmConfig = {
name: "macos-aarch64",
runs_on: "macos-14"
}
configs = []
const base_ref = process.env.GITHUB_BASE_REF;
if (base_ref.startsWith('release/')) {
// This is a pull request against a release branch.
configs.push(macConfig)
configs.push(macArmConfig)
}
return configs;
ci-build-test:
# If this job name is changed, then we need to update the job-name
# paramater for the timeout-save step below.
name: "Build"
needs:
- compute-test-configs
permissions:
actions: write #pr-sccache-save may delete artifacts.
runs-on: ${{ matrix.runs_on }}
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.compute-test-configs.outputs.test-platforms) }}
if: needs.compute-test-configs.outputs.test-build == 'true'
steps:
- name: Fetch LLVM sources
uses: actions/checkout@v4
- name: Timeout Restore
id: timeout
uses: ./.github/workflows/timeout-restore
with:
artifact-name-suffix: ${{ matrix.name }}
- name: Setup Windows
uses: llvm/actions/setup-windows@main
if: ${{ runner.os == 'Windows' }}
with:
arch: amd64
- name: Install Ninja
uses: llvm/actions/install-ninja@main
- name: Setup sccache
uses: hendrikmuhs/ccache-action@v1
with:
max-size: 2G
variant: sccache
key: ci-${{ matrix.name }}
- name: Restore sccache from previous PR run
uses: ./.github/workflows/pr-sccache-restore
with:
artifact-name-suffix: ${{ matrix.name }}
- name: Configure
if: ${{ steps.timeout.outputs.exists != 'true' }}
shell: bash
run: |
cmake -B build -GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS="${{ needs.compute-test-configs.outputs.projects }}" \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_LIT_ARGS="-v --no-progress-bar" \
-DCMAKE_C_COMPILER_LAUNCHER=sccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache \
-S llvm
- name: Build
shell: bash
timeout-minutes: 330
run: |
ninja -C build -k 0 ${{ needs.compute-test-configs.outputs.check-targets }}
- name: Timeout Save
if: always()
uses: ./.github/workflows/timeout-save
with:
job-name: "Build (${{ matrix.name }}, ${{ matrix.runs_on }})"
artifact-name-suffix: ${{ matrix.name }}
timeout-step: "Build"
timeout-minutes: 330
- name: Save sccache for next PR run
if: always()
uses: ./.github/workflows/pr-sccache-save
with:
artifact-name-suffix: ${{ matrix.name }}