Skip to content

Commit

Permalink
Import CI tests from the release branch
Browse files Browse the repository at this point in the history
The tests still only run on pushes or pull requests for the release
branch, but having it in the main branch means we don't have to copy
the tests every time we create a new release branch.

Reviewed By: asl

Differential Revision: https://reviews.llvm.org/D129526
  • Loading branch information
tstellar committed Jul 26, 2022
1 parent 8e26c31 commit 9d05de2
Show file tree
Hide file tree
Showing 9 changed files with 650 additions and 0 deletions.
37 changes: 37 additions & 0 deletions .github/workflows/clang-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Clang Tests

on:
workflow_dispatch:
push:
ignore-forks: true
branches:
- 'release/**'
paths:
- 'clang/**'
- '.github/workflows/clang-tests.yml'
- '.github/workflows/llvm-project-tests.yml'
- '!llvm/**'
pull_request:
ignore-forks: true
branches:
- 'release/**'
paths:
- 'clang/**'
- '.github/workflows/clang-tests.yml'
- '.github/workflows/llvm-project-tests.yml'
- '!llvm/**'

concurrency:
# Skip intermediate builds: always.
# Cancel intermediate builds: only if it is a pull request build.
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

jobs:
check_clang:
if: github.repository_owner == 'llvm'
name: Test clang,lldb,libclc
uses: ./.github/workflows/llvm-project-tests.yml
with:
build_target: check-clang
projects: clang;lldb;libclc
168 changes: 168 additions & 0 deletions .github/workflows/libclang-abi-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
name: libclang ABI Tests

on:
workflow_dispatch:
push:
ignore-forks: true
branches:
- 'release/**'
paths:
- 'clang/**'
- '.github/workflows/libclang-abi-tests.yml'
pull_request:
ignore-forks: true
branches:
- 'release/**'
paths:
- 'clang/**'
- '.github/workflows/libclang-abi-tests.yml'

concurrency:
# Skip intermediate builds: always.
# Cancel intermediate builds: only if it is a pull request build.
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}


jobs:
abi-dump-setup:
if: github.repository_owner == 'llvm'
runs-on: ubuntu-latest
outputs:
BASELINE_REF: ${{ steps.vars.outputs.BASELINE_REF }}
ABI_HEADERS: ${{ steps.vars.outputs.ABI_HEADERS }}
ABI_LIBS: ${{ steps.vars.outputs.ABI_LIBS }}
BASELINE_VERSION_MAJOR: ${{ steps.vars.outputs.BASELINE_VERSION_MAJOR }}
BASELINE_VERSION_MINOR: ${{ steps.vars.outputs.BASELINE_VERSION_MINOR }}
LLVM_VERSION_MAJOR: ${{ steps.version.outputs.LLVM_VERSION_MAJOR }}
LLVM_VERSION_MINOR: ${{ steps.version.outputs.LLVM_VERSION_MINOR }}
LLVM_VERSION_PATCH: ${{ steps.version.outputs.LLVM_VERSION_PATCH }}
steps:
- name: Checkout source
uses: actions/checkout@v3
with:
fetch-depth: 250

- name: Get LLVM version
id: version
uses: llvm/actions/get-llvm-version@main

