github: update workflow for new clang version
[awesomized/libmemcached] / .github / workflows / cmake-build-ci.gen
1 #!/usr/bin/env php
2 <?php
3
4 echo "# Generated file; do not edit!\n";
5
6 const DEF = [
7 "os" => "Linux",
8 "Linux" => "ubuntu-20.04",
9 "Windows" => "windows-2019",
10 "macOS" => "macos-10.15",
11 "ubuntu-20.04" => "gnu",
12 "windows-2019" => "msvc",
13 "macos-10.15" => "clang",
14 "gnu" => [
15 "ver" => "cur",
16 "CC" => "gcc",
17 "CXX" => "g++",
18 ],
19 "clang" => [
20 "ver" => "cur",
21 "CC" => "clang",
22 "CXX" => "clang++",
23 ],
24 "msvc" => [ // dummy
25 "ver" => "cur",
26 "CC" => "msvc",
27 "CXX" => "msvc",
28 ],
29 "mingw" => [ // dummy
30 "ver" => "cur",
31 "CC" => "mingw",
32 "CXX" => "mingw",
33 ]
34 ];
35 const MAP = [
36 'env.OS_VER' => [
37 "ubuntu-20.04" => [
38 'env.CC_VND' => [
39 "gnu" => [
40 'env.CC_VER' => [
41 "new" => "-10",
42 "cur" => "-9",
43 ]
44 ],
45 "clang" => [
46 'env.CC_VER' => [
47 "new" => "-12",
48 "cur" => "-11",
49 "old" => "-10"
50 ]
51 ]
52 ]
53 ],
54 "ubuntu-18.04" => [
55 'env.CC_VND' => [
56 "gnu" => [
57 'env.CC_VER' => [
58 "new" => "-10",
59 "cur" => "-9",
60 "old" => "-7"
61 ]
62 ],
63 "clang" => [
64 'env.CC_VER' => [
65 "cur" => "-9",
66 ]
67 ]
68 ]
69 ],
70 ]
71 ];
72 const ENV = [
73 "ubuntu-20.04" => [
74 "clang" => [
75 "new" => [
76 "CXXFLAGS" => "-stdlib=libc++",
77 "INSTALL_CXX" => "libc++-12-dev libc++abi-12-dev"
78 ],
79 "cur" => [
80 "CXXFLAGS" => "-stdlib=libc++",
81 "INSTALL_CXX" => "libc++-11-dev libc++abi-11-dev"
82 ],
83 "old" => [
84 "CXXFLAGS" => "-stdlib=libc++",
85 "INSTALL_CXX" => "libc++-10-dev libc++abi-10-dev"
86 ],
87 ]
88 ],
89 "ubuntu-18.04" => [
90 "clang" => [
91 "new" => [
92 "CXXFLAGS" => "-stdlib=libc++"
93 ],
94 "cur" => [
95 "CXXFLAGS" => "-stdlib=libc++"
96 ],
97 "old" => [
98 "CXXFLAGS" => "-stdlib=libc++"
99 ],
100 ]
101 ]
102 ];
103
104 /**
105 * @var bool $splat_map false = no splat map, null = default splat map, true = full splat map
106 */
107 function steps_setenv($os_vnd, $splat_map = null) {
108 if ($os_vnd === "Windows") {
109 ?>
110 - name: Prepare environment (Windows)
111 run: |
112 echo "c:\msys64\usr\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
113 echo "c:\msys64\mingw64\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
114 - name: Prepare environment (MinGW)
115 if: env.CC_VND == 'mingw'
116 run: |
117 echo 'CMAKE_GENERATOR=MinGW Makefiles' | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
118 <?php
119 } elseif ($splat_map !== false) {
120 foreach (MAP as $os_is => $os_vers) {
121 foreach ($os_vers as $os_ver => $cc_vnds_) {
122 if (!$splat_map && DEF[DEF["os"]] != $os_ver) continue;
123 foreach ($cc_vnds_ as $cc_vnd_is => $cc_vnds) {
124 foreach ($cc_vnds as $cc_vnd => $cc_vers_) {
125 if (!$splat_map && DEF[DEF[DEF["os"]]] != $cc_vnd) continue;
126 foreach ($cc_vers_ as $cc_ver_is => $cc_vers) {
127 foreach ($cc_vers as $cc_ver => $ver) {
128 if (!$splat_map && DEF[DEF[DEF[DEF["os"]]]]["ver"] != $cc_ver) continue;
129 ?>
130 - name: Prepare environment (<?= "for $cc_ver $cc_vnd on $os_ver" ?>)
131 if: (<?="$os_is=='$os_ver') && ($cc_vnd_is=='$cc_vnd') && ($cc_ver_is=='$cc_ver'"?>)
132 run: |
133 echo CC="<?=DEF[$cc_vnd]["CC"] . $ver?>" >> ${GITHUB_ENV}
134 echo CXX="<?=DEF[$cc_vnd]["CXX"] . $ver?>" >> ${GITHUB_ENV}
135 <?php
136 if (isset(ENV[$os_ver][$cc_vnd][$cc_ver])) {
137 foreach (ENV[$os_ver][$cc_vnd][$cc_ver] as $env => $val) {
138 ?>
139 echo <?=$env?>="<?=$val?>" >> ${GITHUB_ENV}
140 <?php
141 }
142 }
143 }
144 }
145 }
146 }
147 }
148 }
149 }
150 }
151
152 function steps_getdeps($os_vnd) {
153 ?>
154 - name: Install dependencies (<?=$os_vnd?>)
155 if: runner.os == '<?=$os_vnd?>'
156 <?php
157 if ($os_vnd === "Linux") :
158 ?>
159 run: |
160 sudo apt-get update -y
161 sudo apt-get install -my \
162 libevent-dev \
163 libsasl2-dev \
164 libtbb-dev \
165 python3-sphinx \
166 ${INSTALL_MEMCACHED} \
167 ${INSTALL_CC} ${INSTALL_CXX}
168 sudo systemctl stop memcached || true
169 <?php
170 endif;
171 if ($os_vnd === "macOS") :
172 ?>
173 run: |
174 brew install bison flex sphinx-doc ${INSTALL_MEMCACHED}
175 brew services stop memcached || true
176 echo MEMCACHED_BINARY="/usr/local/bin/memcached" >> ${GITHUB_ENV}
177 <?php
178 endif;
179 if ($os_vnd === "Windows") :
180 ?>
181 uses: msys2/setup-msys2@v2
182 with:
183 release: false
184 path-type: inherit
185 install: >-
186 rsync
187 openssh
188 <?php
189 endif;
190 if ($os_vnd != "Windows") :
191 ?>
192 - name: Build memcached
193 if: runner.os != 'Windows'
194 run: |
195 if test -d memcached
196 then
197 cd memcached
198 ./autogen.sh
199 ./configure CFLAGS="-O2 -pipe" \
200 --prefix=${MEMCACHED_PREFIX} \
201 --enable-sasl \
202 --enable-sasl-pwdb \
203 --disable-coverage \
204 --disable-dependency-tracking \
205 --disable-docs \
206 --disable-extstore \
207 --disable-option-checking \
208 ;
209 make -j2
210 make install
211 cd ..
212 echo MEMCACHED_BINARY="${MEMCACHED_PREFIX}/bin/memcached" >> ${GITHUB_ENV}
213 fi
214 <?php
215 endif;
216 }
217
218 function steps_build() {
219 ?>
220 - name: Generate build tree (${{ env.CMAKE_BUILD_TYPE }})
221 run: cmake -DCMAKE_BUILD_TYPE=${{ env.CMAKE_BUILD_TYPE }} -S . -B build
222 - name: Build all with ${{ env.CXX }} ${{ env.CXXFLAGS }}
223 run: cmake --build build --config ${{ env.CMAKE_BUILD_TYPE }} -j2
224 <?php
225 }
226
227 function steps_test() {
228 ?>
229 - name: Test
230 if: env.BUILD_TESTING == 'ON'
231 run: cmake --build build --config ${{ env.CMAKE_BUILD_TYPE }} -j2 --target test
232 - name: Install
233 if: env.BUILD_TESTING == 'ON'
234 run: cmake --install build --config ${{ env.CMAKE_BUILD_TYPE }} --prefix /tmp
235 - name: Failed tests log
236 if: ${{ env.BUILD_TESTING == 'ON' && failure() }}
237 run: cat build/Testing/Temporary/LastTest.log || true
238 <?php
239 }
240
241 function steps_package() {
242 ?>
243 - name: Package
244 env:
245 PUSH_ARTIFACTS_ID: ${{ secrets.PUSH_ARTIFACTS_ID }}
246 if: env.PUSH_ARTIFACTS_ID != '' && env.CMAKE_BUILD_TYPE == 'Release' && !(env.OS_VER == 'ubuntu-18.04' && env.CC_VND == 'gnu' && env.CC_VER == 'new ')
247 run: |
248 cmake -DCMAKE_BUILD_TYPE=${{ env.CMAKE_BUILD_TYPE }} -S . -B build
249 cmake --build build --config ${{ env.CMAKE_BUILD_TYPE }} -j2 --target package
250 cmake -DCPACK_COMPONENT_INSTALL=ON build
251 cmake --build build --config ${{ env.CMAKE_BUILD_TYPE }} -j2 --target package
252 cmake --build build --config ${{ env.CMAKE_BUILD_TYPE }} -j2 --target push-artifacts
253 <?php
254 }
255
256 function steps_notify($os_vnd) {
257 ?>
258 - name: Notify Gitter
259 env:
260 GITTER: ${{ secrets.GITTER }}
261 if: (success() || failure()) && env.GITTER != ''
262 run: bash .github/notify-gitter.sh ${{ job.status }}
263 <?php
264 }
265
266 function steps($os_vnd, $splat_map = null) {
267 steps_setenv($os_vnd, $splat_map);
268 steps_getdeps($os_vnd);
269 steps_build();
270 steps_test();
271 steps_package();
272 steps_notify($os_vnd);
273 }
274
275 function defaults($os_vnd = DEF["os"]) {
276 $os_ver = DEF[$os_vnd];
277 $cc_vnd = DEF[$os_ver];
278 $cc_ver = DEF[$cc_vnd]["ver"];
279 return "$os_ver, $cc_vnd, $cc_ver";
280 }
281
282 function env_override($os_vnd, $cc_vnd = null) {
283 isset($cc_vnd) or $cc_vnd = DEF[DEF[$os_vnd]];
284 ?>
285 OS_VND: <?=$os_vnd?> #
286 OS_VER: <?=DEF[$os_vnd]?> #
287 CC_VND: <?=$cc_vnd?> #
288 CC_VER: <?=DEF[$cc_vnd]["ver"]?> #
289 <?php
290 }
291
292 ?>
293 name: cmake-build-ci
294 on:
295 workflow_dispatch:
296 release:
297 types: [published]
298 push:
299 paths:
300 - ".github/workflows/cmake-build-ci*"
301 - "CMake*"
302 - "CPack*"
303 - "contrib/**"
304 - "include/**"
305 - "src/**"
306 - "test/**"
307 branches-ignore:
308 - gh-pages
309 pull_request:
310 branches:
311 - master
312 - v1.x
313 env:
314 # defaults
315 INSTALL_MEMCACHED: memcached
316 ENABLE_SASL: "OFF" # ^ almost no memcached distribution package has built in sasl support
317 ENABLE_HASH_HSIEH: "ON"
318 ENABLE_DTRACE: "OFF"
319 OS_VND: <?=DEF["os"]?> #
320 OS_VER: <?=DEF[DEF["os"]]?> #
321 CC_VND: <?=DEF[DEF[DEF["os"]]]?> #
322 CC_VER: <?=DEF[DEF[DEF[DEF["os"]]]]["ver"]?> #
323
324 jobs:
325
326 # new memcached
327 dbg-new:
328 name: dbg-new (<?=defaults()?>)
329 runs-on: <?=DEF[DEF["os"]]?> #
330 env:
331 CMAKE_BUILD_TYPE: "Debug"
332 BUILD_TESTING: "ON"
333 VERBOSE: "ON"
334 CFLAGS: "-O0 --coverage"
335 CXXFLAGS: "-O0 --coverage"
336 INSTALL_MEMCACHED: ""
337 MEMCACHED_PREFIX: "/tmp"
338 ENABLE_SASL: "ON"
339 steps:
340 - uses: actions/checkout@v2
341 - uses: actions/checkout@v2
342 with:
343 repository: memcached/memcached
344 path: memcached
345 ref: 1.6.7
346 <?php steps("Linux"); ?>
347 - uses: codecov/codecov-action@v1.0.13
348
349 # sanitizer build
350 sanitizer:
351 runs-on: <?=DEF[DEF["os"]]?> #
352 strategy:
353 matrix:
354 sanitizer: ['address;undefined', 'thread']
355 env:
356 CMAKE_BUILD_TYPE: "Debug"
357 BUILD_TESTING: "ON"
358 VERBOSE: "ON"
359 ENABLE_SANITIZERS: ${{ matrix.sanitizer }}
360 steps:
361 - uses: actions/checkout@v2
362 <?php steps("Linux"); ?>
363
364 # mac debug
365 dbg-mac:
366 name: dbg-mac (<?=DEF["macOS"]?>, <?=DEF[DEF["macOS"]]?>, <?=DEF[DEF[DEF["macOS"]]]["ver"]?>)
367 runs-on: <?=DEF["macOS"]?> #
368 env:
369 CMAKE_BUILD_TYPE: "Debug"
370 BUILD_TESTING: "ON"
371 VERBOSE: "ON"
372 CFLAGS: "-O0 --coverage"
373 CXXFLAGS: "-O0 --coverage"
374 <?php env_override("macOS")?>
375 continue-on-error: true
376 steps:
377 - uses: actions/checkout@v2
378 <?php steps("macOS", false); ?>
379 - uses: codecov/codecov-action@v1.0.13
380
381 # mac release
382 rel-mac:
383 name: rel-mac (<?=DEF["macOS"]?>, <?=DEF[DEF["macOS"]]?>, <?=DEF[DEF[DEF["macOS"]]]["ver"]?>)
384 runs-on: <?=DEF["macOS"]?> #
385 env:
386 CMAKE_BUILD_TYPE: "Release"
387 BUILD_DOCS_MANGZ: "ON"
388 <?php env_override("macOS")?>
389 continue-on-error: true
390 steps:
391 - uses: actions/checkout@v2
392 with:
393 fetch-depth: 0
394 <?php steps("macOS", false); ?>
395
396 # windows release builds
397 windows:
398 strategy:
399 fail-fast: false
400 matrix:
401 os_ver: [<?=DEF["Windows"]?>]
402 cc_vnd: [msvc, mingw]
403 cc_ver: [cur]
404 runs-on: ${{ matrix.os_ver }}
405 continue-on-error: true
406 env:
407 CMAKE_BUILD_TYPE: "Release"
408 OS_VND: Windows
409 OS_VER: ${{ matrix.os_ver }}
410 CC_VND: ${{ matrix.cc_vnd }}
411 CC_VER: ${{ matrix.cc_ver }}
412 steps:
413 - uses: actions/checkout@v2
414 with:
415 fetch-depth: 0
416 <?php steps("Windows", true); ?>
417
418 # linux release builds
419 release:
420 strategy:
421 fail-fast: false
422 matrix:
423 os_ver: [ubuntu-20.04, ubuntu-18.04]
424 cc_vnd: [gnu, clang]
425 cc_ver: [new, cur, old]
426 runs-on: ${{ matrix.os_ver }}
427 continue-on-error: ${{ matrix.cc_vnd == 'clang' }}
428 env:
429 CMAKE_BUILD_TYPE: "Release"
430 BUILD_DOCS_MANGZ: "ON"
431 OS_VND: Linux
432 OS_VER: ${{ matrix.os_ver }}
433 CC_VND: ${{ matrix.cc_vnd }}
434 CC_VER: ${{ matrix.cc_ver }}
435 steps:
436 - uses: actions/checkout@v2
437 with:
438 fetch-depth: 0
439 <?php steps("Linux", true); ?>