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