Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
340012d
update gnu ci to 15.2.1 and test for any failures
Dec 29, 2025
5c3f335
update checkout version and cmake action
Dec 29, 2025
ea64259
remove invalid character from intel job name
rem1776 Dec 29, 2025
b68aa31
update titles and image names
Dec 30, 2025
0973710
Merge branch 'gnu-15-ci' of github.com:noaa-gfdl/fms into gnu-15-ci
Dec 30, 2025
3c0041f
fix tag number and add zip to image
Dec 30, 2025
f911f2a
replace hostname with a more portable command for oversubscribe confi…
Dec 31, 2025
3b642ec
turn on debug output for test functions
rem1776 Feb 4, 2026
3bb9cf3
hardcode oversubscribe option in mpirun function
rem1776 Feb 18, 2026
7d9f65c
Merge remote-tracking branch 'origin/main' into gnu-15-ci
Feb 19, 2026
4ff70f1
clean up test function edits and whitespace
Feb 19, 2026
ea79a66
revert changing the hostname command in the mpi launcher check
Feb 19, 2026
bf20b6b
change mpi launcher command in configure and add separate check for n…
Mar 4, 2026
de7b91a
fix skipped tests variable for interpolator tests
Mar 4, 2026
33dc00b
add checks for input files in interpolator test
Mar 4, 2026
2694a80
add some missing end calls and do some debugging for interpolator inp…
Mar 5, 2026
214bbd9
skip time_interp test in autotools ci
rem1776 Mar 11, 2026
8af5c15
Add test_time_interp2.8 to SKIP_TESTS
rem1776 Mar 12, 2026
9db2a15
revert debugging changes
Mar 12, 2026
829694c
add cmake support for openmpi alternative oversubscribe flag
Mar 12, 2026
98b85e6
skip expected fail test from mpp, reduce output to just failures
rem1776 Mar 12, 2026
506fb19
add step to upload distcheck log on failure
rem1776 Mar 13, 2026
72280c7
skip time_interp test due to file issues
rem1776 Mar 13, 2026
e55e6dc
Merge branch 'main' into gnu-15-ci
rem1776 Mar 13, 2026
df5c9d7
remove some older test failures for cmake build, switch mom6 image an…
Mar 18, 2026
ea12111
change cmake oversubscribe flag to a build option instead of dynamica…
Mar 18, 2026
6a9ae72
Try adding some spaces to the flag
rem1776 Mar 19, 2026
d62dd92
Add debug output to mpirun function
rem1776 Mar 19, 2026
f49277d
update to new spack-based image
Mar 31, 2026
1428a1d
add output for configure script if failed
Mar 31, 2026
950fdaf
remove debug option, add output error step
Apr 1, 2026
32a6ba8
Merge branch 'main' into gnu-15-ci
rem1776 Apr 8, 2026
06acd34
update arm image for new cmake version
rem1776 Apr 9, 2026
6e791fa
use no oversubscribe flag for the arm test
rem1776 Apr 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 20 additions & 15 deletions .github/workflows/github_autotools_gnu.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
# 'main' required ci, does a distcheck (builds, tests, check install)
# image created off dockerfile in repo, compile/link flags are set there
name: Build libFMS test with autotools
name: Autotools build and unit testing with GCC

on: [push, pull_request]

Expand All @@ -14,31 +12,38 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
conf-flag: [ --disable-openmp, --disable-setting-flags, --with-mpi=no, --disable-r8-default]
conf-flag: [ --disable-openmp, --with-mpi=no, --disable-r8-default]
input-flag: [--with-yaml, --enable-test-input=/home/unit_tests_input]
exclude:
- conf-flag: --with-mpi=no
input-flag: --enable-test-input=/home/unit_tests_input
container:
image: ghcr.io/noaa-gfdl/fms/fms-ci-rocky-gnu:13.2.0
image: ghcr.io/noaa-gfdl/fms/fms-ci-rocky-gnu:15.1.0
env:
TEST_VERBOSE: 1
DISTCHECK_CONFIGURE_FLAGS: "${{ matrix.conf-flag }} ${{ matrix.input-flag }} ${{ matrix.io-flag }}"
DISTCHECK_CONFIGURE_FLAGS: "${{ matrix.conf-flag }} ${{ matrix.input-flag }}"
DEBUG_FLAGS: "-O0 -g -fbounds-check -ffpe-trap=invalid,zero,overflow" # debug compiler flags taken from the mkmf template
# diag manager openmp + logical mask tests fail with gcc, these are reproducible outside the CI
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you open up an issue for this so we can track it and fix it?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah i thought we had one open already, but i guess not.

