Skip to content

GHI #20 Setup pipelines and presets #188

GHI #20 Setup pipelines and presets

GHI #20 Setup pipelines and presets #188

Workflow file for this run

name: Run Tests With Warnings
on:
pull_request:
branches:
- '**'
jobs:
test-native:
runs-on: ${{ matrix.os }}-latest
env:
PATOMIC_CI_ID: ${{ matrix.architecture }}-${{ matrix.os }}-${{ matrix.compiler }}-${{ matrix.build-shared }}
strategy:
matrix:
# verbose labels make things easier to read in GitHub Actions
# platform gets converted to os, preset, compiler, architecture
platform:
- windows-gcc-x86_64
- windows-msvc-x86_32
- windows-msvc-x86_64
- macos-clang-x86_64
- linux-clang-x86_64
- linux-gcc-x86_64
# build-shared gets converted to cmake option
build-shared:
- static
- shared
# convert verbose labels to usable values (which don't appear in action name)
# also just other variables that we don't want appearing in action name
include:
# use Release for everything
- cmake-build-type: Release
# build-shared -> cmake-build-shared
- build-shared: static
cmake-build-shared: OFF
- build-shared: shared
cmake-build-shared: ON
# platform -> os, preset, compiler, architecture
- platform: windows-gcc-x86_64
os: windows
preset: patomic-ci-native-unix-gcc-warning
compiler: gcc
architecture: x86_64
- platform: windows-msvc-x86_32
os: windows
preset: patomic-ci-native-windows-msvc-warning -A Win32
compiler: msvc
architecture: x86_32
- platform: windows-msvc-x86_64
os: windows
preset: patomic-ci-native-windows-msvc-warning -A x64
compiler: msvc
architecture: x86_64
- platform: macos-clang-x86_64
os: macos
preset: patomic-ci-native-unix-clang-warning
compiler: clang
architecture: x86_64
- platform: linux-clang-x86_64
os: ubuntu
preset: patomic-ci-native-unix-clang-warning
compiler: clang
architecture: x86_64
- platform: linux-gcc-x86_64
os: ubuntu
preset: patomic-ci-native-unix-gcc-warning
compiler: gcc
architecture: x86_64
steps:
- name: Checkout patomic
uses: actions/checkout@v4
with:
path: patomic
- name: Try Using Local Action
uses: ./patomic/.github/actions/test-build-run
with:
test_type: ansi
preset: ${{ matrix.preset }}
architecture: ${{ matrix.architecture }}
triple: no
cmake_build_shared: ${{ matrix.cmake-build-shared }}
patomic_path: no
googletest_path: no
working_directory: no
xml_file: no
- name: Restore Cached GoogleTest
id: cache-googletest
uses: actions/cache@v3
with:
path: googletest/build/install
key: googletest-${{ env.PATOMIC_CI_ID }}
- name: Checkout GoogleTest
if: steps.cache-googletest.outputs.cache-hit != 'true'
uses: actions/checkout@v4
with:
repository: google/googletest
path: googletest
- name: Build and Install GoogleTest
if: steps.cache-googletest.outputs.cache-hit != 'true'
run: |
cd googletest
cp ../patomic/CMakePresets.json .
mkdir build
cd build
cmake --preset ${{ matrix.preset }} -DCMAKE_CXX_FLAGS="" -DBUILD_SHARED_LIBS=${{ matrix.cmake-build-shared }} -DCMAKE_BUILD_TYPE=${{ matrix.cmake-build-type }} -Dgtest_force_shared_crt=ON -Dgtest_hide_internal_symbols=ON ..
cmake --build . --verbose --config ${{ matrix.cmake-build-type }}
cmake --install . --config ${{ matrix.cmake-build-type }} --prefix install
- name: Build patomic
run: |
cd patomic
mkdir build
cd build
cmake --preset ${{ matrix.preset }} -DBUILD_SHARED_LIBS=${{ matrix.cmake-build-shared }} -DCMAKE_BUILD_TYPE=${{ matrix.cmake-build-type }} -DGTest_ROOT:PATH="../../googletest/build/install/lib/cmake/GTest" ..
cmake --build . --verbose --config ${{ matrix.cmake-build-type }}
- name: Test patomic
continue-on-error: true
run: |
cd patomic/build
ctest --verbose --output-junit Testing/Temporary/results.xml --build-config ${{ matrix.cmake-build-type }} .
- name: Prepare Test Results
shell: bash
run: |
mkdir upload
python3 patomic/test/improve_ctest_xml.py --input patomic/build/Testing/Temporary/results.xml --triple ${{ env.PATOMIC_CI_ID }} --output upload/${{ env.PATOMIC_CI_ID }}.xml
- name: Upload Test Results
uses: actions/upload-artifact@v3
with:
name: test-warning-results
path: upload/
test-qemu:
runs-on: ubuntu-latest
env:
PATOMIC_CI_ID: ${{ matrix.architecture }}-ubuntu-${{ matrix.compiler }}-${{ matrix.build-shared }}
PATOMIC_CI_XARCH: ${{ matrix.architecture }}
PATOMIC_CI_XTRIPLE: ${{ matrix.triple }}
# PATOMIC_CI_XCOMPILER is specified as a cache variable in the appropriate presets (since it's a constant)
PATOMIC_CI_XCOMPILER_VERSION: ${{ matrix.compiler-version }}
PATOMIC_CI_SYSROOT: ${{ matrix.sysroot }}
strategy:
matrix:
# architecture gets converted to triple
# short form here so that it doesn't take up the whole GitHub Action name
architecture:
- aarch64
- alpha
- arm
- armhf
- hppa
# fixme: m68k is supported, but ICEs clang and segfaults qemu when built with gcc (GHI #25)
# - m68k
- mips
- mips64
- mips64el
- mipsel
- ppc
- ppc64
- ppc64le
- riscv64
- s390x
# fixme: sh4 is supported (only for gcc), but segfaults qemu when built with gcc (GHI #25)
# - sh4
- sparc64
- x86_32
compiler:
- clang
- gcc
# build-shared gets converted to cmake option
build-shared:
- static
- shared
# exclude architectures unsupported by certain compilers
exclude:
- architecture: alpha
compiler: clang
- architecture: hppa
compiler: clang
# fixme: x86_32 is supported, but not sure how to make it work with clang (GHI #25)
- architecture: x86_32
compiler: clang
# fixme: riscv64 is supported, but gcc errors on a system header (GHI #25)
- architecture: riscv64
compiler: gcc
- architecture: sh4
compiler: clang
# fixme: sparc64 is supported, but segfaults qemu when built with gcc (GHI #25)
- architecture: sparc64
compiler: gcc
# convert verbose labels to usable values (which don't appear in action name)
# also just other variables that we don't want appearing in action name
include:
# common local sysroot location for everything
# don't prefix with ${HOME} because not always expanded by actions
- sysroot: '~/sysroot'
# use Release for everything
- cmake-build-type: Release
# build-shared -> cmake-build-shared
- build-shared: static
cmake-build-shared: OFF
- build-shared: shared
cmake-build-shared: ON
# toolchain versions to use
- gcc-version: 10
- llvm-version: 15
# compiler -> preset, compiler-version
- compiler: clang
preset: patomic-ci-qemu-ubuntu-clang-warning
compiler-version: 15
- compiler: gcc
preset: patomic-ci-qemu-ubuntu-gcc-warning
compiler-version: 10
# architecture -> triple
- architecture: aarch64
triple: aarch64-linux-gnu
- architecture: alpha
triple: alpha-linux-gnu
- architecture: arm
triple: arm-linux-gnueabi
- architecture: armhf
triple: arm-linux-gnueabihf
- architecture: hppa
triple: hppa-linux-gnu
# - architecture: m68k
# triple: m68k-linux-gnu
- architecture: mips
triple: mips-linux-gnu
- architecture: mips64
triple: mips64-linux-gnuabi64
- architecture: mips64el
triple: mips64el-linux-gnuabi64
- architecture: mipsel
triple: mipsel-linux-gnu
- architecture: ppc
triple: powerpc-linux-gnu
- architecture: ppc64
triple: powerpc64-linux-gnu
- architecture: ppc64le
triple: powerpc64le-linux-gnu
- architecture: riscv64
triple: riscv64-linux-gnu
- architecture: s390x
triple: s390x-linux-gnu
# - architecture: sh4
# triple: sh4-linux-gnu
- architecture: sparc64
triple: sparc64-linux-gnu
- architecture: x86_32
triple: i686-linux-gnu
steps:
- name: Install Toolchains and Qemu
run: |
sudo apt update
sudo apt install g++-${{ matrix.gcc-version }}-multilib
sudo apt install g++-${{ matrix.gcc-version }}-${{ matrix.triple }}
sudo apt install llvm-${{ matrix.llvm-version }}
sudo apt install clang-${{ matrix.llvm-version }}
sudo apt install qemu-user
# - name: Show what architectures clang-${{ matrix.llvm-version }} supports
# run: |
# clang-${{ matrix.llvm-version }} --print-targets
# - name: Display what was Installed
# run: |
# sudo apt update
# sudo apt-cache dumpavail | sudo dpkg --merge-avail -
# sudo apt install apt-file
# sudo apt install tree
# sudo apt-file update
# sudo apt-file list g++-${{ matrix.gcc-version }}-multilib
# sudo apt-file list g++-${{ matrix.gcc-version }}-${{ matrix.triple }}
# tree /usr/${{ matrix.triple }}
# tree /usr/lib/gcc-cross/${{ matrix.triple }}/${{ matrix.gcc-version}}
- name: Checkout patomic
uses: actions/checkout@v4
with:
path: patomic
- name: Try Using Local Action
uses: ./patomic/.github/actions/test-build-run
with:
test_type: ansi
preset: ${{ matrix.preset }}
architecture: ${{ matrix.architecture }}
triple: no
cmake_build_shared: ${{ matrix.cmake-build-shared }}
patomic_path: no
googletest_path: no
working_directory: no
xml_file: no
- name: Restore Cached GoogleTest and Sysroot
id: cache-googletest
uses: actions/cache@v3
with:
path: ${{ matrix.sysroot }}
# need both gcc and llvm version in case of building with clang but using gcc sysroot
key: googletest-${{ env.PATOMIC_CI_ID }}-${{ matrix.gcc-version }}-${{ matrix.llvm-version }}
- name: Set Up Sysroot
if: steps.cache-googletest.outputs.cache-hit != 'true'
# cannot use symlink or reference directory directly, will not work
run: |
cp -r /usr/${{ matrix.triple }}/ ${{ matrix.sysroot }}
- name: Checkout GoogleTest
if: steps.cache-googletest.outputs.cache-hit != 'true'
uses: actions/checkout@v4
with:
repository: google/googletest
path: googletest
- name: Build and Install GoogleTest
if: steps.cache-googletest.outputs.cache-hit != 'true'
run: |
cd googletest
cp -r ../patomic/ci/ ./
cp ../patomic/CMakePresets.json .
mkdir build
cd build
cmake --preset ${{ matrix.preset }} -DCMAKE_CXX_FLAGS="" -DBUILD_SHARED_LIBS=${{ matrix.cmake-build-shared }} -DCMAKE_BUILD_TYPE=${{ matrix.cmake-build-type }} -Dgtest_force_shared_crt=ON -Dgtest_hide_internal_symbols=ON ..
cmake --build . --verbose
cmake --install . --prefix ${{ matrix.sysroot }}
- name: Build patomic
run: |
cd patomic
mkdir build
cd build
cmake --preset ${{ matrix.preset }} -DBUILD_SHARED_LIBS=${{ matrix.cmake-build-shared }} -DCMAKE_BUILD_TYPE=${{ matrix.cmake-build-type }} -DGTest_ROOT:PATH="${{ matrix.sysroot }}/lib/cmake/GTest" ..
cmake --build . --verbose
- name: Test patomic
continue-on-error: true
run: |
cd patomic/build
ctest --verbose --output-junit Testing/Temporary/results.xml .
- name: Prepare Test Results
run: |
mkdir upload
python3 patomic/test/improve_ctest_xml.py --input patomic/build/Testing/Temporary/results.xml --triple ${{ env.PATOMIC_CI_ID }} --output upload/${{ env.PATOMIC_CI_ID }}.xml
- name: Upload Test Results
uses: actions/upload-artifact@v3
with:
name: test-warning-results
path: upload/
publish-results:
runs-on: ubuntu-latest
needs:
- test-native
- test-qemu
steps:
- name: Download Test Result Artifacts
uses: actions/download-artifact@v3
with:
name: test-warning-results
path: test-warning-results/
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
with:
action_fail: true
action_fail_on_inconclusive: true
check_name: "Tests Results: Warning"
files: test-warning-results/**/*.xml