Skip to content

Commit a50e28f

Browse files
committed
Merge branch 'hotfix/0.41.1'
* hotfix/0.41.1: Version 0.41.1 GHA: Run ci for ci branch Add GHA build-hpc running on ECMWF GPU partition GHA build: Add open-mpi version to CACHE_SUFFIX for macos to prevent failures with homebrew upgrades GHA build: Skip atlas_test_omp_sort for nvhpc 25.1 (problem in Release build only) GHA build: Update action (using github-hosted-runners) Fix warnings for hic Fix warnings for atlas_io Add cmake option to SKIP_TEST_atlas_test_omp_sort Add SKIP_TEST_<test-name> for atlas_test_field_foreach and atlas_test_array_foreach Add cmake option WARNING_AS_ERROR to add -Werror as CXX flag Filter tests with MPI 4 and MPI_SLOTS Extend macros to suppress warnings based on pragmas Fix assemble_global_matrix with ATLAS_BITS_LOCAL=64 Fix compilation with ATLAS_BITS_LOCAL=64 Fix RegionalLinear2D interpolation with ATLAS_BITS_LOCAL=64 atlas-docs: Build doxygen from source
2 parents afcdc8d + 360f43c commit a50e28f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+515
-181
lines changed

.github/docs-config.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
# note: each step is executed in own process
22
build-steps:
33
- git clone --depth 1 https://github.com/ecmwf/atlas-docs.git $RUNNER_TEMP/atlas-docs
4-
- sudo apt install -y -q doxygen texlive-full
4+
- |
5+
wget https://github.com/doxygen/doxygen/archive/refs/tags/Release_1_13_2.tar.gz
6+
tar xzf Release_1_13_2.tar.gz
7+
cmake -S doxygen-Release_1_13_2 -B doxygen
8+
cmake --build doxygen -j16
9+
sudo cmake --install doxygen
10+
- sudo apt install -y -q ghostscript texlive-full
511
- |
612
cd $RUNNER_TEMP/atlas-docs
713
make PUBLIC=1 WITH_ECKIT=1 WITH_DOXYGEN=1 ATLAS_SOURCE_DIR=$GITHUB_WORKSPACE clean html