# test_mpp_clock_begin_end_id is an expected fail that is passing, only happens in the CI
# test_time_interp2 tests fail from file issues, only happens in the CI
SKIP_TESTS: "test_time_none.10 test_time_sum.10 test_time_avg.10 test_time_min.10 test_time_max.10 test_time_pow.10 test_time_rms.10 test_mpp_clock_begin_end_id.10 test_time_interp2.7 test_time_interp2.8"
steps:
- name: Checkout code
uses: actions/checkout@v4.2.2
uses: actions/checkout@v6.0.1
- name: Prepare GNU autoconf for build
run: autoreconf -if
- name: Configure the build
if: ${{ matrix.conf-flag != '--disable-setting-flags' }}
run: ./configure ${DISTCHECK_CONFIGURE_FLAGS} FCFLAGS="$FCFLAGS $DEBUG_FLAGS"
- name: Configure the build with compiler flags
if: ${{ matrix.conf-flag == '--disable-setting-flags' }}
run: ./configure ${DISTCHECK_CONFIGURE_FLAGS} FCFLAGS="-fdefault-real-8 -fdefault-double-8 -fcray-pointer -ffree-line-length-none -I/usr/include $FCFLAGS $DEBUG_FLAGS" || cat config.log
- name: Build the library
run: make distcheck
run: ./configure ${DISTCHECK_CONFIGURE_FLAGS} FCFLAGS="$FCFLAGS $DEBUG_FLAGS" || cat config.log
- name: Run distcheck (compiles, tests, and packages)
run: make distcheck 2>&1 > distcheck.log
if: ${{ matrix.conf-flag != '--with-mpi=no' }}
- name: Output errors on failure
run: grep -E "^FAIL:|^XPASS:" distcheck.log
if: failure()
- name: Upload log on failure
uses: actions/upload-artifact@v7.0.0
if: failure()
with:
path: distcheck.log
- name: Build the library (without test suite for serial build)
run: make
if: ${{ matrix.conf-flag == '--with-mpi=no' }}
3 changes: 2 additions & 1 deletion .github/workflows/github_autotools_intel_classic.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
name: Autotools build and unit testing with Intel Classic (weekly)

on:
schedule:
- cron: '0 0 * * 0' # sundays @ midnight


# cancel running jobs if theres a newer push
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/github_autotools_intel_oneapi.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
name: Autotools build and unit testing with Intel Oneapi

on: pull_request

# cancel running jobs if theres a newer push
Expand Down
16 changes: 8 additions & 8 deletions .github/workflows/github_cmake_gnu.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build libFMS with cmake
name: CMake build and unit testing with GCC

on: [push, pull_request]

