1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
name: extra
on:
# Trigger the workflow manually
workflow_dispatch: ~
jobs:
# Run 'extra' build
build-gcc:
name: build
if: ${{ !github.event.pull_request.head.repo.fork && github.event.action != 'labeled' || github.event.label.name == 'approved-for-ci' }}
strategy:
max-parallel: 8
fail-fast: false
matrix:
os:
- almalinux-9.7
- almalinux-10.1
- alpine-3.23
- debian-11.11
- debian-12.12
- debian-13.2
- fedora-37
- fedora-42
- opensuse-tumbleweed
- ubuntu-22.04
- ubuntu-24.04
preset:
- linux.gcc.all.release
- linux.clang.all.release
jobs: [ 4 ]
exclude:
- os: almalinux-9.7
preset: linux.clang.all.release
# This combination is not supported, as Clang fails to compile Chrono.hpp which does #include <boost/date_time/local_time/conversion.hpp
# and ends up with the following error:
# /usr/include/boost/mpl/aux_/integral_wrapper.hpp:73:31: error: non-type template argument is not a constant expression
runs-on: [self-hosted, Linux, platform-builder-docker-xl]
container:
image: marcosbento/lumen:${{ matrix.os }}
options: --user root
timeout-minutes: 60
steps:
- name: Display build context
run: |
echo "Working directory: ${{ github.workspace }}"
echo "Environment:"
echo "$(env)"
echo "OS info:"
echo "$(cat /etc/os-release)"
echo "CPU info:"
echo "$(cat /proc/cpuinfo)"
echo "Memory info:"
echo "$(cat /proc/meminfo)"
echo "Disk info:"
echo "$(df -h)"
- name: Checkout 'ecbuild'
uses: actions/checkout@v4
with:
repository: ecmwf/ecbuild
path: ecbuild
- name: Checkout 'ecflow'
uses: actions/checkout@v4
with:
path: ecflow
- name: Configure ecflow
run: |
cd ${RUNNER_WORKSPACE}/ecflow/ecflow
cmake --preset ${{ matrix.preset }}
- name: Build ecflow
run: |
cd ${RUNNER_WORKSPACE}/ecflow/ecflow
cmake --build --preset ${{ matrix.preset }} --jobs ${{ matrix.jobs }}
# The goal is to run all tests on all distros, but on Alpine and OpenSUSE, some tests fail due to Boost incompatibilities:
# - On Alpine, the test fails due to a crash in Boost.test.
# - On openSUSE, the test fails due to an issue in Boost.Process.
# Is seems that the bp::stdio_pipe implementation does not work as expected, leading to an exception being thrown
# when the test tries to read the output of thea subprocess, complaining that the file descriptor is not valid.
- name: Test ecflow (default)
if: ${{ matrix.os != 'alpine-3.23' && matrix.os != 'opensuse-tumbleweed' }}
run: |
cd ${RUNNER_WORKSPACE}/ecflow/ecflow
ctest --preset ${{ matrix.preset }} --output-on-failure -L nightly -j ${{ matrix.jobs }}
- name: Test ecflow (specific to Alpine)
if: ${{ matrix.os == 'alpine-3.23' }}
run: |
cd ${RUNNER_WORKSPACE}/ecflow/ecflow
ctest --preset ${{ matrix.preset }} --output-on-failure -L nightly -E s_foolproof -j ${{ matrix.jobs }}
- name: Test ecflow (specific to openSUSE)
if: ${{ matrix.os == 'opensuse-tumbleweed' }}
run: |
cd ${RUNNER_WORKSPACE}/ecflow/ecflow
ctest --preset ${{ matrix.preset }} --output-on-failure -L nightly -E 's_(udp|foolproof)' -j ${{ matrix.jobs }}
- name: Lint ecflow
if: ${{ matrix.preset == 'linux.clang.all.release' && matrix.os == 'ubuntu-24.04' && !always() }} # Disable until we have a stable build
run: |
cd ${RUNNER_WORKSPACE}/ecflow/ecflow
run-clang-tidy -j ${{ matrix.jobs }} -p ${RUNNER_WORKSPACE}/ecflow/ecflow/.deploy/build/${{ matrix.preset }} | tee clang-tidy-report.txt
- name: Archive lint report
if: ${{ matrix.preset == 'linux.clang.all.release' && matrix.os == 'ubuntu-24.04' && !always() }} # Disable until we have a stable build
uses: actions/upload-artifact@v4
with:
name: cling-tidy-report
path: ${RUNNER_WORKSPACE}/ecflow/ecflow/clang-tidy-report.txt
|