CI speedup #2638
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: t8code tests linkage parallel debug | |
# This file is part of t8code. | |
# t8code is a C library to manage a collection (a forest) of multiple | |
# connected adaptive space-trees of general element types in parallel. | |
# | |
# Copyright (C) 2015 the developers | |
# | |
# t8code is free software; you can redistribute it and/or modify | |
# it under the terms of the GNU General Public License as published by | |
# the Free Software Foundation; either version 2 of the License, or | |
# (at your option) any later version. | |
# | |
# t8code is distributed in the hope that it will be useful, | |
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
# GNU General Public License for more details. | |
# | |
# You should have received a copy of the GNU General Public License | |
# along with t8code; if not, write to the Free Software Foundation, Inc., | |
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
# | |
# This github CI script installs t8code and runs its tests for various configurations. | |
# We compile sc and p4est as thirdparty libraries and use caching to only trigger a | |
# new installation of them when their versions have changed in t8code. | |
# | |
# Note: To manually enforce sc and p4est installation, either increase the counter | |
# in the "key:" entries of the sc and p4est steps or set the variables | |
# SC_IGNORE_CACHE and P4EST_IGNORE_CACHE to 1 in the respective steps. | |
env: | |
MAKEFLAGS: "-j2 V=0" | |
on: | |
push: | |
branches: | |
- main | |
- develop | |
- feature-*CI* # for testing this script, all feature branches with "CI" in their name | |
pull_request: | |
branches: | |
- main | |
- develop | |
workflow_dispatch: # Be able to trigger this manually on github.com | |
# Run every night at 1:10 | |
schedule: | |
- cron: '10 1 * * *' | |
jobs: | |
build: | |
if: (github.event_name == 'schedule' && github.repository == 'DLR-AMR/t8code') || (github.event_name != 'schedule') | |
runs-on: ubuntu-latest | |
container: dlramr/t8code-ubuntu:t8-dependencies | |
timeout-minutes: 90 | |
steps: | |
# | |
# Setup and bootstrap | |
# | |
- uses: actions/checkout@v4 | |
with: | |
fetch-tags: true # required to get version tags | |
fetch-depth: 0 # required to get all history, especially the version tags | |
- name: install sudo | |
run: apt update && apt install sudo | |
# On the github Ubuntu 20.04, sudo is not available by default | |
# we need it, however, to update/upgrade our packages. | |
- name: Update packages | |
run: sudo apt-get update && sudo apt-get upgrade -y | |
# This step is necessary to get the newest package data | |
- name: disable ownership checks | |
run: git config --global --add safe.directory '*' | |
- name: init submodules | |
run: git submodule init | |
- name: update submodules | |
run: git submodule update | |
- name: bootstrap | |
run: ./bootstrap | |
# | |
# SC installation | |
# | |
- name: store sc folders in var | |
run: echo SC_DEBUG=$PWD/sc/build_debug >> $GITHUB_ENV | |
- name: Get sc commit hash | |
run: hash=`git rev-parse HEAD:sc` && echo sc_commit=$hash >> $GITHUB_ENV | |
- name: Check cache for previous sc installation | |
id: sc_cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
${{ env.SC_DEBUG }} | |
# You can increase the counter at the end to force a new key and hence recomputing the cache | |
key: sc-${{ env.sc_commit }}-004 | |
- name: Set ignore cache variable | |
# If this variable is set 1 | |
# (i.e. SC_IGNORE_CACHE=1) then the cache will be ignored and | |
# sc is always build. | |
# We use this mostly for debugging this CI script. | |
run: echo SC_IGNORE_CACHE=0 >> $GITHUB_ENV | |
- name: Cache info | |
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }} | |
run: echo No cache found or cache will be ignored. SC_IGNORE_CACHE=$SC_IGNORE_CACHE | |
- name: if ignore cache, delete folders | |
if: ${{ env.SC_IGNORE_CACHE == 1 }} | |
# The true at the end is to ignore errors that i.e. occur when the folders do not exist | |
run: rm -r $SC_DEBUG $SC_RELEASE $SC_SERIAL_DEBUG $SC_SERIAL_RELEASE || true | |
- name: make folder | |
run: mkdir $SC_DEBUG | |
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }} | |
- name: install sc | |
run: echo "Install sc" | |
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }} | |
## sc debug | |
- name: sc configure debug | |
run: cd $SC_DEBUG && ../configure --enable-mpi --enable-debug --prefix=$PWD/install | |
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }} | |
- name: sc build debug | |
run: cd $SC_DEBUG && make $MAKEFLAGS && make $MAKEFLAGS install | |
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }} | |
# | |
# P4EST | |
# | |
- name: store p4est folders in var | |
run: echo P4EST_DEBUG=$PWD/p4est/build_debug >> $GITHUB_ENV | |
- name: Get p4est commit hash | |
run: hash=`git rev-parse HEAD:p4est` && echo p4est_commit=$hash >> $GITHUB_ENV | |
- name: Check cache for previous p4est installation | |
id: p4est_cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
${{ env.P4EST_DEBUG }} | |
# You can increase the counter at the end to force a new key and hence recomputing the cache | |
key: p4est-${{ env.p4est_commit }}-004 | |
- name: Set ignore cache variable | |
# If this variable is set to 1 then the cache is ignored and p4est is installed regardless of cache. | |
# (set with i.e. P4EST_IGNORE_CACHE=1) | |
# We use this mostly for debugging this CI script. | |
run: echo P4EST_IGNORE_CACHE=0 >> $GITHUB_ENV | |
- name: Cache info | |
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }} | |
run: echo No cache found or cache will be ignored. P4EST_IGNORE_CACHE=$P4EST_IGNORE_CACHE | |
- name: install p4est | |
run: echo "Install p4est" | |
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }} | |
- name: if ignore cache, delete folders | |
if: ${{ env.P4EST_IGNORE_CACHE == 1 }} | |
# The true at the end is to ignore errors that i.e. occur when the folders do not exist | |
run: rm -r $P4EST_DEBUG $P4EST_RELEASE $P4EST_SERIAL_DEBUG $P4EST_SERIAL_RELEASE || true | |
- name: make folder | |
run: mkdir $P4EST_DEBUG | |
## p4est debug | |
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }} | |
- name: p4est configure debug | |
run: cd $P4EST_DEBUG && ../configure --enable-mpi --enable-debug --prefix=$PWD/install --with-sc=$SC_DEBUG/install | |
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }} | |
- name: p4est build debug | |
run: cd $P4EST_DEBUG && make $MAKEFLAGS && make $MAKEFLAGS install | |
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }} | |
# P4EST AND SC END | |
# | |
# T8CODE | |
# | |
# | |
# build config vars | |
- name: build CFLAGS and CXXFLAGS variables | |
run: echo CFLAGS_var="-Wall -pedantic -O0" >> $GITHUB_ENV | |
&& echo CXXFLAGS_var="-Wall -pedantic -O0" >> $GITHUB_ENV | |
# Note: We want to use '-Werror', but if we already provide it at the configure step | |
# we get errors in configure that we cannot remove (for example the autotools way | |
# of checking for libm results in a compiler warning). | |
# Thus, we add '-Werror' later at the make step. | |
- name: less-test-option | |
if: github.event_name == 'pull_request' | |
run: export LESS_TEST_OPTION="--enable-less-tests" | |
&& echo LESS_TEST_OPTION="$LESS_TEST_OPTION" >> $GITHUB_ENV | |
- name: build config variables | |
run: export CONFIG_OPTIONS="--without-blas ${LESS_TEST_OPTION}" | |
&& export CONFIG_DEBUG="$CONFIG_OPTIONS --enable-debug --enable-mpi --with-sc=$SC_DEBUG/install --with-p4est=$P4EST_DEBUG/install" | |
&& echo CONFIG_OPTIONS="$CONFIG_OPTIONS" >> $GITHUB_ENV | |
&& echo CONFIG_DEBUG="$CONFIG_DEBUG" >> $GITHUB_ENV | |
- name: Check vars | |
run: echo "[$CONFIG_DEBUG]" | |
# configure and test with MPI and netcdf (debug mode) | |
- name: check NetCDF | |
run: echo "Checking NetCDF with MPI in debugging mode" | |
- name: configure MPI NetCDF debug | |
run: mkdir build_netcdf && cd build_netcdf && ../configure $CONFIG_DEBUG --with-netcdf CFLAGS="$CFLAGS_var" CXXFLAGS="$CXXFLAGS_var" | |
- name: OnFailUploadLog | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: config_netcdf_debug_MPI.log | |
path: build_netcdf/config.log | |
- name: make | |
run: cd build_netcdf && make $MAKEFLAGS CFLAGS="$CFLAGS_var -Werror" CXXFLAGS="$CXXFLAGS_var -Werror" | |
- name: make install | |
run: cd build_netcdf && make install $MAKEFLAGS | |
- name: make check | |
run: cd build_netcdf && make check $MAKEFLAGS CFLAGS="$CFLAGS_var -Werror" CXXFLAGS="$CXXFLAGS_var -Werror" | |
- name: OnFailUploadLog | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-suite_netcdf.log | |
path: build_netcdf/test-suite.log | |
# configure and test with MPI and OpenCASCADE (debug mode) | |
- name: check OpenCASCADE | |
run: echo "Checking OpenCASCADE with MPI in debugging mode" | |
- name: configure MPI OpenCASCADE debug | |
run: mkdir build_cad && cd build_cad && ../configure $CONFIG_DEBUG --with-occ CFLAGS="$CFLAGS_var -I/usr/include/opencascade" CXXFLAGS="$CXXFLAGS_var -I/usr/include/opencascade" | |
- name: OnFailUploadLog | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: config_cad_debug_MPI.log | |
path: build_cad/config.log | |
- name: make | |
run: cd build_cad && make $MAKEFLAGS CFLAGS="$CFLAGS_var -Werror -I/usr/include/opencascade" CXXFLAGS="$CXXFLAGS_var -Werror -I/usr/include/opencascade" | |
- name: make install | |
run: cd build_cad && make install $MAKEFLAGS | |
- name: make check | |
run: cd build_cad && make check $MAKEFLAGS CFLAGS="$CFLAGS_var -Werror -I/usr/include/opencascade" CXXFLAGS="$CXXFLAGS_var -Werror -I/usr/include/opencascade" | |
- name: OnFailUploadLog | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-suite_cad.log | |
path: build_cad/test-suite.log | |
# configure and test with MPI and VTK (debug mode) | |
- name: check VTK | |
run: echo "Checking VTK with MPI in debugging mode" | |
- name: configure MPI VTK debug | |
run: mkdir build_vtk && cd build_vtk && ../configure $CONFIG_DEBUG --with-vtk --with-vtk_version_number=9.1 CFLAGS="$CFLAGS_var -isystem/usr/local/include/vtk-9.1" CXXFLAGS="$CXXFLAGS_var -isystem/usr/local/include/vtk-9.1" | |
- name: OnFailUploadLog | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: config_vtk_debug_MPI.log | |
path: build_vtk/config.log | |
- name: make | |
run: cd build_vtk && make $MAKEFLAGS CFLAGS="$CFLAGS_var -Werror -isystem/usr/local/include/vtk-9.1" CXXFLAGS="$CXXFLAGS_var -Werror -isystem/usr/local/include/vtk-9.1" | |
- name: make install | |
run: cd build_vtk && make install $MAKEFLAGS | |
- name: make check | |
run: cd build_vtk && make check $MAKEFLAGS CFLAGS="$CFLAGS_var -Werror -isystem/usr/local/include/vtk-9.1" CXXFLAGS="$CXXFLAGS_var -Werror -isystem/usr/local/include/vtk-9.1" | |
- name: OnFailUploadLog | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-suite_vtk.log | |
path: build_vtk/test-suite.log |