- name: Setup Variables
id: vars
run: |
minor_version=0
remote_repo='https://github.com/llvm/llvm-project'
if [ ${{ steps.version.outputs.LLVM_VERSION_MINOR }} -ne 0 -o ${{ steps.version.outputs.LLVM_VERSION_PATCH }} -eq 0 ]; then
major_version=$(( ${{ steps.version.outputs.LLVM_VERSION_MAJOR }} - 1))
baseline_ref="llvmorg-$major_version.0.0"
# If there is a minor release, we want to use that as the base line.
minor_ref=`git ls-remote --refs -t $remote_repo llvmorg-$major_version.[1-9].[0-9] | tail -n1 | grep -o 'llvmorg-.\+' || true`
if [ -n "$minor_ref" ]; then
baseline_ref=$minor_ref
else
# Check if we have a release candidate
rc_ref=`git ls-remote --refs -t $remote_repo llvmorg-$major_version.[1-9].[0-9]-rc* | tail -n1 | grep -o 'llvmorg-.\+' || true`
if [ -n "$rc_ref" ]; then
baseline_ref=$rc_ref
fi
fi
echo ::set-output name=BASELINE_VERSION_MAJOR::$major_version
echo ::set-output name=BASELINE_REF::$baseline_ref
echo ::set-output name=ABI_HEADERS::clang-c
echo ::set-output name=ABI_LIBS::libclang.so
else
echo ::set-output name=BASELINE_VERSION_MAJOR::${{ steps.version.outputs.LLVM_VERSION_MAJOR }}
echo ::set-output name=BASELINE_REF::llvmorg-${{ steps.version.outputs.LLVM_VERSION_MAJOR }}.0.0
echo ::set-output name=ABI_HEADERS::.
echo ::set-output name=ABI_LIBS::libclang.so libclang-cpp.so
fi
abi-dump:
if: github.repository_owner == 'llvm'
needs: abi-dump-setup
runs-on: ubuntu-latest
strategy:
matrix:
name:
- build-baseline
- build-latest
include:
- name: build-baseline
llvm_version_major: ${{ needs.abi-dump-setup.outputs.BASELINE_VERSION_MAJOR }}
ref: ${{ needs.abi-dump-setup.outputs.BASELINE_REF }}
repo: llvm/llvm-project
- name: build-latest
llvm_version_major: ${{ needs.abi-dump-setup.outputs.LLVM_VERSION_MAJOR }}
ref: ${{ github.sha }}
repo: ${{ github.repository }}
steps:
- name: Install Ninja
uses: llvm/actions/install-ninja@main
- name: Install abi-compliance-checker
run: |
sudo apt-get install abi-dumper autoconf pkg-config
- name: Install universal-ctags
run: |
git clone https://github.com/universal-ctags/ctags.git
cd ctags
./autogen.sh
./configure
sudo make install
- name: Download source code
uses: llvm/actions/get-llvm-project-src@main
with:
ref: ${{ matrix.ref }}
repo: ${{ matrix.repo }}
- name: Configure
run: |
mkdir install
cmake -B build -S llvm -G Ninja -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Debug -DLLVM_TARGETS_TO_BUILD="" -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_C_FLAGS_DEBUG="-g1 -Og" -DCMAKE_CXX_FLAGS_DEBUG="-g1 -Og" -DCMAKE_INSTALL_PREFIX=`pwd`/install llvm
- name: Build
run: ninja -C build/ ${{ needs.abi-dump-setup.outputs.ABI_LIBS }} install-clang-headers
- name: Dump ABI
run: |
parallel abi-dumper -lver ${{ matrix.ref }} -skip-cxx -public-headers ./install/include/${{ needs.abi-dump-setup.outputs.ABI_HEADERS }} -o {}-${{ matrix.ref }}.abi ./build/lib/{} ::: ${{ needs.abi-dump-setup.outputs.ABI_LIBS }}
# Remove symbol versioning from dumps, so we can compare across major
# versions. We don't need to do this for libclang.so since its ABI
# is stable across major releases and the symbol versions don't change.
if [ -e libclang-cpp.so-${{ matrix.ref }}.abi ]; then
sed -i 's/LLVM_[0-9]\+/LLVM_NOVERSION/' libclang-cpp.so-${{ matrix.ref }}.abi
fi
- name: Upload ABI file
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.name }}
path: "*${{ matrix.ref }}.abi"

abi-compare:
if: github.repository_owner == 'llvm'
runs-on: ubuntu-latest
needs:
- abi-dump-setup
- abi-dump
steps:
- name: Download baseline
uses: actions/download-artifact@v1
with:
name: build-baseline
- name: Download latest
uses: actions/download-artifact@v1
with:
name: build-latest

- name: Install abi-compliance-checker
run: sudo apt-get install abi-compliance-checker
- name: Compare ABI
run: |
for lib in ${{ needs.abi-dump-setup.outputs.ABI_LIBS }}; do
abi-compliance-checker -lib $lib -old build-baseline/$lib*.abi -new build-latest/$lib*.abi
done
- name: Upload ABI Comparison
if: always()
uses: actions/upload-artifact@v2
with:
name: compat-report-${{ github.sha }}
path: compat_reports/

39 changes: 39 additions & 0 deletions .github/workflows/libclc-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: libclc Tests

on:
workflow_dispatch:
push:
ignore-forks: true
branches:
- 'release/**'
paths:
- 'libclc/**'
- '.github/workflows/libclc-tests.yml'
- '.github/workflows/llvm-project-tests.yml'
- '!clang/**'
- '!llvm/**'
pull_request:
ignore-forks: true
branches:
- 'release/**'
paths:
- 'libclc/**'
- '.github/workflows/libclc-tests.yml'
- '.github/workflows/llvm-project-tests.yml'
- '!clang/**'
- '!llvm/**'

concurrency:
# Skip intermediate builds: always.
# Cancel intermediate builds: only if it is a pull request build.
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

