Skip to content

Fix CI workflow deprecated upload-artifact #30

Fix CI workflow deprecated upload-artifact

Fix CI workflow deprecated upload-artifact #30

Workflow file for this run

# ==================================================================================================
# Header
# ==================================================================================================
name: CI
on: [push, pull_request]
# ==================================================================================================
# Jobs
# ==================================================================================================
jobs:
ci:
runs-on: ${{ matrix.os }}
# ==========================================================================
# Matrix
# ==========================================================================
strategy:
fail-fast: false
# -------------------------------------------------------
# matrix
# -------------------------------------------------------
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#choosing-github-hosted-runners
matrix:
os:
- ubuntu-latest
- macos-latest
compiler:
- gcc
- llvm
# -------------------------------------------------------
# include
# -------------------------------------------------------
# Instead of a matrix where we only have some combinations that work, and others that do not,
# we just directly opt for a list of all combinations that we actually want to test.
# Easier to reason about, easier to maintain, easier to extend.
# Newer compiler versions are not available on all Ubuntu, so some are excluded.
# Older GCC versions are also not supported by older OSs any more.
# 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.
include:
# -------------------------------
# Ubuntu 22.04
# -------------------------------
# Too old
# - os: ubuntu-22.04
# compiler: gcc-7
# - os: ubuntu-22.04
# compiler: gcc-8
- os: ubuntu-22.04
compiler: gcc-9
- os: ubuntu-22.04
compiler: gcc-10
- os: ubuntu-22.04
compiler: gcc-11
- os: ubuntu-22.04
compiler: gcc-12
- os: ubuntu-22.04
compiler: gcc-13
# Setup fails
# - os: ubuntu-22.04
# compiler: gcc-14
- os: ubuntu-22.04
compiler: llvm-6
- os: ubuntu-22.04
compiler: llvm-7
- os: ubuntu-22.04
compiler: llvm-8
# Weird segfault
# - os: ubuntu-22.04
# compiler: llvm-9
- os: ubuntu-22.04
compiler: llvm-10
- os: ubuntu-22.04
compiler: llvm-11
- os: ubuntu-22.04
compiler: llvm-12
- os: ubuntu-22.04
compiler: llvm-13
- os: ubuntu-22.04
compiler: llvm-14
- os: ubuntu-22.04
compiler: llvm-15
- os: ubuntu-22.04
compiler: llvm-16
- os: ubuntu-22.04
compiler: llvm-17
# Setup fails
# - os: ubuntu-22.04
# compiler: llvm-18
# -------------------------------
# Ubuntu 24.04
# -------------------------------
# Too old
# - os: ubuntu-24.04
# compiler: gcc-7
# - os: ubuntu-24.04
# compiler: gcc-8
- os: ubuntu-24.04
compiler: gcc-9
- os: ubuntu-24.04
compiler: gcc-10
- os: ubuntu-24.04
compiler: gcc-11
- os: ubuntu-24.04
compiler: gcc-12
- os: ubuntu-24.04
compiler: gcc-13
- os: ubuntu-24.04
compiler: gcc-14
# Setup fails
# - os: ubuntu-24.04
# compiler: llvm-6
# - os: ubuntu-24.04
# compiler: llvm-7
# - os: ubuntu-24.04
# compiler: llvm-8
# - os: ubuntu-24.04
# compiler: llvm-9
# - os: ubuntu-24.04
# compiler: llvm-10
# - os: ubuntu-24.04
# compiler: llvm-11
# - os: ubuntu-24.04
# compiler: llvm-12
# - os: ubuntu-24.04
# compiler: llvm-13
# - os: ubuntu-24.04
# compiler: llvm-14
# - os: ubuntu-24.04
# compiler: llvm-15
# - os: ubuntu-24.04
# compiler: llvm-16
# - os: ubuntu-24.04
# compiler: llvm-17
- os: ubuntu-24.04
compiler: llvm-18
# -------------------------------
# MacOS 13
# -------------------------------
# Setup fails
# - os: macos-13
# compiler: gcc-7
# - os: macos-13
# compiler: gcc-8
- os: macos-13
compiler: gcc-9
- os: macos-13
compiler: gcc-10
- os: macos-13
compiler: gcc-11
- os: macos-13
compiler: gcc-12
# Weird compiler errors
# - os: macos-13
# compiler: gcc-13
- os: macos-13
compiler: gcc-14
# Setup fails
# - os: macos-13
# compiler: llvm-6
# - os: macos-13
# compiler: llvm-7
# - os: macos-13
# compiler: llvm-8
# - os: macos-13
# compiler: llvm-9
# Weird compiler errors
# - os: macos-13
# compiler: llvm-10
# - os: macos-13
# compiler: llvm-11
# - os: macos-13
# compiler: llvm-12
- os: macos-13
compiler: llvm-13
- os: macos-13
compiler: llvm-14
- os: macos-13
compiler: llvm-15
# Setup fails
# - os: macos-13
# compiler: llvm-16
# - os: macos-13
# compiler: llvm-17
# - os: macos-13
# compiler: llvm-18
# -------------------------------
# MacOS 14
# -------------------------------
# Setup fails for all
# - os: macos-14
# compiler: gcc-7
# - os: macos-14
# compiler: gcc-8
# - os: macos-14
# compiler: gcc-9
# - os: macos-14
# compiler: gcc-10
# - os: macos-14
# compiler: gcc-11
# - os: macos-14
# compiler: gcc-12
# - os: macos-14
# compiler: gcc-13
# - os: macos-14
# compiler: gcc-14
# - os: macos-14
# compiler: llvm-6
# - os: macos-14
# compiler: llvm-7
# - os: macos-14
# compiler: llvm-8
# - os: macos-14
# compiler: llvm-9
# - os: macos-14
# compiler: llvm-10
# - os: macos-14
# compiler: llvm-11
# - os: macos-14
# compiler: llvm-12
# - os: macos-14
# compiler: llvm-13
# - os: macos-14
# compiler: llvm-14
# - os: macos-14
# compiler: llvm-15
# - os: macos-14
# compiler: llvm-16
# - os: macos-14
# compiler: llvm-17
# - os: macos-14
# compiler: llvm-18
# -------------------------------
# AppleClang
# -------------------------------
- os: macos-13
compiler: apple
- os: macos-14
compiler: apple
- os: macos-15
compiler: apple
- os: macos-latest
compiler: apple
# ==========================================================================
# Steps
# ==========================================================================
steps:
- name: Checkout
uses: actions/checkout@v4.0.0
# -------------------------------------------------------
# Setup
# -------------------------------------------------------
- name: Setup C++
# Reference: https://github.com/marketplace/actions/setup-cpp-c-c
uses: aminya/setup-cpp@v0.37.0
if: ${{ matrix.compiler != 'apple' && matrix.os != 'macos-latest' }}
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
if [[ ${{ matrix.os }} != ubuntu-24.04 ]] && [[ ${{ matrix.os }} != ubuntu-latest ]] ; then
sudo apt-get install libtinfo5
fi
- 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: |
# Deactivate OpenMP on MacOS for now. Causes way too much trouble.
export GENESIS_USE_OPENMP=ON
if [[ "${RUNNER_OS}" == "macOS" ]]; then export GENESIS_USE_OPENMP=OFF; 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
# For static builds, set the according CMake option
# Deactivated for now, as static building with OpenMP is not possible.
# Will have to wait for gappa to use the genesis ThreadPool instead.
export GAPPA_BUILD_STATIC=""
# if [[ "${{ matrix.os }}" == "ubuntu-22.04" ]] && [[ "${{ matrix.compiler }}" == "gcc-13" ]]; then
# export GAPPA_BUILD_STATIC="-DGAPPA_BUILD_STATIC=ON"
# fi
cmake -S . -B ./build -DGENESIS_USE_OPENMP=${GENESIS_USE_OPENMP} ${GAPPA_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: |
test/log
test/out
build/**/*.log
# -------------------------------------------------------
# Upload Binaries
# -------------------------------------------------------
- name: Upload Binaries
if: matrix.compiler == 'apple'
# 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/gappa
# -------------------------------------------------------
# Test
# -------------------------------------------------------
- name: Run Test
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest'
run: |
cd ./test
./run.sh
cd ..
# We need to manually compress the test result files here, as there are many files,
# and we run into https://github.com/actions/upload-artifact/issues/485
tar -czf ./test.tar.gz ./test
- name: Upload Tests
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest'
uses: actions/upload-artifact@v4
with:
name: test-${{ matrix.os }}-${{ matrix.compiler }}
path: |
# test
./test.tar.gz