Fix CI pt 8 #81
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
# ================================================================================================== | |
# Header | |
# ================================================================================================== | |
name: CI | |
on: [push, pull_request] | |
# ================================================================================================== | |
# Jobs | |
# ================================================================================================== | |
jobs: | |
# ========================================================================== | |
# CI Matrix | |
# ========================================================================== | |
ci: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
# ------------------------------------------------------- | |
# matrix | |
# ------------------------------------------------------- | |
matrix: | |
os: | |
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#choosing-github-hosted-runners | |
- ubuntu-20.04 | |
- ubuntu-22.04 | |
- macos-11 | |
- macos-12 | |
compiler: | |
- gcc-7 | |
- gcc-8 | |
- gcc-9 | |
- gcc-10 | |
- gcc-11 | |
- gcc-12 | |
- gcc-13 | |
# - llvm-5 | |
- llvm-6 | |
- llvm-7 | |
- llvm-8 | |
- llvm-9 | |
- llvm-10 | |
- llvm-11 | |
- llvm-12 | |
- llvm-13 | |
- llvm-14 | |
- llvm-15 | |
- llvm-16 | |
- llvm-17 | |
# ------------------------------------------------------- | |
# exclude | |
# ------------------------------------------------------- | |
exclude: | |
# Newer GCC versions are not available on all Ubuntu | |
- os: ubuntu-20.04 | |
compiler: gcc-12 | |
- os: ubuntu-20.04 | |
compiler: gcc-13 | |
- os: ubuntu-20.04 | |
compiler: llvm-13 | |
- os: ubuntu-20.04 | |
compiler: llvm-14 | |
- os: ubuntu-20.04 | |
compiler: llvm-15 | |
- os: ubuntu-20.04 | |
compiler: llvm-16 | |
- os: ubuntu-20.04 | |
compiler: llvm-17 | |
# Older GCC versions are not supported by Ubuntu any more | |
- os: ubuntu-22.04 | |
compiler: gcc-7 | |
- os: ubuntu-22.04 | |
compiler: gcc-8 | |
# llvm-9 causes weird segfauls on Ubuntu, which do not seem to be our fault. | |
# Need to investiage further at some point. We used setup-cpp locally to install | |
# the very same version of llvm-9, and got tons of segfauls for all kind of functions... | |
- os: ubuntu-20.04 | |
compiler: llvm-9 | |
- os: ubuntu-22.04 | |
compiler: llvm-9 | |
# Older GCC versions are also not supported by MacOS 12 any more. | |
# Also excluding a broken current one for now... Fix later! | |
- os: macos-12 | |
compiler: gcc-7 | |
- os: macos-12 | |
compiler: gcc-8 | |
- os: macos-12 | |
compiler: gcc-13 | |
# We also currently exclude clang from macos, as it fails with different types of | |
# linker errors. As this is merely a problem in the setup, we defer solving this for now. | |
# Wildcards do not work here, so we have to list them all... :-( | |
- os: macos-11 | |
compiler: llvm-5 | |
- os: macos-11 | |
compiler: llvm-6 | |
- os: macos-11 | |
compiler: llvm-7 | |
- os: macos-11 | |
compiler: llvm-8 | |
- os: macos-11 | |
compiler: llvm-9 | |
- os: macos-11 | |
compiler: llvm-10 | |
- os: macos-11 | |
compiler: llvm-11 | |
- os: macos-11 | |
compiler: llvm-12 | |
- os: macos-11 | |
compiler: llvm-13 | |
- os: macos-11 | |
compiler: llvm-14 | |
- os: macos-11 | |
compiler: llvm-16 | |
- os: macos-11 | |
compiler: llvm-17 | |
- os: macos-12 | |
compiler: llvm-5 | |
- os: macos-12 | |
compiler: llvm-6 | |
- os: macos-12 | |
compiler: llvm-7 | |
- os: macos-12 | |
compiler: llvm-8 | |
- os: macos-12 | |
compiler: llvm-9 | |
- os: macos-12 | |
compiler: llvm-10 | |
- os: macos-12 | |
compiler: llvm-11 | |
- os: macos-12 | |
compiler: llvm-12 | |
- os: macos-12 | |
compiler: llvm-13 | |
# - os: macos-12 | |
# compiler: llvm-14 | |
# - os: macos-12 | |
# compiler: llvm-15 | |
- os: macos-12 | |
compiler: llvm-16 | |
- os: macos-12 | |
compiler: llvm-17 | |
# ------------------------------------------------------- | |
# include | |
# ------------------------------------------------------- | |
include: | |
# Test with the latest of both compilers and OSs | |
- os: ubuntu-latest | |
compiler: gcc | |
- os: ubuntu-latest | |
compiler: llvm | |
# - os: macos-latest | |
# compiler: gcc | |
# - os: macos-latest | |
# compiler: llvm | |
# We test AppleClang as well, as a special case. | |
# - os: macos-10.15 | |
# compiler: apple | |
- os: macos-11 | |
compiler: apple | |
- os: macos-12 | |
compiler: apple | |
# ========================================================================== | |
# Steps | |
# ========================================================================== | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
# ------------------------------------------------------- | |
# Setup | |
# ------------------------------------------------------- | |
- name: Setup C++ | |
# Reference: https://github.com/marketplace/actions/setup-cpp-c-c | |
uses: aminya/[email protected] | |
if: matrix.compiler != 'apple' | |
with: | |
compiler: ${{ matrix.compiler }} | |
cmake: true | |
make: true | |
- name: Setup C++ - AppleClang | |
if: matrix.compiler == 'apple' | |
run: | | |
brew install cmake | |
# ------------------------------------------------------- | |
# Dependencies | |
# ------------------------------------------------------- | |
- name: Install Dependencies - Ubuntu | |
if: runner.os == 'linux' | |
# 1: htslib dependencies, see https://github.com/samtools/htslib/blob/develop/INSTALL | |
# 2: clang on ubuntu 22 is not properly set up, we need libtinfo5, | |
# see https://github.com/aminya/setup-cpp/issues/149 | |
run: | | |
sudo apt-get install autoconf automake zlib1g-dev libbz2-dev liblzma-dev | |
sudo apt-get install libtinfo5 | |
- name: Install Dependencies - MacOS | |
if: runner.os == 'macos' | |
# - Install simple dependencies of htslib | |
# - For our test script, we might need gdate, see https://apple.stackexchange.com/a/47181 | |
# This is not used at the moment, but we keep it here for the future. | |
# - switch xcode mode, see https://stackoverflow.com/a/67654877 | |
run: | | |
brew install autoconf automake libdeflate | |
brew install coreutils | |
if [[ "${{ matrix.compiler }}" == gcc* ]]; then | |
echo "Patching xcode gcc issues" | |
sudo xcode-select --switch /Library/Developer/CommandLineTools | |
fi | |
# ------------------------------------------------------- | |
# Configure | |
# ------------------------------------------------------- | |
- name: Configure | |
run: | | |
# Need to set the xcode patch here as well, as job steps don't keep status. | |
if [[ "${RUNNER_OS}" == "macOS" ]] && [[ "${{ matrix.compiler }}" == gcc* ]]; then | |
echo "Patching xcode gcc issues" | |
sudo xcode-select --switch /Library/Developer/CommandLineTools | |
fi | |
# For static builds, set the according CMake option | |
export GRENEDALF_BUILD_STATIC="" | |
if [[ "${{ matrix.os }}" == "ubuntu-22.04" ]] && [[ "${{ matrix.compiler }}" == "gcc-13" ]]; then | |
export GRENEDALF_BUILD_STATIC="-DGRENEDALF_BUILD_STATIC=ON" | |
fi | |
cmake -S . -B ./build ${GRENEDALF_BUILD_STATIC} | |
# ------------------------------------------------------- | |
# Build | |
# ------------------------------------------------------- | |
- name: Build | |
run: | | |
# Weird workarounds. On some CI builds, this is needed somehow for LLVM under Ubuntu. | |
if [[ "${RUNNER_OS}" != "macOS" ]] && [[ ! -f /usr/bin/gmake ]]; then | |
sudo ln -s /usr/bin/make /usr/bin/gmake | |
fi | |
# Need to set the xcode patch here as well, as job steps don't keep status. | |
if [[ "${RUNNER_OS}" == "macOS" ]] && [[ "${{ matrix.compiler }}" == gcc* ]]; then | |
echo "Patching xcode gcc issues" | |
sudo xcode-select --switch /Library/Developer/CommandLineTools | |
fi | |
cmake --build ./build -- -j 2 | |
- name: Upload Logs | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: logs-${{ matrix.os }}-${{ matrix.compiler }} | |
path: | | |
build/**/*.log | |
# ------------------------------------------------------- | |
# Upload Binaries | |
# ------------------------------------------------------- | |
# We upload the static binaries for the most important systems. | |
# These are the ones that we want to publish with release versions. | |
- name: Upload Binaries | |
if: ( matrix.os == 'ubuntu-22.04' && matrix.compiler == 'gcc-13' ) || matrix.compiler == 'apple' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: binary-${{ matrix.os }} | |
path: | | |
bin/grenedalf | |
# ------------------------------------------------------- | |
# Test | |
# ------------------------------------------------------- | |
# For the same versions that we use for the binaries above, | |
# we also run the test case, comparing grenedalf against our independent implementation. | |
# This covers Ubuntu and two Mac versions, so hopefully good enough. | |
- name: Python Setup | |
if: ( matrix.os == 'ubuntu-22.04' && matrix.compiler == 'gcc-13' ) || matrix.compiler == 'apple' | |
uses: actions/setup-python@v2 | |
with: | |
python-version: 3.8 | |
- name: Install Test Dependencies | |
if: ( matrix.os == 'ubuntu-22.04' && matrix.compiler == 'gcc-13' ) || matrix.compiler == 'apple' | |
run: | | |
# Install the dependencies for the tests | |
pip install -r test/pip.txt | |
# Verify the installation | |
pip list | |
python --version | |
- name: Run Test | |
if: ( matrix.os == 'ubuntu-22.04' && matrix.compiler == 'gcc-13' ) || matrix.compiler == 'apple' | |
run: | | |
cd test | |
./run.sh | |
cd .. | |
- name: Upload Tests | |
if: ( matrix.os == 'ubuntu-22.04' && matrix.compiler == 'gcc-13' ) || matrix.compiler == 'apple' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-${{ matrix.os }} | |
path: | | |
test |