-
Notifications
You must be signed in to change notification settings - Fork 20
134 lines (119 loc) · 4.32 KB
/
intel.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
129
130
131
132
133
134
name: Intel Linux Build
on: [push, pull_request]
# Use custom shell with -l so .bash_profile is sourced which loads intel/oneapi/setvars.sh
# without having to do it in manually every step
defaults:
run:
shell: bash -leo pipefail {0}
# Set I_MPI_CC/F90 so Intel MPI wrapper uses icc/ifort instead of gcc/gfortran
env:
cache_key: intel
CC: icc
FC: ifort
CXX: icpc
I_MPI_CC: icc
I_MPI_F90: ifort
# A note on flushing Action cache and relevance to "cache_key" above.
# There is no way to flush the Action cache, and hence a number (#) is appended
# to the "cache_key" (intel).
# If the dependencies change, increment this number and a new cache will be
# generated by the dependency build step "setup"
# There is a Github issue to force clear the cache.
# See discussion on:
# https://stackoverflow.com/questions/63521430/clear-cache-in-github-actions
# The jobs are split into:
# 1. a dependency build step (setup), and
# 2. a GSI-utils build step (gsi-utils)
# The setup is run once and the environment is cached,
# so each subsequent build of gsi-utils can reuse the cached dependencies to save time (and compute).
jobs:
setup:
runs-on: ubuntu-latest
steps:
# Free up disk space
- name: free-disk-spack
run: |
df -h
sudo swapoff -a
sudo rm -rf /swapfile
sudo rm -rf /usr_local_mv
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
sudo apt clean
docker rmi $(docker image ls -aq)
df -h
- name: checkout # This is for getting spack.yaml
if: steps.cache-env.outputs.cache-hit != 'true'
uses: actions/checkout@v4
with:
path: gsi-utils
# Cache spack, compiler and dependencies
- name: cache-env
id: cache-env
uses: actions/cache@v3
with:
path: |
spack
~/.spack
/opt/intel
key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi-utils/ci/spack.yaml') }}
- name: install-intel-compilers
run: |
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
sudo apt-get update
sudo apt-get install intel-oneapi-dev-utilities intel-oneapi-mpi-devel intel-oneapi-openmp intel-oneapi-compiler-fortran-2023.2.1 intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2023.2.1
sudo apt-get clean
echo "source /opt/intel/oneapi/setvars.sh" >> ~/.bash_profile
# Install dependencies using Spack
- name: install-dependencies-with-spack
if: steps.cache-env.outputs.cache-hit != 'true'
run: |
sudo mv /usr/local/ /usr_local_mv
sudo apt-get install cmake
git clone -c feature.manyFiles=true https://github.com/JCSDA/spack.git
source spack/share/spack/setup-env.sh
spack env create gsiutils-env gsi-utils/ci/spack.yaml
spack env activate gsiutils-env
spack compiler find
sudo apt install cmake
spack external find
spack add intel-oneapi-mpi
spack concretize
spack install --dirty --fail-fast -v
spack clean --all
gsi-utils:
needs: setup
runs-on: ubuntu-latest
steps:
- name: install-intel
run: |
echo "source /opt/intel/oneapi/setvars.sh" >> ~/.bash_profile
- name: checkout-gsiutils
uses: actions/checkout@v4
with:
path: gsi-utils
- name: cache-env
id: cache-env
uses: actions/cache@v3
with:
path: |
spack
~/.spack
/opt/intel
key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi-utils/ci/spack.yaml') }}
- name: build
run: |
source spack/share/spack/setup-env.sh
spack env activate gsiutils-env
cd gsi-utils
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_UTIL_ALL=ON ..
make -j2 VERBOSE=1
make install
env:
CC: mpiicc
FC: mpiifort