-
Notifications
You must be signed in to change notification settings - Fork 92
254 lines (226 loc) · 8.43 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
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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
name: Build
on:
workflow_dispatch:
inputs:
debug_enabled:
type: boolean
description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
required: false
default: false
use_cached_itksnap_build:
type: boolean
description: 'Use cached build results from last run'
required: false
default: false
# push:
# release:
# types:
# - published
jobs:
build_wheels:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04,macos-13,macos-14,windows-2022]
itk_ver: [ '5.4.0' ]
vtk_ver: [ '9.3.1' ]
qt_ver: [ '6.6.3' ]
include:
- os: ubuntu-20.04
qt_host: linux
qt_arch: gcc_64
test_pref: xvfb-run -a
- os: macos-13
qt_host: mac
qt_arch: clang_64
test_pref: ''
- os: macos-14
qt_host: mac
qt_arch: clang_64
test_pref: ''
- os: windows-2022
qt_host: windows
qt_arch: win64_msvc2019_64
test_pref: ''
steps:
# Select MSVC tools on windows
- name: Select MSVC 2019
uses: ilammy/msvc-dev-cmd@v1
if: ${{ runner.os == 'Windows' }}
# Setup ninja
- name: Setup Ninja
uses: seanmiddleditch/gha-setup-ninja@master
# Install system packages
- name: Install System Packages
uses: ConorMacBride/install-package@v1
with:
brew: curl
apt: libcurl4-openssl-dev
choco: nsis
# Install curl on Windows
- name: Install libcurl on Windows
uses: johnwason/vcpkg-action@v6
id: vcpkg
if: ${{ runner.os == 'Windows' }}
with:
pkgs: curl
triplet: x64-windows-release
token: ${{ github.token }}
github-binarycache: false
# Install Qt
- name: Install Qt on Ubuntu
uses: jurplel/install-qt-action@v4
with:
version: ${{ matrix.qt_ver }}
target: 'desktop'
host: ${{ matrix.qt_host }}
arch: ${{ matrix.qt_arch }}
cache: true
# Use cached VTK build if available
- name: Restore VTK Cache
id: cache-vtk
uses: actions/cache/restore@v4
with:
path: ${{github.workspace}}/vtk/install
key: ${{ matrix.os }}-vtk-${{ matrix.vtk_ver }}
# Check out VTK
- name: Checkout VTK
if: steps.cache-vtk.outputs.cache-hit != 'true'
uses: actions/checkout@v4
with:
repository: 'Kitware/VTK.git'
ref: v${{ matrix.vtk_ver }}
submodules: true
path: 'vtk'
# Build VTK
- name: Build VTK
if: steps.cache-vtk.outputs.cache-hit != 'true'
uses: threeal/[email protected]
with:
source-dir: ${{github.workspace}}/vtk
build-dir: ${{github.workspace}}/vtk/build
build-args: "-t install -- -k 0"
generator: Ninja
options: |
BUILD_TESTING:BOOL=FALSE
BUILD_EXAMPLES:BOOL=FALSE
BUILD_SHARED_LIBS:BOOL=FALSE
VTK_REQUIRED_OBJCXX_FLAGS:STRING=
VTK_GROUP_ENABLE_Qt:STRING=YES
VTK_MODULE_ENABLE_VTK_GUISupportQtQuick:STRING=NO
VTK_MODULE_ENABLE_VTK_GUISupportQtSQL:STRING=NO
CMAKE_BUILD_TYPE=Release
CMAKE_INSTALL_PREFIX=${{github.workspace}}/vtk/install
${{ runner.os == 'Windows' && 'VTK_SMP_ENABLE_STDTHREAD=OFF' || '' }}
# Cache the VTK build
- name: Cache VTK
if: steps.cache-vtk.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: ${{github.workspace}}/vtk/install
key: ${{ matrix.os }}-vtk-${{ matrix.vtk_ver }}
# Use cached ITK build if available. Unfortunately ITK make install fails to
# install one file, vnl_vector_ref.hxx so instead of caching the install dir
# we are caching the build dir
- name: Restore ITK Cache
id: cache-itk
uses: actions/cache/restore@v4
with:
path: ${{github.workspace}}/itk
key: ${{ matrix.os }}-itk-${{ matrix.itk_ver }}-build
# Check out ITK
- name: Checkout ITK
if: steps.cache-itk.outputs.cache-hit != 'true'
uses: actions/checkout@v4
with:
repository: 'InsightSoftwareConsortium/ITK.git'
ref: v${{ matrix.itk_ver }}
submodules: true
path: 'itk'
# Build ITK
- name: Build ITK
if: steps.cache-itk.outputs.cache-hit != 'true'
uses: threeal/[email protected]
with:
source-dir: ${{github.workspace}}/itk
build-dir: ${{github.workspace}}/itk/build
build-args: |
-t
install
generator: Ninja
options: |
BUILD_TESTING:BOOL=FALSE
BUILD_EXAMPLES:BOOL=FALSE
Module_MorphologicalContourInterpolation:BOOL=TRUE
CMAKE_BUILD_TYPE=Release
CMAKE_INSTALL_PREFIX=${{github.workspace}}/itk/install
- name: Cache ITK
if: steps.cache-itk.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: ${{github.workspace}}/itk
key: ${{ matrix.os }}-itk-${{ matrix.itk_ver }}-build
# Restore ITK-SNAP cache if requested by the user. This should allow us to create faster builds
# because only the updated files should require rebuilding
- name: Restore ITK-SNAP Cache (optional)
id: cache-restore-itksnap
uses: actions/cache/restore@v4
if: ${{ github.event_name == 'workflow_dispatch' && inputs.use_cached_itksnap_build }}
with:
path: ${{github.workspace}}/itksnap
key: ${{ matrix.os }}-itksnap-build-${{ github.ref }}
# Checkout ITK-SNAP code
- name: Checkout code
if: steps.cache-restore-itksnap.outputs.cache-hit != 'true'
uses: actions/checkout@v4
with:
submodules: true
clean: false
path: 'itksnap'
# Configure ITK-SNAP
- name: Configure ITK-SNAP
if: steps.cache-restore-itksnap.outputs.cache-hit != 'true'
uses: threeal/[email protected]
continue-on-error: true
with:
source-dir: ${{github.workspace}}/itksnap
build-dir: ${{github.workspace}}/itksnap/build
generator: Ninja
run-build: false
args: ${{ runner.os == 'Windows' && steps.vcpkg.outputs.vcpkg-cmake-config || '' }}
options: |
ITK_DIR=${{github.workspace}}/itk/build
VTK_DIR=${{github.workspace}}/vtk/install/lib/cmake/vtk-9.3
CMAKE_BUILD_TYPE=Release
DO_UPLOAD=ON
SITE=github-runner-${{ matrix.os }}
${{ runner.os == 'Windows' && format('CURL_LIBRARY={0}/vcpkg/installed/x64-windows-release/lib/libcurl.lib', github.workspace) || '' }}
${{ runner.os == 'Windows' && format('CURL_INCLUDE_DIR={0}/vcpkg/installed/x64-windows-release/include', github.workspace) || '' }}
# Build ITK-SNAP using CDash
- name: Build and Test ITK-SNAP
if: steps.cache-restore-itksnap.outputs.cache-hit != 'true'
working-directory: ${{github.workspace}}/itksnap/build
run: |
${{ matrix.test_pref }} ctest -D ExperimentalStart
${{ matrix.test_pref }} ctest -D ExperimentalConfigure
${{ matrix.test_pref }} ctest -D ExperimentalBuild
${{ matrix.test_pref }} ctest -D ExperimentalTest ${{ runner.os != 'Windows' && '| echo "no problem"' || '' }}
${{ matrix.test_pref }} ctest -D ExperimentalSubmit
# Cache the ITK-SNAP build
- name: Cache ITK-SNAP build directory
if: steps.cache-restore-itksnap.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: ${{github.workspace}}/itksnap
key: ${{ matrix.os }}-itksnap-build-${{ github.ref }}
- name: Setup tmate session
uses: mxschmitt/action-tmate@v3
if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }}
# Package ITK-SNAP
- name: Package ITK-SNAP
continue-on-error: true
working-directory: ${{github.workspace}}/itksnap/build
run: |
ninja -v package