forked from ecmwf-ifs/dwarf-p-cloudsc
-
Notifications
You must be signed in to change notification settings - Fork 1
128 lines (101 loc) · 4.33 KB
/
build.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
name: build
# Controls when the workflow will run
on:
# Triggers the workflow on push events
push:
branches: [ 'main', 'develop' ]
tags-ignore: [ '**' ]
# Triggers the workflow on pull request events
pull_request:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
name: Test on ${{ matrix.arch }} ${{ matrix.io_library_flag }} ${{ matrix.mpi_flag }} ${{ matrix.prec_flag }} ${{ matrix.gpu_flag }} ${{ matrix.loki_flag }} ${{ matrix.claw_flag }}
# The type of runner that the job will run on
runs-on: ubuntu-20.04
strategy:
fail-fast: false # false: try to complete all jobs
matrix:
arch:
- github/ubuntu/gnu/9.4.0
io_library_flag: ['', '--with-serialbox'] # Switch between Serialbox and HDF5
mpi_flag: ['', '--with-mpi'] # Enable MPI-parallel build
prec_flag: ['', '--single-precision'] # Switch single/double precision
gpu_flag: ['', '--with-gpu'] # GPU-variants enabled
cuda_flag: [''] # Enable CUDA variants
loki_flag: ['', '--with-loki'] # Loki source-to-source translation enabled
claw_flag: [''] # Flag to enable CLAW-generated variants
include:
# Add nvhpc build configurations with serialbox and HDF5
- arch: github/ubuntu/nvhpc/21.9
io_library_flag: ''
mpi_flag: ''
prec_flag: ''
gpu_flag: '--with-gpu'
cuda_flag: '--with-cuda'
loki_flag: '--with-loki'
- arch: github/ubuntu/nvhpc/21.9
io_library_flag: '--with-serialbox'
mpi_flag: ''
prec_flag: ''
gpu_flag: '--with-gpu'
cuda_flag: '--with-cuda'
loki_flag: '--with-loki'
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
# Installs required packages
- name: Package installation
run: |
sudo apt-get install libc-dev-bin gfortran-9 gcc-9 g++-9
# Install MPI
- name: Install MPI via Apt
if: contains( matrix.mpi_flag, 'with-mpi' )
run: sudo apt-get install libopenmpi-dev
# Install Compiler
- name: Install nvhpc
if: contains( matrix.arch, 'nvhpc' )
run: .github/scripts/bootstrap-nvhpc.sh
# Install HDF5
- name: Install HDF5 via Apt
if: ${{ ! contains( matrix.arch, 'nvhpc' ) && ! contains( matrix.io_library_flag, 'with-serialbox' ) }}
run: sudo apt-get install libhdf5-dev
- name: Install HDF5 from source
if: contains( matrix.arch, 'nvhpc' ) && ! contains( matrix.io_library_flag, 'with-serialbox' )
run: source arch/${{ matrix.arch }}/env.sh && .github/scripts/install-hdf5.sh
# Install Boost
- name: Install Boost libraries
if: contains( matrix.io_library_flag, 'with-serialbox' )
run: sudo apt install libboost-filesystem-dev libboost-system-dev
# Check-out dependencies as part of the bundle creation
- name: Bundle create
run: ./cloudsc-bundle create
# Build the targets
- name: Bundle build
run: |
./cloudsc-bundle build --retry-verbose \
--arch=arch/${{ matrix.arch }} ${{ matrix.prec_flag }} \
${{ matrix.mpi_flag }} ${{ matrix.io_library_flag }} ${{ matrix.gpu_flag }} \
${{ matrix.claw_flag}} ${{ matrix.loki_flag }} ${{ matrix.cuda_flag }}
# Verify targets exist
- name: Verify targets
env:
io_library_flag: ${{ matrix.io_library_flag }}
prec_flag: ${{ matrix.prec_flag }}
gpu_flag: ${{ matrix.gpu_flag }}
cuda_flag: ${{ matrix.cuda_flag }}
loki_flag: ${{ matrix.loki_flag }}
claw_flag: ${{ matrix.claw_flag }}
run: .github/scripts/verify-targets.sh
# Run double-precision targets
# (Mind the exclusions inside the script!)
- name: Run targets
env:
mpi_flag: ${{ matrix.mpi_flag }}
arch: ${{ matrix.arch }}
if: ${{ matrix.prec_flag == '' }}
run: .github/scripts/run-targets.sh