-
Notifications
You must be signed in to change notification settings - Fork 47
178 lines (147 loc) · 6.9 KB
/
macos-ci-aarch64.yaml
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
name: macos-ci-aarch64-build
on:
pull_request:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
jobs:
macos-ci-aarch64-build:
runs-on: [macos-ci-aarch64]
steps:
- name: cleanup
run: |
pwd
ls -lart
find ./* -type d -exec chmod u+xw {} \;
rm -fr *
- name: checkout
uses: actions/checkout@v4
with:
submodules: true
- name: prepare-directories
run: |
mkdir -p /Users/ec2-user/spack-stack/build-cache
mkdir -p /Users/ec2-user/spack-stack/source-cache
- name: create-env
run: |
# Get day of week to decide whether to use build caches or not
DOW=$(date +%u)
# Monday is 1 ... Sunday is 7
if [[ $DOW == 7 ]]; then
export USE_BINARY_CACHE=false
echo "Ignore existing binary cache for creating buildcache environment"
else
export USE_BINARY_CACHE=true
echo "Use existing binary cache for creating buildcache environment"
fi
# Set up homebrew and lmod support
eval "$(/opt/homebrew/bin/brew shellenv)"
source /opt/homebrew/opt/lmod/init/profile
# Set up spack-stack
source ./setup.sh
# Important!
export SPACK_PYTHON=/usr/bin/python3
export ENVNAME=ue-apple-clang-14.0.3
export ENVDIR=$PWD/envs/${ENVNAME}
spack clean -ab
spack bootstrap now
spack stack create env --site macos.default --template unified-dev --name ${ENVNAME} --compiler apple-clang
spack env activate ${ENVDIR}
spack add ${{ inputs.specs || '' }}
export SPACK_SYSTEM_CONFIG_PATH="${ENVDIR}/site"
# Find external packages
spack external find --scope system \
--exclude bison --exclude openssl \
--exclude curl --exclude python
spack external find --scope system perl
spack external find --scope system libiconv
spack external find --scope system wget
PATH="/opt/homebrew/opt/curl/bin:$PATH" \
spack external find --scope system curl
PATH="/opt/homebrew/opt/qt5/bin:$PATH" \
spack external find --scope system qt
spack external find --scope system texlive
spack external find --scope system mysql
# Find compilers
spack compiler find --scope system
export -n SPACK_SYSTEM_CONFIG_PATH
# Set compiler and MPI specs
spack config add "packages:all:providers:mpi:[[email protected]]"
spack config add "packages:all:compiler:[[email protected]]"
# Add additional variants for MET packages, different from config/common/packages.yaml
# DH* 20240513 - avoid hdf-eos2 until https://github.com/spack/spack/issues/44168 is resolved
#spack config add "packages:met:variants:+python +grib2 +graphics +lidar2nc +modis"
spack config add "packages:met:variants:+python +grib2 +graphics"
# *DH
# Concretize and check for duplicates
spack concretize 2>&1 | tee log.concretize.apple-clang-14.0.3
${SPACK_STACK_DIR}/util/show_duplicate_packages.py -d log.concretize.apple-clang-14.0.3 -i fms -i crtm -i esmf -i mapl
# Add and update source cache
spack mirror add local-source file:///Users/ec2-user/spack-stack/source-cache/
spack mirror create -a -d /Users/ec2-user/spack-stack/source-cache/
# Add binary cache if requested
if [ "$USE_BINARY_CACHE" = true ] ; then
set +e
spack mirror add local-binary file:///Users/ec2-user/spack-stack/build-cache/
spack buildcache update-index local-binary || (echo "No valid binary cache found, proceed without" && spack mirror rm local-binary)
set +e
echo "Packages in spack binary cache:"
spack buildcache list
fi
# Break installation up in pieces and create build caches in between
# This allows us to "spin up" builds that altogether take longer than
# six hours, and/or fail later in the build process.
# base-env
echo "base-env ..."
spack install --fail-fast --source --no-check-signature base-env 2>&1 | tee log.install.apple-clang-14.0.3.base-env
spack buildcache create -a -u /Users/ec2-user/spack-stack/build-cache/ base-env
# jedi-base-env
echo "jedi-base-env ..."
spack install --fail-fast --source --no-check-signature jedi-base-env 2>&1 | tee log.install.apple-clang-14.0.3.jedi-base-env
spack buildcache create -a -u /Users/ec2-user/spack-stack/build-cache/ jedi-base-env
# the rest
echo "unified-env ..."
spack install --fail-fast --source --no-check-signature 2>&1 | tee log.install.apple-clang-14.0.3.unified-env
spack buildcache create -a -u /Users/ec2-user/spack-stack/build-cache/
# Remove binary cache for next round of concretization
if [ "$USE_BINARY_CACHE" = true ] ; then
spack mirror rm local-binary
fi
# Create modules
spack clean -a
spack module lmod refresh -y
spack stack setup-meta-modules
# Next steps: synchronize source and build cache to a central/combined mirror?
spack env deactivate
# Test environment chaining
echo "Test environment chaining"
spack stack create env --name chaintest --template empty --site macos.default --upstream ${ENVDIR}/install --compiler apple-clang
# Retain config from upstream so we don't have to rebuild:
cp -r ${ENVDIR}/{site,common} $PWD/envs/chaintest/.
spack env activate ${PWD}/envs/chaintest
spack add [email protected]%apple-clang
spack concretize | tee envs/chaintest/log.concretize
unwanted_duplicates=$(( cat envs/chaintest/log.concretize | grep -E '^ - ' | grep -Fv '[email protected]' || true ) | wc -l)
if [ ${unwanted_duplicates} -gt 0 ]; then echo "Environment chaining test failed"; exit 1; fi
spack env deactivate
- name: test-env
run: |
# Set up homebrew and lmod support
eval "$(/opt/homebrew/bin/brew shellenv)"
source /opt/homebrew/opt/lmod/init/profile
export ENVNAME=ue-apple-clang-14.0.3
export ENVDIR=$PWD/envs/${ENVNAME}
ls -l ${ENVDIR}/install/modulefiles/Core
module use ${ENVDIR}/install/modulefiles/Core
module load stack-apple-clang/14.0.3
module load stack-openmpi/5.0.3
module load stack-python/3.11.7
module available
module load jedi-ufs-env
module load ewok-env
module load soca-env
module list