-
-
Notifications
You must be signed in to change notification settings - Fork 30
298 lines (275 loc) · 10.2 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
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
name: CI
on: [push, pull_request]
jobs:
Linux:
runs-on: ubuntu-latest
container:
image: ${{ matrix.distro == 'alpine' && 'alpine:latest' || matrix.distro == 'ubuntu-20.04' && 'ubuntu:20.04' || 'ubuntu:latest' }}
strategy:
fail-fast: false # Remove this line to fail the whole matrix if one job fails; included for testing as many CI pipelines as possible for now
matrix:
distro: [ubuntu, ubuntu-20.04, alpine]
build-system: [autotools, meson]
compiler: [gcc, clang]
tls: [openssl, mbedtls, none]
exclude:
- distro: alpine
tls: none
- distro: ubuntu-20.04
tls: none
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install dependencies
run: |
if [ "${{ matrix.distro }}" = "ubuntu" ] || [ "${{ matrix.distro }}" = "ubuntu-20.04" ]; then
apt-get update
export DEBIAN_FRONTEND=noninteractive
apt-get install -y autotools-dev autoconf automake build-essential clang git imagemagick libfltk1.3-dev libmbedtls-dev libpng-dev libssl-dev libturbojpeg0-dev lld make ninja-build pip pkg-config x11-apps x11-utils xvfb zlib1g-dev
# HTML tests require meson 1.4.0 or later
pip3 install meson ${{ matrix.distro == 'ubuntu' && '--break-system-packages' || '' }}
else
apk add build-base autoconf automake clang fltk-dev git libpng-dev libjpeg-turbo-dev lld mbedtls-dev meson ninja-build openssl-dev
fi
- name: Set git safe directory
run: git config --global --add safe.directory ${GITHUB_WORKSPACE}
- if: matrix.build-system == 'autotools'
name: Prepare Autotools
run: |
./autogen.sh
mkdir install build
# Instead of using a matrix for HTML tests we will only set the option on ubuntu (latest) with gcc, no TLS
- name: Configure Build
run: |
HTML_TESTS_OPT=""
if [ "${{ matrix.distro }}" = "ubuntu" ] && [ "${{matrix.compiler}}" = "gcc" ] && [ "${{ matrix.tls }}" = "none" ]; then
if [ "${{ matrix.build-system }}" = "autotools" ]; then
HTML_TESTS_OPT="--enable-html-tests"
else
HTML_TESTS_OPT="-Dhtml-tests=enabled"
fi
fi
if [ "${{matrix.compiler}}" = "clang" ]; then
export CC=clang CXX=clang++ LDFLAGS="-fuse-ld=lld -Wl,--as-needed"
else
if [ "${{ matrix.distro }}" = "ubuntu" ]; then
export CFLAGS="-flto -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing"
fi
fi
if [ "${{ matrix.build-system }}" = "autotools" ]; then
if [ "${{ matrix.tls }}" = "none" ]; then
export TLS_OPT="--disable-tls"
elif [ "${{ matrix.tls }}" = "mbedtls" ]; then
export TLS_OPT="--disable-openssl"
else
export TLS_OPT="--disable-mbedtls"
fi
else
if [ "${{ matrix.tls }}" = "none" ]; then
export TLS_OPT="-Dtls=disabled -Dopenssl=false -Dmbedtls=false"
elif [ "${{ matrix.tls }}" = "mbedtls" ]; then
export TLS_OPT="-Dmbedtls=true -Dopenssl=false"
else
export TLS_OPT="-Dopenssl=true -Dmbedtls=false"
fi
fi
if [ "${{ matrix.build-system }}" = "autotools" ]; then
cd build
../configure --prefix=$(readlink -f ../install) ${TLS_OPT} ${HTML_TESTS_OPT}
else
meson setup build --prefix="$(pwd)/install" ${TLS_OPT} ${HTML_TESTS_OPT}
fi
- name: Build Dillo for ${{ matrix.distro }} with ${{ matrix.build-system }} and ${{ matrix.compiler }}
run: |
if [ "${{ matrix.build-system }}" = "autotools" ]; then
cd build
make && make install
else
ninja -C build
fi
- if: matrix.build-system == 'autotools'
name: (Autotools) Prepare for tests
run: |
mkdir -p ~/.dillo/
dillorc=$(find install -type f -name dillorc)
cp ${dillorc} ~/.dillo/
- name: Run tests
run: |
if [ "${{ matrix.build-system }}" = "autotools" ]; then
cd build
export DILLOBIN=$(readlink -f bin/dillo)
make check || (cat test/html/test-suite.log; false)
export DILLOBIN=
else
meson test -C build -v
fi
- name: Check release fits in a floppy disk of 1.44 MB
run: |
if [ "${{ matrix.build-system }}" = "autotools" ]; then
cd build
make dist-gzip
size=$(stat -c %s dillo-*.tar.gz)
floppy=$((1474560 - 32*1024)) # Leave room for FAT table
echo "Floppy occupation: $(($size * 100 / $floppy)) %"
if [ $size -lt $floppy ]; then
echo 'OK: Fits in floopy disk'
else
echo "FAIL: Release size too big: $size / $floppy"
exit 1
fi
else
echo "Skipping floppy disk check for Meson build; not yet implemented"
fi
- name: Run distcheck
run: |
HTML_TESTS_OPT=""
if [ "${{ matrix.distro }}" = "ubuntu" ] && [ "${{matrix.compiler}}" = "gcc" ] && [ "${{ matrix.tls }}" = "none" ]; then
if [ "${{ matrix.build-system }}" = "autotools" ]; then
HTML_TESTS_OPT="--enable-html-tests"
fi
fi
if [ "${{ matrix.distro}}" = "ubuntu" ]; then
if [ "${{ matrix.build-system }}" = "autotools" ]; then
mkdir build-distcheck install-distcheck
cd build-distcheck && ../configure --prefix=$(readlink -f ../install-distcheck) ${HTML_TESTS_OPT}
make distcheck DISTCHECK_CONFIGURE_FLAGS="${HTML_TESTS_OPT}"
else
echo "TODO: run \`meson dist -C build\`; currently errors out"
fi
else
echo "Skipping distcheck for OS ${{ matrix.distro }}"
fi
macOS-13:
runs-on: macos-13
strategy:
matrix:
build-system: [autotools, meson]
tls: [openssl-1.1, openssl-3, mbedtls]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Install dependencies
run: |
tls_lib=""
if [ "${{ matrix.tls }}" = "mbedtls" ]; then
tls_lib="mbedtls"
elif [ "${{ matrix.tls }}" = "openssl-3" ]; then
brew uninstall [email protected]
tls_lib="openssl@3"
fi
brew install autoconf automake fltk meson ${tls_lib}
- if: matrix.build-system == 'autotools'
name: Prepare Build
run: ./autogen.sh
- name: Configure Build
run: |
if [ "${{ matrix.build-system }}" = "autotools" ]; then
if [ "${{ matrix.tls }}" = "mbedtls" ]; then
./configure --disable-openssl
else
./configure --disable-mbedtls
fi
else
if [ "${{ matrix.tls }}" = "mbedtls" ]; then
meson setup build --buildtype=release --prefix=$(pwd)/install -Dmbedtls=true -Dopenssl=false
else
meson setup build --buildtype=release --prefix=$(pwd)/install -Dmbedtls=false -Dopenssl=true
fi
fi
- name: Build Dillo for macOS-13 with ${{ matrix.build-system }}
run: |
if [ "${{ matrix.build-system }}" = "autotools" ]; then
make
else
ninja -C build
fi
- name: Run tests
run: |
if [ "${{ matrix.build-system }}" = "autotools" ]; then
make check
else
# This will give more jobs time to finish while we debug the HTML tests
meson test -C build --timeout-multiplier 2
fi
- name: Run distcheck
run: |
if [ "${{ matrix.build-system }}" = "autotools" ]; then
make distcheck
else
echo "TODO: run \`meson dist -C build\`; currently errors out"
fi
FreeBSD-14:
runs-on: ubuntu-latest
strategy:
matrix:
build-system: [autotools, meson]
steps:
- uses: actions/checkout@v4
- name: FreeBSD VM build
id: test
uses: vmactions/freebsd-vm@v1
with:
release: "14.0"
usesh: true
prepare: |
set -x
pkg install -y automake fltk meson ninja
run: |
set -x
pwd
freebsd-version
if [ "${{ matrix.build-system }}" = "autotools" ]; then
./autogen.sh
./configure CPPFLAGS='-I/usr/local/include' LDFLAGS='-L/usr/local/lib'
cat config.log
make
make check
ldd src/dillo
else
CPPFLAGS='-I/usr/local/include' LDFLAGS='-L/usr/local/lib' meson setup build
ninja -C build
ninja -C build test
ldd build/src/dillo
fi
Windows:
runs-on: windows-latest
strategy:
matrix:
build-system: [autotools, meson]
tls: [openssl, mbedtls]
steps:
- run: git config --global core.autocrlf input
- uses: actions/checkout@v4
with:
fetch-depth: 1
- uses: cygwin/cygwin-install-action@master
with:
packages: autoconf automake gcc-core gcc-g++ libfltk-devel libgif-devel libiconv-devel libjpeg-devel libpng-devel libssl-devel make mbedtls-devel ninja zlib-devel python3-pip
- shell: C:\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr '{0}'
run: |
set -x
cd ${GITHUB_WORKSPACE}
pwd
ls -l
if [ "${{ matrix.build-system }}" = "autotools" ]; then
./autogen.sh
if [ "${{ matrix.tls }}" = "mbedtls" ]; then
./configure --disable-openssl
else
./configure --disable-mbedtls
fi
make
make check
ls -l src/dillo
else
pip3.9 install meson
if [ "${{ matrix.tls }}" = "mbedtls" ]; then
meson setup build -Dmbedtls=true -Dopenssl=false
else
meson setup build -Dmbedtls=false -Dopenssl=true
fi
ninja -C build
ninja -C build test
ls -l build/src/dillo
fi