.github/workflows/build-hpc.yml

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
name: build-hpc
2+
3+
# Controls when the action will run
4+
on:
5+
6+
# Trigger the workflow on all pushes to main and develop, except on tag creation
7+
push:
8+
branches:
9+
- main
10+
- develop
11+
- ci
12+
tags-ignore:
13+
- '**'
14+
15+
# Trigger the workflow on all pull requests
16+
pull_request: ~
17+
18+
# Allow workflow to be dispatched on demand
19+
workflow_dispatch: ~
20+
21+
# Trigger after public PR approved for CI
22+
pull_request_target:
23+
types: [labeled]
24+
25+
env:
26+
ATLAS_TOOLS: ${{ github.workspace }}/tools
27+
CTEST_PARALLEL_LEVEL: 1
28+
CACHE_SUFFIX: v1 # Increase to force new cache to be created
29+
30+
jobs:
31+
ci-hpc:
32+
name: ci-hpc
33+
if: ${{ !github.event.pull_request.head.repo.fork && github.event.action != 'labeled' || github.event.label.name == 'approved-for-ci' }}
34+
35+
strategy:
36+
fail-fast: false # false: try to complete all jobs
37+
38+
matrix:
39+
name:
40+
- ac-gpu nvhpc
41+
42+
include:
43+
- name: ac-gpu nvhpc
44+
site: ac-batch
45+
troika_user_secret: HPC_CI_GPU_SSH_USER
46+
sbatch_options: |
47+
#SBATCH --time=00:20:00
48+
#SBATCH --nodes=1
49+
#SBATCH --ntasks=4
50+
#SBATCH --cpus-per-task=32
51+
#SBATCH --gpus-per-task=1
52+
#SBATCH --mem=200G
53+
#SBATCH --qos=dg
54+
modules:
55+
- cmake
56+
- ninja
57+
- prgenv/nvidia
58+
- hpcx-openmpi/2.14.0-cuda
59+
- fftw
60+
- qhull
61+
- eigen
62+
cmake_options: -DMPI_SLOTS=4 -DENABLE_WARNING_AS_ERROR=ON
63+
64+
runs-on: [self-hosted, linux, hpc]
65+
env:
66+
GH_TOKEN: ${{ github.token }}
67+
steps:
68+
- uses: ecmwf-actions/reusable-workflows/ci-hpc-generic@v2
69+
with:
70+
site: ${{ matrix.site }}
71+
troika_user: ${{ secrets[matrix.troika_user_secret] }}
72+
sbatch_options: ${{ matrix.sbatch_options }}
73+
output_dir: ${{ matrix.output_dir || '' }}
74+
workdir: ${{ matrix.workdir || '' }}
75+
template_data: |
76+
cmake_options:
77+
- -DENABLE_MPI=ON
78+
- -DENABLE_ACC=ON
79+
- -DENABLE_CUDA=ON
80+
- -DSKIP_TEST_atlas_test_field_foreach=TRUE
81+
- ${{ matrix.cmake_options || '' }}
82+
ctest_options: ${{ matrix.ctest_options || '' }}
83+
dependencies:
84+
ecmwf/ecbuild:
85+
version: develop
86+
ecmwf/eckit:
87+
version: develop
88+
cmake_options:
89+
- -DENABLE_MPI=ON
90+
- -DENABLE_CUDA=OFF
91+
- -DENABLE_TESTS=OFF
92+
- -DENABLE_ECKIT_SQL=OFF
93+
- -DENABLE_ECKIT_CMD=OFF
94+
- -DENABLE_AIO=OFF
95+
- -DENABLE_WARNINGS=OFF
96+
- ${{ matrix.cmake_options || '' }}
97+
ecmwf/fckit:
98+
version: develop
99+
cmake_options:
100+
- -DENABLE_TESTS=OFF
101+
- ${{ matrix.cmake_options || '' }}
102+
ecmwf-ifs/fiat:
103+
version: develop
104+
cmake_options:
105+
- -DENABLE_MPI=ON
106+
- -DENABLE_TESTS=OFF
107+
- ${{ matrix.cmake_options || '' }}
108+
ecmwf-ifs/ectrans:
109+
version: develop
110+
cmake_options:
111+
- -DENABLE_MPI=ON
112+
- -DENABLE_ACC=ON
113+
- -DENABLE_GPU=ON
114+
- -DENABLE_TESTS=OFF
115+
- ${{ matrix.cmake_options || '' }}
116+
117+
template: |
118+
set +x
119+
module_load() {
120+
echo "+ module load $1"
121+
module load $1
122+
}
123+
{% for module in "${{ join(matrix.modules, ',') }}".split(',') %}
124+
module_load {{module}}
125+
{% endfor %}
126+
echo "+ module list"
127+
module list
128+
BASEDIR=$PWD
129+
export CMAKE_TEST_LAUNCHER="srun;-n;1"
130+
export CMAKE_PREFIX_PATH=$BASEDIR/install:$CMAKE_PREFIX_PATH
131+
{% for repo_name, options in dependencies.items() %}
132+
name=$(basename {{repo_name}})
133+
echo "::group::Get dependency $name"
134+
echo "+ mkdir -p $name"
135+
mkdir -p $name
136+
echo "+ pushd $name"
137+
pushd $name
138+
echo "+ git init"
139+
git init
140+
echo "+ git remote add origin ${{ github.server_url }}/{{repo_name}}"
141+
git remote add origin ${{ github.server_url }}/{{repo_name}}
142+
echo "+ git fetch origin {{options['version']}}"
143+
git fetch origin {{options['version']}}
144+
echo "+ git reset --hard FETCH_HEAD"
145+
git reset --hard FETCH_HEAD
146+
echo "+ cmake -G Ninja -S . -B build {{ options['cmake_options']|join(' ') }}"
147+
cmake -G Ninja -S . -B build {{ options['cmake_options']|join(' ') }}
148+
start=`date +%s`
149+
echo "+ cmake --build build"
150+
cmake --build build
151+
end=`date +%s`
152+
runtime=$((end-start))
153+
echo "Build $name took $runtime seconds"
154+
echo "+ cmake --install build --prefix \$BASEDIR/install/$name"
155+
cmake --install build --prefix $BASEDIR/install/$name
156+
echo "+ export PATH=\$BASEDIR/install/$name/bin:\$PATH"
157+
export PATH=$BASEDIR/install/$name/bin:$PATH
158+
echo "+ popd"
159+
popd
160+
echo "::endgroup::"
161+
{% endfor %}
162+
REPO=${{ github.event.pull_request.head.repo.full_name || github.repository }}
163+
SHA=${{ github.event.pull_request.head.sha || github.sha }}
164+
name=$(basename $REPO)
165+
echo "::group::Checkout $name"
166+
echo "+ mkdir -p $name"
167+
mkdir -p $name
168+
echo "+ pushd $name"
169+
pushd $name
170+
echo "+ git init"
171+
git init
172+
echo "+ git remote add origin ${{ github.server_url }}/$REPO"
173+
git remote add origin ${{ github.server_url }}/$REPO
174+
echo "+ git fetch origin $SHA"
175+
git fetch origin $SHA
176+
echo "+git reset --hard FETCH_HEAD"
177+
git reset --hard FETCH_HEAD
178+
echo "+ popd"
179+
popd
180+
echo "::endgroup::"
181+
182+
echo "::group::Build $name"
183+
echo "+ cmake -G Ninja -S $name -B build {{ cmake_options|join(' ') }}"
184+
cmake -G Ninja -S $name -B build {{ cmake_options|join(' ') }}
185+
start=`date +%s`
186+
echo "+ cmake --build build"
187+
cmake --build build
188+
end=`date +%s`
189+
runtime=$((end-start))
190+
echo "Build $name took $runtime seconds"
191+
echo "::endgroup::"
192+
193+
echo "::group::Test $name"
194+
export ATLAS_FINALISES_MPI=1
195+
echo "+ ctest --test-dir build --output-on-failure {{ ctest_options }}"
196+
ctest --test-dir build --output-on-failure {{ ctest_options }}
197+
echo "::endgroup::"
198+
199+
echo "::group::Install $name"
200+
echo "+ cmake --install build --prefix $BASEDIR/install/$name"
201+
cmake --install build --prefix $BASEDIR/install/$name
202+
echo "+ export PATH=\$BASEDIR/install/$name/bin:\$PATH"
203+
export PATH=$BASEDIR/install/$name/bin:$PATH
204+
echo "::endgroup::"
205+
206+
echo "::group::Verify $name installation"
207+
echo "+ atlas --info"
208+
atlas --info
209+
echo "::endgroup::"
210+
211+
echo "::group::Cleanup"
212+
set -x
213+
rm -r $name
214+
rm -r build
215+
rm -r $BASEDIR/install
216+
{% for repo_name in dependencies.keys() %}
217+
name=$(basename {{repo_name}})
218+
rm -r $name
219+
{% endfor %}
220+
221+
echo "::endgroup::"
222+
set +x

0 commit comments

Comments
 (0)