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