Skip to content

Commit b9ccf07

Browse files
committed
Copy esmf-all-tests.yml workflow file from develop branch
1 parent e6b64a5 commit b9ccf07

File tree

1 file changed

+255
-0
lines changed

1 file changed

+255
-0
lines changed
Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
name: ESMF CI
2+
3+
on:
4+
schedule:
5+
- cron: "15 8 * * 3"
6+
push:
7+
branches:
8+
- develop
9+
pull_request:
10+
branches:
11+
- develop
12+
workflow_dispatch:
13+
14+
jobs:
15+
development-test:
16+
name: ${{matrix.config.desc}}
17+
runs-on: ${{matrix.config.osys}}
18+
strategy:
19+
fail-fast: false
20+
matrix:
21+
config:
22+
- {
23+
desc: ubuntu@22.04-gfortran@11-mpiuni-netcdf,
24+
osys: ubuntu-22.04,
25+
cors: 4,
26+
ropt: '',
27+
exhs: ON,
28+
cmpr: gfortran,
29+
cvrs: 11,
30+
bopt: 'O',
31+
comm: mpiuni,
32+
tlib: ON,
33+
ncdf: nc-config
34+
}
35+
- {
36+
desc: ubuntu@22.04-gfortran@12-mpich-netcdf,
37+
osys: ubuntu-22.04,
38+
cors: 4,
39+
ropt: '',
40+
exhs: OFF,
41+
cmpr: gfortran,
42+
cvrs: 12,
43+
bopt: 'O',
44+
comm: mpich,
45+
tlib: ON,
46+
ncdf: nc-config
47+
}
48+
- {
49+
desc: macos@14-gfortran@13-mpiuni-netcdf,
50+
osys: macos-14,
51+
cors: 3,
52+
ropt: '',
53+
exhs: OFF,
54+
cmpr: gfortran,
55+
cvrs: 13,
56+
bopt: 'O',
57+
comm: mpiuni,
58+
tlib: OFF,
59+
ncdf: nc-config
60+
}
61+
- {
62+
desc: macos@14-clang-gfortran@14-openmpi-netcdf,
63+
osys: macos-14,
64+
cors: 3,
65+
ropt: '--oversubscribe',
66+
exhs: ON,
67+
cmpr: gfortranclang,
68+
cvrs: 14,
69+
bopt: 'g',
70+
comm: openmpi,
71+
tlib: ON,
72+
ncdf: nc-config
73+
}
74+
steps:
75+
- name: Set up system
76+
run: |
77+
if [[ "${{matrix.config.osys}}" == "ubuntu-"* ]]; then
78+
sudo apt-get -qq update
79+
sudo apt install -qq -y autoconf automake libtool
80+
elif [[ "${{matrix.config.osys}}" == "macos-"* ]]; then
81+
sudo systemsetup -setusingnetworktime off
82+
sudo rm -rf /etc/ntp.conf
83+
brew install autoconf automake libtool
84+
brew unlink libevent || true
85+
fi
86+
export STACK_ROOT=${HOME}/stack
87+
mkdir -p ${STACK_ROOT}/{include,lib,lib64,bin}
88+
export ARTIFACTS=${{runner.temp}}/esmf_tests
89+
mkdir -p ${ARTIFACTS}
90+
export LD_LIBRARY_PATH=${STACK_ROOT}/lib64:${STACK_ROOT}/lib:${LD_LIBRARY_PATH}
91+
echo "STACK_ROOT=${STACK_ROOT}" >> $GITHUB_ENV
92+
echo "ARTIFACTS=${ARTIFACTS}" >> $GITHUB_ENV
93+
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" >> $GITHUB_ENV
94+
echo "CPPFLAGS=-I${STACK_ROOT}/include" >> $GITHUB_ENV
95+
echo "LDFLAGS=-L${STACK_ROOT}/lib" >> $GITHUB_ENV
96+
echo "${STACK_ROOT}/bin" >> $GITHUB_PATH
97+
- name: Cache Libraries
98+
id: cache-libraries
99+
uses: actions/cache@v4
100+
with:
101+
path: ${{env.STACK_ROOT}}
102+
key: ${{matrix.config.desc}}
103+
- name: Set up GFORTRAN
104+
if: matrix.config.cmpr == 'gfortran'
105+
run: |
106+
command -v gcc-${{matrix.config.cvrs}} || { exit 1; }
107+
command -v g++-${{matrix.config.cvrs}} || { exit 1; }
108+
command -v gfortran-${{matrix.config.cvrs}} || { exit 1; }
109+
ln -fs `which gcc-${{matrix.config.cvrs}}` /usr/local/bin/gcc
110+
ln -fs `which g++-${{matrix.config.cvrs}}` /usr/local/bin/g++
111+
ln -fs `which gfortran-${{matrix.config.cvrs}}` /usr/local/bin/gfortran
112+
gcc --version; g++ --version; gfortran --version
113+
echo "CC=gcc" >> $GITHUB_ENV
114+
echo "CXX=g++" >> $GITHUB_ENV
115+
echo "F77=gfortran" >> $GITHUB_ENV
116+
echo "F90=gfortran" >> $GITHUB_ENV
117+
echo "FC=gfortran" >> $GITHUB_ENV
118+
- name: Set up GFORTRANCLANG
119+
if: matrix.config.cmpr == 'gfortranclang'
120+
run: |
121+
command -v gfortran-${{matrix.config.cvrs}} || { exit 1; }
122+
ln -fs `which gfortran-${{matrix.config.cvrs}}` /usr/local/bin/gfortran
123+
clang --version; clang++ --version; gfortran --version
124+
echo "CC=clang" >> $GITHUB_ENV
125+
echo "CXX=clang++" >> $GITHUB_ENV
126+
echo "F77=gfortran" >> $GITHUB_ENV
127+
echo "F90=gfortran" >> $GITHUB_ENV
128+
echo "FC=gfortran" >> $GITHUB_ENV
129+
- name: Install MPICH (CACHED)
130+
env:
131+
CACHE_HIT: ${{steps.cache-libraries.outputs.cache-hit}}
132+
if: matrix.config.comm == 'mpich'
133+
run: |
134+
if [[ "$CACHE_HIT" != 'true' ]]; then
135+
MPICH_URL="https://www.mpich.org/static/downloads/4.2.2/mpich-4.2.2.tar.gz"
136+
mkdir ${{runner.temp}}/mpich
137+
cd ${{runner.temp}}/mpich
138+
curl -L $MPICH_URL | tar --strip-components=1 -xz
139+
./configure --prefix=${{env.STACK_ROOT}}
140+
make -j ${{matrix.config.cors}} install
141+
fi
142+
mpichversion
143+
echo "CC=mpicc" >> $GITHUB_ENV
144+
echo "CXX=mpicxx" >> $GITHUB_ENV
145+
echo "F77=mpifort" >> $GITHUB_ENV
146+
echo "F90=mpifort" >> $GITHUB_ENV
147+
echo "FC=mpifort" >> $GITHUB_ENV
148+
- name: Install OPENMPI (CACHED)
149+
env:
150+
CACHE_HIT: ${{steps.cache-libraries.outputs.cache-hit}}
151+
if: matrix.config.comm == 'openmpi'
152+
run: |
153+
if [[ "$CACHE_HIT" != 'true' ]]; then
154+
OPENMPI_URL="https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.6.tar.gz"
155+
mkdir ${{runner.temp}}/openmpi
156+
cd ${{runner.temp}}/openmpi
157+
curl -L $OPENMPI_URL | tar --strip-components=1 -xz
158+
./configure --prefix=${{env.STACK_ROOT}}
159+
make -j ${{matrix.config.cors}} install
160+
fi
161+
ompi_info
162+
echo "CC=mpicc" >> $GITHUB_ENV
163+
echo "CXX=mpicxx" >> $GITHUB_ENV
164+
echo "F77=mpifort" >> $GITHUB_ENV
165+
echo "F90=mpifort" >> $GITHUB_ENV
166+
echo "FC=mpifort" >> $GITHUB_ENV
167+
- name: Install HDF5 (CACHED)
168+
env:
169+
CACHE_HIT: ${{steps.cache-libraries.outputs.cache-hit}}
170+
if: matrix.config.ncdf == 'nc-config'
171+
run: |
172+
if [[ "$CACHE_HIT" != 'true' ]]; then
173+
HDF5_URL="https://github.com/HDFGroup/hdf5/archive/refs/tags/hdf5_1.14.4.3.tar.gz"
174+
mkdir ${{runner.temp}}/hdf5
175+
cd ${{runner.temp}}/hdf5
176+
curl -L $HDF5_URL | tar --strip-components=1 -xz
177+
./configure --enable-fortran --prefix=${{env.STACK_ROOT}}
178+
make -j ${{matrix.config.cors}} install
179+
fi
180+
- name: Install NetCDF-C and NetCDF-Fortran (CACHED)
181+
env:
182+
CACHE_HIT: ${{steps.cache-libraries.outputs.cache-hit}}
183+
if: matrix.config.ncdf == 'nc-config'
184+
run: |
185+
if [[ "$CACHE_HIT" != 'true' ]]; then
186+
NETCDF_URL="https://github.com/Unidata/netcdf-c/archive/v4.9.0.tar.gz"
187+
NETCDFF_URL="https://github.com/Unidata/netcdf-fortran/archive/v4.5.4.tar.gz"
188+
mkdir ${{runner.temp}}/netcdf-c
189+
cd ${{runner.temp}}/netcdf-c
190+
curl -L $NETCDF_URL | tar --strip-components=1 -xz
191+
./configure --enable-netcdf-4 --disable-dap --prefix=${{env.STACK_ROOT}}
192+
make -j ${{matrix.config.cors}} install
193+
mkdir ${{runner.temp}}/netcdf-fortran
194+
cd ${{runner.temp}}/netcdf-fortran
195+
curl -L $NETCDFF_URL | tar --strip-components=1 -xz
196+
./configure --prefix=${{env.STACK_ROOT}}
197+
make -j ${{matrix.config.cors}} install
198+
fi
199+
- name: Checkout ESMF
200+
uses: actions/checkout@v4
201+
- name: ESMF Configuration
202+
run: |
203+
echo "ESMF_DIR=${GITHUB_WORKSPACE}" >> $GITHUB_ENV
204+
echo "ESMF_COMPILER=${{matrix.config.cmpr}}" >> $GITHUB_ENV
205+
echo "ESMF_COMM=${{matrix.config.comm}}" >> $GITHUB_ENV
206+
echo "ESMF_BOPT=${{matrix.config.bopt}}" >> $GITHUB_ENV
207+
echo "ESMF_NETCDF=${{matrix.config.ncdf}}" >> $GITHUB_ENV
208+
echo "ESMF_MPILAUNCHOPTIONS=${{matrix.config.ropt}}" >> $GITHUB_ENV
209+
echo "ESMF_TESTEXHAUSTIVE=${{matrix.config.exhs}}" >> $GITHUB_ENV
210+
echo "ESMF_TRACE_LIB_BUILD=${{matrix.config.tlib}}" >> $GITHUB_ENV
211+
- name: ESMF Info
212+
run: |
213+
make info | tee ${ARTIFACTS}/info.log
214+
- name: ESMF Build
215+
run: |
216+
make -j ${{matrix.config.cors}} > ${ARTIFACTS}/build.log 2>&1
217+
- name: ESMF All Tests
218+
timeout-minutes: 60
219+
run: |
220+
make all_tests > ${ARTIFACTS}/all_tests.log 2>&1
221+
{ grep "SYSTEM TESTS SUMMARY" -A1 ${ARTIFACTS}/all_tests.log > ${ARTIFACTS}/summary.log || true; }
222+
{ grep "EXAMPLES SUMMARY" -A1 ${ARTIFACTS}/all_tests.log >> ${ARTIFACTS}/summary.log || true; }
223+
{ grep "UNIT TESTS SUMMARY" -A1 ${ARTIFACTS}/all_tests.log >> ${ARTIFACTS}/summary.log || true; }
224+
echo >> ${ARTIFACTS}/summary.log
225+
{ grep "PASS:" ${ARTIFACTS}/all_tests.log >> ${ARTIFACTS}/summary.log || true; }
226+
echo >> ${ARTIFACTS}/summary.log
227+
{ grep "FAIL:" ${ARTIFACTS}/all_tests.log >> ${ARTIFACTS}/summary.log || true; }
228+
echo >> ${ARTIFACTS}/summary.log
229+
{ grep "CRASHED:" ${ARTIFACTS}/all_tests.log >> ${ARTIFACTS}/summary.log || true; }
230+
echo >> ${ARTIFACTS}/summary.log
231+
cat ${ARTIFACTS}/summary.log
232+
{ grep "FAIL:\|CRASHED:" ${ARTIFACTS}/summary.log > ${ARTIFACTS}/failures.log || true; }
233+
if [ -f ${ARTIFACTS}/failures.log ]; then
234+
error=$(wc -l < ${ARTIFACTS}/failures.log)
235+
else
236+
error=0
237+
fi
238+
if [ ${error} -gt 0 ]; then
239+
mkdir -p ${ARTIFACTS}/output
240+
find test -type f -name "*.Log" \
241+
-exec cp '{}' ${ARTIFACTS}/output/. ';'
242+
find test -type f -name "*.stdout" \
243+
-exec cp '{}' ${ARTIFACTS}/output/. ';'
244+
echo "Test Failures:" >> $GITHUB_STEP_SUMMARY
245+
echo "" >> $GITHUB_STEP_SUMMARY
246+
cat ${ARTIFACTS}/failures.log >> $GITHUB_STEP_SUMMARY
247+
echo '::error::${{matrix.config.desc}} failed, check artifacts.'
248+
exit 1
249+
fi
250+
- name: Archive Results
251+
if: ${{ failure() }}
252+
uses: actions/upload-artifact@v4
253+
with:
254+
name: logs-${{matrix.config.desc}}
255+
path: ${{env.ARTIFACTS}}

0 commit comments

Comments
 (0)