Skip to content

[NO REVIEW]: CI Updates #65

[NO REVIEW]: CI Updates

[NO REVIEW]: CI Updates #65

Workflow file for this run

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