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