mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-21 14:35:27 -04:00
Some checks failed
Tests and Coverage / filter-changes (push) Has been cancelled
dockerhub-publish-develop / main (push) Has been cancelled
dockerhub-publish-develop-dagmc-libmesh / main (push) Has been cancelled
dockerhub-publish-develop-dagmc / main (push) Has been cancelled
dockerhub-publish-develop-libmesh / main (push) Has been cancelled
Tests and Coverage / Python 3.13 (omp=n, mpi=n, dagmc=, libmesh=, event= (push) Has been cancelled
Tests and Coverage / Python 3.14 (omp=n, mpi=n, dagmc=, libmesh=, event= (push) Has been cancelled
Tests and Coverage / Python 3.14t (omp=n, mpi=n, dagmc=, libmesh=, event= (push) Has been cancelled
Tests and Coverage / Python 3.12 (omp=n, mpi=n, dagmc=n, libmesh=n, event=n (push) Has been cancelled
Tests and Coverage / Python 3.12 (omp=y, mpi=n, dagmc=n, libmesh=n, event=n (push) Has been cancelled
Tests and Coverage / Python 3.12 (omp=n, mpi=y, dagmc=n, libmesh=n, event=n (push) Has been cancelled
Tests and Coverage / Python 3.12 (omp=y, mpi=y, dagmc=n, libmesh=n, event=n (push) Has been cancelled
Tests and Coverage / Python 3.12 (omp=y, mpi=n, dagmc=, libmesh=y, event= (push) Has been cancelled
Tests and Coverage / Python 3.12 (omp=y, mpi=n, dagmc=, libmesh=, event=y (push) Has been cancelled
Tests and Coverage / Python 3.12 (omp=y, mpi=y, dagmc=y, libmesh=, event= (push) Has been cancelled
Tests and Coverage / Python 3.12 (omp=y, mpi=y, dagmc=, libmesh=y, event= (push) Has been cancelled
Tests and Coverage / coverage (push) Has been cancelled
Tests and Coverage / Check CI status (push) Has been cancelled
248 lines
7.6 KiB
YAML
248 lines
7.6 KiB
YAML
name: Tests and Coverage
|
|
|
|
on:
|
|
# allows us to run workflows manually
|
|
workflow_dispatch:
|
|
|
|
pull_request:
|
|
branches:
|
|
- develop
|
|
- master
|
|
push:
|
|
branches:
|
|
- develop
|
|
- master
|
|
|
|
env:
|
|
MPI_DIR: /usr
|
|
HDF5_ROOT: /usr
|
|
OMP_NUM_THREADS: 2
|
|
COVERALLS_PARALLEL: true
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
jobs:
|
|
filter-changes:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
source_changed: ${{ steps.filter.outputs.source_changed }}
|
|
steps:
|
|
- name: Check out the repository
|
|
uses: actions/checkout@v6
|
|
- name: Examine changed files
|
|
id: filter
|
|
uses: dorny/paths-filter@v4
|
|
with:
|
|
filters: |
|
|
source_changed:
|
|
- '!docs/**'
|
|
- '!**/*.md'
|
|
predicate-quantifier: 'every'
|
|
main:
|
|
needs: filter-changes
|
|
if: ${{ needs.filter-changes.outputs.source_changed == 'true' }}
|
|
runs-on: ubuntu-22.04
|
|
strategy:
|
|
matrix:
|
|
python-version: ["3.12"]
|
|
mpi: [n, y]
|
|
omp: [n, y]
|
|
dagmc: [n]
|
|
libmesh: [n]
|
|
event: [n]
|
|
|
|
include:
|
|
- python-version: "3.13"
|
|
omp: n
|
|
mpi: n
|
|
- python-version: "3.14"
|
|
omp: n
|
|
mpi: n
|
|
- python-version: "3.14t"
|
|
omp: n
|
|
mpi: n
|
|
- dagmc: y
|
|
python-version: "3.12"
|
|
mpi: y
|
|
omp: y
|
|
- libmesh: y
|
|
python-version: "3.12"
|
|
mpi: y
|
|
omp: y
|
|
- libmesh: y
|
|
python-version: "3.12"
|
|
mpi: n
|
|
omp: y
|
|
- event: y
|
|
python-version: "3.12"
|
|
omp: y
|
|
mpi: n
|
|
name: "Python ${{ matrix.python-version }} (omp=${{ matrix.omp }},
|
|
mpi=${{ matrix.mpi }}, dagmc=${{ matrix.dagmc }},
|
|
libmesh=${{ matrix.libmesh }}, event=${{ matrix.event }}"
|
|
|
|
env:
|
|
MPI: ${{ matrix.mpi }}
|
|
PHDF5: ${{ matrix.mpi }}
|
|
OMP: ${{ matrix.omp }}
|
|
DAGMC: ${{ matrix.dagmc }}
|
|
EVENT: ${{ matrix.event }}
|
|
LIBMESH: ${{ matrix.libmesh }}
|
|
NPY_DISABLE_CPU_FEATURES: "AVX512F AVX512_SKX"
|
|
OPENBLAS_NUM_THREADS: 1
|
|
PYTEST_ADDOPTS: --cov=openmc --cov-report=lcov:coverage-python.lcov
|
|
# libfabric complains about fork() as a result of using Python multiprocessing.
|
|
# We can work around it with RDMAV_FORK_SAFE=1 in libfabric < 1.13 and with
|
|
# FI_EFA_FORK_SAFE=1 in more recent versions.
|
|
RDMAV_FORK_SAFE: 1
|
|
|
|
steps:
|
|
- name: Setup cmake
|
|
uses: jwlawson/actions-setup-cmake@v2
|
|
with:
|
|
cmake-version: '3.31'
|
|
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Set up Python ${{ matrix.python-version }}
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- name: Environment Variables
|
|
run: |
|
|
echo "OPENMC_CROSS_SECTIONS=$HOME/nndc_hdf5/cross_sections.xml" >> $GITHUB_ENV
|
|
echo "OPENMC_ENDF_DATA=$HOME/endf-b-vii.1" >> $GITHUB_ENV
|
|
# get the sha of the last branch commit
|
|
# for push and workflow_dispatch events, use the current reference head
|
|
BRANCH_SHA=HEAD
|
|
# for a pull_request event, use the last reference of the parents of the merge commit
|
|
if [ "${{ github.event_name }}" == "pull_request" ]; then
|
|
BRANCH_SHA=$(git rev-list --parents -n 1 HEAD | rev | cut -d" " -f 1 | rev)
|
|
fi
|
|
COMMIT_MESSAGE=$(git log $BRANCH_SHA -1 --pretty=%B | tr '\n' ' ')
|
|
echo ${COMMIT_MESSAGE}
|
|
echo "COMMIT_MESSAGE=${COMMIT_MESSAGE}" >> $GITHUB_ENV
|
|
|
|
- name: Apt dependencies
|
|
shell: bash
|
|
run: |
|
|
sudo apt -y update
|
|
sudo apt install -y libpng-dev \
|
|
libnetcdf-dev \
|
|
libpnetcdf-dev \
|
|
libhdf5-serial-dev \
|
|
libeigen3-dev
|
|
|
|
- name: Optional apt dependencies for MPI
|
|
shell: bash
|
|
if: ${{ matrix.mpi == 'y' }}
|
|
run: |
|
|
sudo apt install -y libhdf5-mpich-dev \
|
|
libmpich-dev
|
|
sudo update-alternatives --set mpi /usr/bin/mpicc.mpich
|
|
sudo update-alternatives --set mpirun /usr/bin/mpirun.mpich
|
|
sudo update-alternatives --set mpi-x86_64-linux-gnu /usr/include/x86_64-linux-gnu/mpich
|
|
|
|
- name: install
|
|
shell: bash
|
|
run: |
|
|
echo "$HOME/NJOY2016/build" >> $GITHUB_PATH
|
|
$GITHUB_WORKSPACE/tools/ci/gha-install.sh
|
|
|
|
- name: display-config
|
|
shell: bash
|
|
run: |
|
|
openmc -v
|
|
|
|
- name: cache-xs
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: |
|
|
~/nndc_hdf5
|
|
~/endf-b-vii.1
|
|
key: ${{ runner.os }}-build-xs-cache-${{ hashFiles(format('{0}/tools/ci/download-xs.sh', github.workspace)) }}
|
|
|
|
- name: before
|
|
shell: bash
|
|
run: $GITHUB_WORKSPACE/tools/ci/gha-before-script.sh
|
|
|
|
- name: test
|
|
shell: bash
|
|
run: |
|
|
CTEST_OUTPUT_ON_FAILURE=1 make test -C $GITHUB_WORKSPACE/build/
|
|
$GITHUB_WORKSPACE/tools/ci/gha-script.sh
|
|
|
|
- name: Setup tmate debug session
|
|
continue-on-error: true
|
|
if: ${{ failure() && contains(env.COMMIT_MESSAGE, '[gha-debug]') }}
|
|
uses: mxschmitt/action-tmate@v3
|
|
timeout-minutes: 10
|
|
|
|
- name: Generate C++ coverage (gcovr)
|
|
shell: bash
|
|
run: |
|
|
# Produce LCOV directly from gcov data in the build tree
|
|
gcovr \
|
|
--root "$GITHUB_WORKSPACE" \
|
|
--object-directory "$GITHUB_WORKSPACE/build" \
|
|
--filter "$GITHUB_WORKSPACE/src" \
|
|
--filter "$GITHUB_WORKSPACE/include" \
|
|
--exclude "$GITHUB_WORKSPACE/src/external/.*" \
|
|
--exclude "$GITHUB_WORKSPACE/src/include/openmc/external/.*" \
|
|
--gcov-ignore-errors source_not_found \
|
|
--gcov-ignore-errors output_error \
|
|
--gcov-ignore-parse-errors suspicious_hits.warn \
|
|
--merge-mode-functions=separate \
|
|
--print-summary \
|
|
--lcov -o coverage-cpp.lcov || true
|
|
|
|
- name: Merge C++ and Python coverage
|
|
shell: bash
|
|
run: |
|
|
# Merge C++ and Python LCOV into a single file for upload
|
|
cat coverage-cpp.lcov coverage-python.lcov > coverage.lcov
|
|
|
|
- name: Upload coverage to Coveralls
|
|
if: ${{ hashFiles('coverage.lcov') != '' }}
|
|
uses: coverallsapp/github-action@v2
|
|
with:
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
parallel: true
|
|
flag-name: C++ and Python
|
|
path-to-lcov: coverage.lcov
|
|
fail-on-error: false
|
|
|
|
coverage:
|
|
needs: [filter-changes, main]
|
|
if: ${{ always() }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Coveralls Finished
|
|
if: ${{ needs.filter-changes.outputs.source_changed == 'true' }}
|
|
uses: coverallsapp/github-action@v2
|
|
with:
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
parallel-finished: true
|
|
fail-on-error: false
|
|
|
|
ci-pass:
|
|
needs: [filter-changes, main, coverage]
|
|
name: Check CI status
|
|
if: ${{ always() }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Check CI status
|
|
run: |
|
|
if [[ "${{ needs.filter-changes.outputs.source_changed }}" == "false" ]]; then
|
|
echo "Documentation-only change - CI skipped successfully"
|
|
exit 0
|
|
fi
|
|
if [[ "${{ needs.main.result }}" == "success" && "${{ needs.coverage.result }}" == "success" ]]; then
|
|
echo "CI passed"
|
|
exit 0
|
|
fi
|
|
echo "CI failed"
|
|
exit 1
|