jobs:
check_libclc:
if: github.repository_owner == 'llvm'
name: Test libclc
uses: ./.github/workflows/llvm-project-tests.yml
with:
build_target: ''
projects: clang;libclc
37 changes: 37 additions & 0 deletions .github/workflows/lld-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: LLD Tests

on:
workflow_dispatch:
push:
ignore-forks: true
branches:
- 'release/**'
paths:
- 'lld/**'
- '.github/workflows/lld-tests.yml'
- '.github/workflows/llvm-project-tests.yml'
- '!llvm/**'
pull_request:
ignore-forks: true
branches:
- 'release/**'
paths:
- 'lld/**'
- '.github/workflows/lld-tests.yml'
- '.github/workflows/llvm-project-tests.yml'
- '!llvm/**'

concurrency:
# Skip intermediate builds: always.
# Cancel intermediate builds: only if it is a pull request build.
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

jobs:
check_lld:
if: github.repository_owner == 'llvm'
name: Test lld
uses: ./.github/workflows/llvm-project-tests.yml
with:
build_target: check-lld
projects: lld
40 changes: 40 additions & 0 deletions .github/workflows/lldb-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: lldb Tests

on:
workflow_dispatch:
push:
ignore-forks: true
branches:
- 'release/**'
paths:
- 'lldb/**'
- '.github/workflows/lldb-tests.yml'
- '.github/workflows/llvm-project-tests.yml'
- '!clang/**'
- '!llvm/**'
pull_request:
ignore-forks: true
branches:
- 'release/**'
paths:
- 'lldb/**'
- '.github/workflows/lldb-tests.yml'
- '.github/workflows/llvm-project-tests.yml'
- '!clang/**'
- '!llvm/**'

concurrency:
# Skip intermediate builds: always.
# Cancel intermediate builds: only if it is a pull request build.
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}


jobs:
build_lldb:
if: github.repository_owner == 'llvm'
name: Build lldb
uses: ./.github/workflows/llvm-project-tests.yml
with:
build_target: ''
projects: clang;lldb
73 changes: 73 additions & 0 deletions .github/workflows/llvm-project-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: LLVM Project Tests

on:
workflow_dispatch:
inputs:
build_target:
required: false
projects:
required: false
workflow_call:
inputs:
build_target:
required: true
type: string

projects:
required: true
type: string

concurrency:
# Skip intermediate builds: always.
# Cancel intermediate builds: only if it is a pull request build.
# If the group name here is the same as the group name in the workflow that includes
# this one, then the action will try to wait on itself and get stuck.
group: llvm-project-${{ github.workflow }}-${{ inputs.projects}}${{ github.ref }}
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

jobs:
lit-tests:
name: Lit Tests
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
# Use windows-2019 due to:
# https://developercommunity.visualstudio.com/t/Prev-Issue---with-__assume-isnan-/1597317
- windows-2019
# We're using a specific version of macOS due to:
# https://github.com/actions/virtual-environments/issues/5900
# We need addtional testing to see if our workaround works for
# new macOS builds.
- macOS-10.15
steps:
- name: Setup Windows
if: startsWith(matrix.os, 'windows')
uses: llvm/actions/setup-windows@main
with:
arch: amd64
- name: Install Ninja
uses: llvm/actions/install-ninja@main
- uses: actions/checkout@v3
with:
fetch-depth: 250
- name: Build and Test
uses: llvm/actions/build-test-llvm-project@main
env:
# Workaround for https://github.com/actions/virtual-environments/issues/5900.
# This should be a no-op for non-mac OSes
PKG_CONFIG_PATH: /usr/local/Homebrew/Library/Homebrew/os/mac/pkgconfig//11
with:
cmake_args: '-GNinja -DLLVM_ENABLE_PROJECTS="${{ inputs.projects }}" -DCMAKE_BUILD_TYPE=Release -DLLDB_INCLUDE_TESTS=OFF'
build_target: '${{ inputs.build_target }}'

- name: Build and Test libclc
if: "!startsWith(matrix.os, 'windows') && contains(inputs.projects, 'libclc')"
run: |
# Make sure all of LLVM libraries that llvm-config needs are built.
ninja -C build
cmake -G Ninja -S libclc -B libclc-build -DLLVM_CONFIG=`pwd`/build/bin/llvm-config -DLIBCLC_TARGETS_TO_BUILD="amdgcn--;amdgcn--amdhsa;r600--;nvptx--;nvptx64--;nvptx--nvidiacl;nvptx64--nvidiacl"
ninja -C libclc-build
ninja -C libclc-build test
Loading

0 comments on commit 9d05de2

Please sign in to comment.