Skip to content

Enhance default build type selection #2711

Enhance default build type selection

Enhance default build type selection #2711

Workflow file for this run

name: sc and p4est tests
# 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
&& echo SC_RELEASE=$PWD/sc/build_release >> $GITHUB_ENV
&& echo SC_SERIAL_DEBUG=$PWD/sc/build_serial_debug >> $GITHUB_ENV
&& echo SC_SERIAL_RELEASE=$PWD/sc/build_serial_release >> $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 }}
${{ env.SC_RELEASE }}
${{ env.SC_SERIAL_DEBUG }}
${{ env.SC_SERIAL_RELEASE }}
# 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 folders
run: mkdir $SC_DEBUG && mkdir $SC_RELEASE && mkdir $SC_SERIAL_DEBUG && mkdir $SC_SERIAL_RELEASE
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 }}
- name: sc debug check
run: cd $SC_DEBUG && make $MAKEFLAGS check
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}
- name: OnFailPrintLog
if: (${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}) && failure()
run: cat $SC_DEBUG/config.log
## sc release
- name: sc configure and build release
run: cd $SC_RELEASE && ../configure --enable-mpi --enable-debug --prefix=$PWD/install
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}
- name: sc build release
run: cd $SC_RELEASE && make $MAKEFLAGS && make $MAKEFLAGS install
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}
- name: sc release check
run: cd $SC_RELEASE && make $MAKEFLAGS check
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}
- name: OnFailPrintLog
if: (${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}) && failure()
run: cat $SC_RELEASE/config.log
## sc serial debug
- name: sc configure and build serial debug
run: cd $SC_SERIAL_DEBUG && ../configure --enable-debug --prefix=$PWD/install
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}
- name: sc build serial debug
run: cd $SC_SERIAL_DEBUG && make $MAKEFLAGS && make $MAKEFLAGS install
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}
- name: sc serial debug check
run: cd $SC_SERIAL_DEBUG && make $MAKEFLAGS check
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}
- name: OnFailPrintLog
if: (${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}) && failure()
run: cat $SC_SERIAL_DEBUG/config.log
## sc serial release
- name: sc configure and build serial release
run: cd $SC_SERIAL_RELEASE && ../configure --prefix=$PWD/install
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}
- name: sc build release serial
run: cd $SC_SERIAL_RELEASE && make $MAKEFLAGS && make $MAKEFLAGS install
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}
- name: sc release debug check
run: cd $SC_SERIAL_RELEASE && make $MAKEFLAGS check
if: ${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}
- name: OnFailPrintLog
if: (${{ steps.sc_cache.outputs.cache-hit != 'true' || env.SC_IGNORE_CACHE == 1 }}) && failure()
run: cat $SC_SERIAL_RELEASE/config.log
#
# P4EST
#
- name: store p4est folders in var
run: echo P4EST_DEBUG=$PWD/p4est/build_debug >> $GITHUB_ENV
&& echo P4EST_RELEASE=$PWD/p4est/build_release >> $GITHUB_ENV
&& echo P4EST_SERIAL_DEBUG=$PWD/p4est/build_serial_debug >> $GITHUB_ENV
&& echo P4EST_SERIAL_RELEASE=$PWD/p4est/build_serial_release >> $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 }}
${{ env.P4EST_RELEASE }}
${{ env.P4EST_SERIAL_DEBUG }}
${{ env.P4EST_SERIAL_RELEASE }}
# 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 folders
run: mkdir $P4EST_DEBUG && mkdir $P4EST_RELEASE && mkdir $P4EST_SERIAL_RELEASE
&& mkdir $P4EST_SERIAL_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 }}
- name: p4est debug check
run: cd $P4EST_DEBUG && make $MAKEFLAGS check
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}
- name: OnFailPrintLog
if: (${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}) && failure()
run: cat $P4EST_DEBUG/config.log
## p4est release
- name: p4est configure and build release
run: cd $P4EST_RELEASE && ../configure --enable-mpi --prefix=$PWD/install --with-sc=$SC_RELEASE/install
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}
- name: p4est build release
run: cd $P4EST_RELEASE && make $MAKEFLAGS && make $MAKEFLAGS install
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}
- name: p4est release check
run: cd $P4EST_RELEASE && make $MAKEFLAGS check
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}
- name: OnFailPrintLog
if: (${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}) && failure()
run: cat $P4EST_RELEASE/config.log
## p4est serial release
- name: p4est configure and build serial release
run: cd $P4EST_SERIAL_RELEASE && ../configure --prefix=$PWD/install --with-sc=$SC_SERIAL_RELEASE/install
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}
- name: p4est build serial release
run: cd $P4EST_SERIAL_RELEASE && make $MAKEFLAGS && make $MAKEFLAGS install
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}
- name: p4est serial release check
run: cd $P4EST_SERIAL_RELEASE && make $MAKEFLAGS check
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}
- name: OnFailPrintLog
if: (${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}) && failure()
run: cat $P4EST_SERIAL_RELEASE/config.log
- name: p4est configure and build serial debug
## p4est serial debug
run: cd $P4EST_SERIAL_DEBUG && ../configure --enable-debug --prefix=$PWD/install --with-sc=$SC_SERIAL_DEBUG/install
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}
- name: p4est build serial debug
run: cd $P4EST_SERIAL_DEBUG && make $MAKEFLAGS && make $MAKEFLAGS install
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}
- name: p4est serial debug check
run: cd $P4EST_SERIAL_DEBUG && make $MAKEFLAGS check
if: ${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}
- name: OnFailPrintLog
if: (${{ steps.p4est_cache.outputs.cache-hit != 'true' || env.P4EST_IGNORE_CACHE == 1 }}) && failure ()
run: cat $P4EST_SERIAL_DEBUG/config.log
# P4EST AND SC END