Expand All @@ -15,19 +15,19 @@ jobs:
libyaml-flag: [ "", -DWITH_YAML=on ]
build-type: [ "-DCMAKE_BUILD_TYPE=Release", "-DCMAKE_BUILD_TYPE=Debug" ]
container:
image: ghcr.io/noaa-gfdl/fms/fms-ci-rocky-gnu:13.2.0
image: ghcr.io/noaa-gfdl/fms/fms-ci-rocky-gnu:15.1.0
env:
CMAKE_FLAGS: "${{ matrix.build-type }} ${{ matrix.libyaml-flag }}"
EXCLUDE_TESTS: "test_mpp_nesting|test_bc_restart|test_collective_io|test_fms2_io|test_io_with_mask"
EXCLUDE_TESTS: "test_mpp_nesting|test_mpp_clock_begin_end_id|test_time_*"
PKG_CONFIG_PATH: "/opt/views/view/lib64/pkgconfig:/opt/views/view/lib/pkgconfig:/opt/views/view/share/pkgconfig"
steps:
- name: Checkout code
uses: actions/checkout@v4.2.2
uses: actions/checkout@v6.0.1
- name: Generate makefiles with CMake
run: |
mkdir build
cd build
cmake $CMAKE_FLAGS -DOPENMP=on -DUNIT_TESTS=on -DNetCDF_ROOT=/opt/view -DLIBYAML_ROOT=/opt/view ..
cmake -DOVERSUBSCRIBE_FLAG="--map-by :OVERSUBSCRIBE" $CMAKE_FLAGS -DOPENMP=on -DNetCDF_ROOT=/opt/view -DLIBYAML_ROOT=/opt/view -DUNIT_TESTS=on ..
- name: Build the library
run: make -C build
- name: Run the unit tests
Expand All @@ -40,10 +40,10 @@ jobs:
libyaml-flag: [ "", -DWITH_YAML=on ]
build-type: [ "-DCMAKE_BUILD_TYPE=Release", "-DCMAKE_BUILD_TYPE=Debug" ]
container:
image: ghcr.io/noaa-gfdl/fms/fms-ci-rocky-gnu:13.2.0-arm
image: ghcr.io/noaa-gfdl/fms/fms-ci-rocky-gnu:13.2.0-arm-cmake-update
env:
CMAKE_FLAGS: "${{ matrix.build-type }} ${{ matrix.libyaml-flag }}"
EXCLUDE_TESTS: "test_mpp_nesting|test_bc_restart|test_collective_io|test_fms2_io|test_io_with_mask|test_sat_vapor_pres"
EXCLUDE_TESTS: "test_mpp_nesting|test_sat_vapor_pres|test_mpp_clock_begin_end_id"
PKG_CONFIG_PATH: "/opt/views/view/lib64/pkgconfig:/opt/views/view/lib/pkgconfig:/opt/views/view/share/pkgconfig"
steps:
- name: Checkout code
Expand All @@ -52,7 +52,7 @@ jobs:
run: |
mkdir build
cd build
cmake $CMAKE_FLAGS -DOPENMP=on -DUNIT_TESTS=on -DNetCDF_ROOT=/opt/view -DLIBYAML_ROOT=/opt/view ..
cmake $CMAKE_FLAGS -DOVERSUBSCRIBE_FLAG="" -DOPENMP=on -DUNIT_TESTS=on -DNetCDF_ROOT=/opt/view -DLIBYAML_ROOT=/opt/view ..
- name: Build the library
run: make -C build
- name: Run the unit tests
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/github_coupler_gnu.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Test coupler build
name: FMScoupler null model build with GCC
on: [pull_request]

