Repository navigation
[NO REVIEW]: CI Updates #65
Workflow file for this run
This file contains hidden or 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: Smoke Test | |
| run-name: ${{ github.event_name == 'workflow_dispatch' && 'Manual:' || '' }} ${{ inputs.run_name }} | |
| on: | |
| push: | |
| paths-ignore: &paths_ignore | |
| - 'docs/**' | |
| - '**.txt' | |
| - '**.md' | |
| - 'ChangeLog' | |
| - '**/README*' | |
| - 'mpi-conduit/contrib/mpirun_h/**' | |
| - 'other/contrib/cross-configure-*' | |
| - 'other/valgrind/*.supp' | |
| pull_request: | |
| paths-ignore: *paths_ignore | |
| workflow_dispatch: | |
| inputs: | |
| run_name: | |
| description: 'Descriptive name for this run' | |
| type: string | |
| required: false | |
| configure_args: | |
| description: 'Additional configure arguments' | |
| type: string | |
| required: false | |
| test_list: | |
| description: 'Conduit tests to run (or "all")' | |
| type: string | |
| default: 'testgasnet testinternal testthreads' | |
| required: true | |
| test_nodes: | |
| description: 'Test process count' | |
| type: integer | |
| default: 4 | |
| required: true | |
| env_vars: | |
| description: 'Environment vars: k1=v1 k2=v2' | |
| type: string | |
| default: '' | |
| required: false | |
| concurrency: | |
| # De-duplicate concurrent workflow runs on the same branch/ref | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }}-${{ ( github.event_name == 'workflow_dispatch' && github.run_id ) || 'auto' }} | |
| cancel-in-progress: ${{ github.ref != 'refs/heads/main' && | |
| github.ref != 'refs/heads/stable' && | |
| github.ref != 'refs/heads/develop' }} | |
| jobs: | |
| build: | |
| name: ${{ matrix.compiler }}-${{ matrix.version }} (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| defaults: | |
| run: | |
| shell: bash --noprofile --norc -e -x -o pipefail {0} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ macos-14, macos-15, macos-15-intel, macos-26, macos-26-intel, ubuntu-24.04, ubuntu-26.04-arm ] | |
| compiler: [ gcc ] | |
| version: [ 12, 13, 14, 15, 16 ] | |
| exclude: | |
| # Homebrew removed Intel bottles for gcc@16 | |
| - os: macos-15-intel | |
| version: 16 | |
| - os: macos-26-intel | |
| version: 16 | |
| include: | |
| - os: ubuntu-24.04 | |
| conduits: &ubuntu_conduits [ mpi, ibv, ofi, ucx ] | |
| - os: ubuntu-22.04 | |
| compiler: gcc | |
| version: 12 # no package available for gcc 13+ | |
| conduits: *ubuntu_conduits | |
| # --- Apple clang coverage --- | |
| - os: macos-15 | |
| compiler: apple-clang | |
| version: 17 | |
| - os: macos-15-intel | |
| compiler: apple-clang | |
| version: 17 | |
| - os: macos-26 | |
| compiler: apple-clang | |
| version: 21 | |
| - os: macos-26-intel | |
| compiler: apple-clang | |
| version: 21 | |
| # --- LLVM clang coverage --- | |
| - os: macos-15 | |
| compiler: clang | |
| version: 23 | |
| - os: macos-26 | |
| compiler: clang | |
| version: 23 | |
| #- os: macos-15-intel | |
| # compiler: clang | |
| # version: 23 | |
| #- os: macos-26-intel | |
| # compiler: clang | |
| # version: 23 | |
| # https://hub.docker.com/r/phhargrove/llvm-flang/tags | |
| - os: ubuntu-24.04 | |
| compiler: clang | |
| version: 23 | |
| conduits: *ubuntu_conduits | |
| container: phhargrove/llvm-flang:23.1.0-latest | |
| - os: ubuntu-24.04 | |
| compiler: clang | |
| version: 22 | |
| conduits: *ubuntu_conduits | |
| container: phhargrove/llvm-flang:22.1.0-latest | |
| - os: ubuntu-24.04 | |
| compiler: clang | |
| version: 21 | |
| conduits: *ubuntu_conduits | |
| container: phhargrove/llvm-flang:21.1.0-latest | |
| - os: ubuntu-24.04 | |
| compiler: clang | |
| version: 20 | |
| conduits: *ubuntu_conduits | |
| container: phhargrove/llvm-flang:20.1.0-latest | |
| - os: ubuntu-24.04 | |
| compiler: clang | |
| version: 19 | |
| conduits: *ubuntu_conduits | |
| container: phhargrove/llvm-flang:19.1.1-latest | |
| # --- Intel coverage --- | |
| # https://hub.docker.com/r/intel/oneapi-toolkit/tags | |
| - os: ubuntu-24.04 | |
| compiler: icx | |
| version: latest | |
| container: intel/oneapi-toolkit:latest | |
| - os: ubuntu-24.04 | |
| compiler: icx | |
| version: 2026.0.0 | |
| container: intel/oneapi-toolkit:2026.0.0-devel-ubuntu24.04 | |
| # https://hub.docker.com/r/intel/oneapi-hpckit/tags | |
| - os: ubuntu-24.04 | |
| compiler: icx | |
| version: 2025.3.0 | |
| conduits: *ubuntu_conduits | |
| container: intel/oneapi-hpckit:2025.3.0-0-devel-ubuntu24.04 | |
| - os: ubuntu-24.04 | |
| compiler: icx | |
| version: 2025.2.0 | |
| conduits: *ubuntu_conduits | |
| container: intel/oneapi-hpckit:2025.2.0-0-devel-ubuntu24.04 | |
| - os: ubuntu-24.04 | |
| compiler: icx | |
| version: 2025.1.0 | |
| conduits: *ubuntu_conduits | |
| container: intel/oneapi-hpckit:2025.1.0-0-devel-ubuntu24.04 | |
| - os: ubuntu-22.04 | |
| compiler: icx | |
| version: 2025.0.0 | |
| conduits: *ubuntu_conduits | |
| container: intel/oneapi-hpckit:2025.0.0-0-devel-ubuntu22.04 | |
| container: | |
| image: ${{ matrix.container }} | |
| options: --shm-size=2gb | |
| env: | |
| COMPILER_VERSION: ${{ matrix.version }} | |
| CC: ${{ matrix.compiler == 'apple-clang' && 'clang' || matrix.compiler }} | |
| CFLAGS: ${{ matrix.cflags }} | |
| CXXFLAGS: ${{ matrix.cxxflags }} | |
| LDFLAGS: ${{ matrix.ldflags }} | |
| CONFIGURE_ARGS: --disable-mpi-compat --enable-rpath --enable-debug --enable-smp --enable-udp ${{ inputs.configure_args }} | |
| CURL_OPTIONS: --retry 10 --retry-all-errors --fail -L | |
| BREW_WARNING_FILTER: 's/^[[:punct:]]*warning[[:punct:]]*(You are using macOS)/warn: \1/i' | |
| GASNET_BACKTRACE: 1 | |
| GASNET_SPAWN_VERBOSE: 1 | |
| GASNET_VERBOSEENV: 1 | |
| GASNET_SPAWNFN: L | |
| GASNET_MASTERIP: 127.0.0.1 | |
| GASNET_TEST_TIME_SLACK: 0.1 | |
| MAKE_FLAGS: -j 4 | |
| TEST_NODES: ${{ inputs.test_nodes || 4 }} | |
| TEST_FILTER: |- | |
| ${{ case( github.event_name == 'workflow_dispatch' && inputs.test_list != 'all', | |
| format('TESTS={0}', inputs.test_list), | |
| github.event_name == 'workflow_dispatch', '_dummy_TESTS=all', | |
| 'TESTS=testgasnet testinternal testthreads' | |
| ) }} | |
| ERR_CHECK: '! grep -q -e "\bERROR" -e "Caught a signal" -e "Caught a fatal signal" -e ": command not found" -e "No such file or directory"' | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Install shell functions | |
| run: | | |
| mkdir -p ~/.bash_helpers | |
| cat << 'EOF' > ~/.bash_helpers/custom_functions.sh | |
| retry() { | |
| local retry_cnt=0 | |
| local retry_delay | |
| while ! "$@" ; do | |
| retry_cnt=$(expr $retry_cnt + 1) | |
| if [[ $retry_cnt > 5 ]] ; then exit 1 ; fi | |
| ( set +x ; | |
| echo "::warning::Command failed: <$@> Pausing before retry $retry_cnt..." ); | |
| retry_delay=$(( 5 ** retry_cnt )) | |
| if [[ $retry_delay > 600 ]] ; then retry_delay=600 ; fi | |
| sleep $retry_delay | |
| done | |
| } | |
| EOF | |
| # Register file in BASH_ENV so it automatically loads in all future steps | |
| echo "BASH_ENV=~/.bash_helpers/custom_functions.sh" >> $GITHUB_ENV | |
| - name: Install Ubuntu Native Dependencies | |
| if: ${{ contains(matrix.os, 'ubuntu') && matrix.container == '' && matrix.compiler == 'gcc' }} | |
| run: | | |
| retry sudo apt update | |
| #sudo apt list -a 'gcc-*' | |
| retry sudo apt install -y build-essential autoconf2.69 automake | |
| if [[ ${COMPILER_VERSION} -lt 15 ]] || type -p gcc-${COMPILER_VERSION} ; then | |
| retry sudo apt install -y gcc-${COMPILER_VERSION} g++-${COMPILER_VERSION} | |
| else | |
| curl $CURL_OPTIONS https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh -o install-homebrew.sh | |
| chmod +x install-homebrew.sh | |
| env CI=1 ./install-homebrew.sh | |
| HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew" | |
| retry ${HOMEBREW_PREFIX}/bin/brew install -v gcc@${COMPILER_VERSION} binutils | |
| ls -al ${HOMEBREW_PREFIX}/bin | |
| echo "PATH=${HOMEBREW_PREFIX}/bin:${PATH}" >> "$GITHUB_ENV" | |
| : Homebrew GCC@15 needs binutils 2.44+ | |
| HOMEBREW_BINUTILS=$(ls -d ${HOMEBREW_PREFIX}/Cellar/binutils/2.*/bin ) | |
| ls -al ${HOMEBREW_BINUTILS} | |
| echo "FFLAGS=$FFLAGS -B ${HOMEBREW_BINUTILS}" >> "$GITHUB_ENV" | |
| echo "CFLAGS=$CFLAGS -B ${HOMEBREW_BINUTILS}" >> "$GITHUB_ENV" | |
| echo "CXXFLAGS=$CXXFLAGS -B ${HOMEBREW_BINUTILS}" >> "$GITHUB_ENV" | |
| fi | |
| - name: Install Ubuntu Container Dependencies | |
| if: ${{ contains(matrix.os, 'ubuntu') && matrix.container != '' }} | |
| run: | | |
| retry apt update | |
| retry apt install -y build-essential autoconf2.69 automake | |
| - name: Install Ubuntu Conduit Dependencies | |
| if: ${{ contains(matrix.os, 'ubuntu') && toJSON(matrix.conduits) != '[]' }} | |
| run: | | |
| FORCE_CONDUITS="" | |
| if [[ $(whoami) == root ]] ; then | |
| SUDO= | |
| else | |
| SUDO=sudo | |
| fi | |
| if [[ ${{ contains(matrix.conduits,'ibv') }} == true ]] ; then | |
| retry $SUDO apt install -y libibverbs-dev | |
| FORCE_CONDUITS+=" --enable-ibv" | |
| fi | |
| if [[ ${{ contains(matrix.conduits,'ofi') }} == true ]] ; then | |
| retry $SUDO apt install -y libfabric-dev | |
| FORCE_CONDUITS+=" --enable-ofi" | |
| fi | |
| if [[ ${{ contains(matrix.conduits,'ucx') }} == true ]] ; then | |
| retry $SUDO apt install -y libucx-dev | |
| FORCE_CONDUITS+=" --enable-ucx" | |
| fi | |
| if [[ ${{ contains(matrix.conduits,'mpi') }} == true ]] ; then | |
| if [[ ${{ matrix.compiler }} == 'icx' ]] ; then # icx uses Intel MPI | |
| echo "MPI_CC=mpiicx" >> "$GITHUB_ENV" | |
| else | |
| retry $SUDO apt install -y libopenmpi-dev | |
| fi | |
| FORCE_CONDUITS+=" --enable-mpi --enable-mpi-compat" | |
| fi | |
| echo "CONFIGURE_ARGS=$CONFIGURE_ARGS$FORCE_CONDUITS" >> "$GITHUB_ENV" | |
| - name: Fix macOS Homebrew Configuration | |
| if: ${{ contains(matrix.os, 'macos') }} | |
| run: | | |
| # silence Homebrew tap trust warnings: | |
| (set +e ; brew untap -f aws/tap hashicorp/tap 2>&1 | perl -pe 's/^::*//;s/^##*//' ; brew trust azure/bicep ; echo ) | |
| # set some Homebrew knobs to accelerate installation | |
| # but only when we are not simulating the user environment brew-via-install workflow | |
| if [[ -z "${{ matrix.brew_via_install }}" ]] ; then | |
| echo HOMEBREW_NO_ANALYTICS=1 >> "$GITHUB_ENV" | |
| echo HOMEBREW_NO_AUTO_UPDATE=1 >> "$GITHUB_ENV" | |
| echo HOMEBREW_NO_GITHUB_API=1 >> "$GITHUB_ENV" | |
| echo HOMEBREW_NO_INSTALL_CLEANUP=1 >> "$GITHUB_ENV" | |
| fi | |
| - name: Install macOS Dependencies | |
| if: contains(matrix.os, 'macos') | |
| run: | | |
| retry brew update | |
| retry brew install automake \ | |
| 2>&1 | perl -pe "$BREW_WARNING_FILTER" ; test ${PIPESTATUS[0]} = 0 | |
| if [[ "${{ matrix.compiler }}@${{ matrix.version }}" == gcc@12 ]] ; then | |
| retry brew install gcc@12 \ | |
| 2>&1 | perl -pe "$BREW_WARNING_FILTER" ; test ${PIPESTATUS[0]} = 0 | |
| fi | |
| if [[ ${{ matrix.compiler }} == 'gcc' && ${COMPILER_VERSION} -gt 15 ]] ; then | |
| retry brew install gcc@${COMPILER_VERSION} \ | |
| 2>&1 | perl -pe "$BREW_WARNING_FILTER" ; test ${PIPESTATUS[0]} = 0 | |
| fi | |
| if [[ ${{ matrix.os }} =~ macos-14 ]] || [[ ${{ runner.arch }} == "X64" ]] ; then | |
| : # OpenMPI/libfabric bottles missing on macos-14 and Intel | |
| else | |
| # openmpi depends on gcc@latest which only has ARM64 bottles on macOS | |
| retry brew install libfabric openmpi \ | |
| 2>&1 | perl -pe "$BREW_WARNING_FILTER" ; test ${PIPESTATUS[0]} = 0 | |
| echo "CONFIGURE_ARGS=$CONFIGURE_ARGS --enable-ofi --enable-mpi" >> "$GITHUB_ENV" | |
| fi | |
| - name: Install LLVM on macOS | |
| if: contains(matrix.os, 'macos') && matrix.compiler == 'clang' | |
| run: | | |
| retry brew install llvm@${COMPILER_VERSION} \ | |
| 2>&1 | perl -pe "$BREW_WARNING_FILTER" ; test ${PIPESTATUS[0]} = 0 | |
| # Prepend homebrew clang to PATH: | |
| echo "PATH=$(brew --prefix)/opt/llvm/bin:${PATH}" >> "$GITHUB_ENV" | |
| - name: Setup Compilers | |
| run: | | |
| if test "$CC" = "clang" ; then | |
| echo "CXX=clang++" >> "$GITHUB_ENV" | |
| elif test "$CC" = "icx" ; then | |
| echo "CXX=icpx" >> "$GITHUB_ENV" | |
| else | |
| echo "CC=gcc-${COMPILER_VERSION}" >> "$GITHUB_ENV" | |
| echo "CXX=g++-${COMPILER_VERSION}" >> "$GITHUB_ENV" | |
| # XCode 26 / gcc bug workaround: | |
| # <mach/mach_time.h> generates xnu_static_assert_struct_size errors from <mach/message.h> | |
| if [[ ${{ matrix.os }} =~ macos-26 ]] ; then | |
| echo "CONFIGURE_ARGS=$CONFIGURE_ARGS --enable-force-posix-realtime" >> "$GITHUB_ENV" | |
| fi | |
| fi | |
| - name: Set Workflow Dispatch Environment | |
| if: github.event_name == 'workflow_dispatch' | |
| run: | | |
| for setting in ${{ inputs.env_vars }}; do | |
| echo $setting >> "$GITHUB_ENV" | |
| done | |
| - name: Version info | |
| run: | | |
| set +x | |
| echo == Platform version info == | |
| uname -a | |
| if test -r /etc/os-release ; then grep -e NAME -e VERSION /etc/os-release ; fi | |
| if test -x /usr/bin/sw_vers ; then /usr/bin/sw_vers ; fi | |
| if test -d /dev/shm ; then df -h /dev/shm ; fi | |
| echo | |
| echo == Tool version info == | |
| echo PATH="$PATH" | |
| for tool in ${CC} ${MPI_CC:-`type -p mpicc`} ${CXX} make ; do | |
| ( echo ; set -x ; w=$(which $tool) ; ls -al $w ; ls -alhL $w ; $tool --version ) | |
| done | |
| - name: Bootstrap | |
| run: | | |
| ./Bootstrap | |
| - name: configure | |
| run: | | |
| ./configure --prefix=$PWD/inst ${CONFIGURE_ARGS} | |
| - name: make all | |
| run: | | |
| make ${MAKE_FLAGS} all | |
| - name: make install | |
| run: | | |
| make ${MAKE_FLAGS} install | |
| - name: make check | |
| run: | | |
| make ${MAKE_FLAGS} check 2>&1 | tee output | |
| eval $ERR_CHECK output | |
| mv smp-conduit/testtools . | |
| rm -f */testtools | |
| - name: Run smp-conduit tests | |
| run: | | |
| make ${MAKE_FLAGS} -C smp-conduit run-tests TEST_NODES=${TEST_NODES} "${TEST_FILTER}" 2>&1 | tee output | |
| grep -q -e 'Test results: 0 failures' output | |
| eval $ERR_CHECK output | |
| - name: Run udp-conduit tests | |
| run: | | |
| if [[ -z "$GASNET_SUPERNODE_MAXSIZE" ]] ; then | |
| if [[ ${TEST_NODES} > 2 ]] ; then | |
| export GASNET_SUPERNODE_MAXSIZE=2 | |
| else | |
| export GASNET_SUPERNODE_MAXSIZE=1 | |
| fi | |
| fi | |
| make ${MAKE_FLAGS} -C udp-conduit run-tests TEST_NODES=${TEST_NODES} "${TEST_FILTER}" 2>&1 | tee output | |
| grep -q -e 'Test results: 0 failures' output | |
| eval $ERR_CHECK output | |
| - name: Run testtools | |
| run: | | |
| ./testtools 2>&1 | tee output | |
| eval $ERR_CHECK output | |