GHI #20 Setup pipelines and presets #182
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.yml | |
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.yml | |
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 |