# cancel running jobs if theres a newer push
Expand All @@ -10,7 +10,7 @@ jobs:
coupler-build:
runs-on: ubuntu-latest
container:
image: ghcr.io/noaa-gfdl/fms/fms-ci-rocky-gnu:13.2.0
image: ghcr.io/noaa-gfdl/fms/fms-ci-rocky-gnu:15.1.0
credentials:
username: ${{ github.actor }}
password: ${{ secrets.github_token }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/github_linter.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: libFMS lint tests
name: Line length and whitespace linter

on: [push, pull_request]

Expand Down
9 changes: 3 additions & 6 deletions .github/workflows/github_mom_gnu.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Run MOM6 test suite
name: MOM6 test suite with GCC

# runs on PR's or when manually triggered
on: [workflow_dispatch, pull_request]
Expand All @@ -11,17 +11,14 @@ concurrency:
jobs:
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/noaa-gfdl/fms/fms-ci-rocky-gnu:13.2.0
credentials:
username: ${{ github.actor }}
password: ${{ secrets.github_token }}
steps:
- name: Checkout MOM6 repository
uses: actions/checkout@v4.2.2
with:
repository: 'NOAA-GFDL/MOM6'
submodules: recursive
- name: Install dependency packages
uses: ./.github/actions/ubuntu-setup/
- name: Checkout FMS into MOM build
uses: actions/checkout@v4.2.2
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/version.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# appends -dev to the version upon release and opens pr
# CI won't run on generated PR, easiest workaround is to close + reopen
name: Append version number and create PR
on:
release:
types: [published]
Expand Down
6 changes: 6 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ option(PORTABLE_KINDS "Enable compiler definition -DPORTABLE_KINDS"
option(GFS_PHYS "Enable compiler definition -DGFS_PHYS" OFF)
option(WITH_YAML "Enable compiler definition -Duse_yaml" OFF)

# Testing-specific options
set(OVERSUBSCRIBE_FLAG " --oversubscribe " CACHE STRING "Flag for mpirun to use more cores than available")

if(32BIT)
list(APPEND kinds "r4")
message(STATUS "Building library with 4-byte real defaults (with mixed precision real support for most modules).")
Expand Down Expand Up @@ -586,6 +589,9 @@ include(CTest)
set(MPI_LAUNCHER "mpirun")
# used in the test-lib.sh.in to make it behave differently when parsed by cmake
set(USING_CMAKE "true")
set(OVERSUBSCRIBE "${OVERSUBSCRIBE_FLAG}")
message(STATUS "Using '${OVERSUBSCRIBE}' flag to oversubscribe ranks in test scripts")

# set the fms library to link tests with based on whats built
if(NOT kinds)
set(fmsLibraryName FMS::fms)
Expand Down
5 changes: 4 additions & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -392,9 +392,12 @@ fi
AC_CHECK_PROGS([MPI_LAUNCHER],[srun aprun mpirun])

# Check if the launcher can oversubscribe the MPI processes
AS_IF([$MPI_LAUNCHER --oversubscribe hostname >/dev/null 2>&1], \
AS_IF([$MPI_LAUNCHER --oversubscribe nproc >/dev/null 2>&1], \
[ AC_SUBST([OVERSUBSCRIBE], [--oversubscribe])])

# newer openmpi versions take a different flag
AS_IF([$MPI_LAUNCHER --map-by :OVERSUBSCRIBE nproc >/dev/null 2>&1], \
[ AC_SUBST([OVERSUBSCRIBE], [--map-by :OVERSUBSCRIBE])])

# Compiler with version information. This consists of the full path
# name of the compiler and the reported version number.
Expand Down
3 changes: 2 additions & 1 deletion test_fms/column_diagnostics/test_column_diagnostics.F90
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
program test_column_diagnostics

use column_diagnostics_mod
use fms_mod, only: fms_init
use fms_mod, only: fms_init, fms_end
use mpp_mod, only: FATAL, mpp_error
use time_manager_mod, only: time_manager_init, time_type, set_time, set_calendar_type
use constants_mod, only : PI, DEG_TO_RAD
Expand Down Expand Up @@ -62,6 +62,7 @@ program test_column_diagnostics
call initialize_variables(0.01_lkind) !< set up input arrays;
call test_initialize_diagnostic_columns !< initialize diagnostics column
call test_column_diagnostics_header
call fms_end()

contains
!------------------------------------------!
Expand Down
4 changes: 3 additions & 1 deletion test_fms/interpolator/test_interpolator2.F90
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ program test_interpolator2
set_date_no_leap, set_date_julian, operator(/), &
operator(+), operator(-), time_type_to_real, increment_time, &
leap_year, days_in_month, print_date, print_time
use fms_mod, only: fms_init
use fms_mod, only: fms_init, fms_end
use constants_mod, only: PI
use platform_mod, only: r4_kind, r8_kind
use fms_test_mod, only: permutable_indices_2d, permutable_indices_3d, permutable_indices_4d, factorial, &
Expand Down Expand Up @@ -124,6 +124,8 @@ program test_interpolator2
call test_interpolator_end(o3)
end if

call fms_end()

contains

#include "test_interpolator_write_climatology.inc"
Expand Down
2 changes: 1 addition & 1 deletion test_fms/interpolator/test_interpolator2.sh
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ if test ! -z "$test_input_path" ; then
rm -rf INPUT && mkdir INPUT
cp $test_input_path/interpolator/INPUT/* INPUT
else
SKIP_TESTS="$SKIP_TESTS $(basename $0 .sh).1"
SKIP_TESTS="$SKIP_TESTS test_interpolator2.1"
fi

# Create files for test.
Expand Down
11 changes: 3 additions & 8 deletions test_fms/test-lib.sh.in
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,9 @@ TEST_NAME="$(basename "$0" .sh)"
TEST_NUMBER="${TEST_NAME%%-*}"
TEST_NUMBER="${TEST_NUMBER#t}"

exec 7>&2
# For now, write all output
#if test -n "$VERBOSE"
#then
exec 4>&2 3>&1
#else
# exec 4>/dev/null 3>/dev/null
#fi
# redirects for stdout/stderr
# used to control output from this script and each test
exec 4>&2 3>&1 7>&2

test_count=0
test_success=0
Expand Down
Loading