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