contexts here, contexts there...
[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 PRE = " ";
7 const DEF = [
8 "os" => "Linux",
9 "Linux" => "ubuntu-20.04",
10 "macOS" => "macos-10.15",
11 "ubuntu-20.04" => "gnu",
12 "macos-10.15" => "clang",
13 "gnu" => [
14 "ver" => "cur",
15 "CC" => "gcc",
16 "CXX" => "g++",
17 ],
18 "clang" => [
19 "ver" => "",
20 "CC" => "clang",
21 "CXX" => "clang++",
22 ],
23 ];
24 const APT = [
25 "ubuntu-20.04" => [
26 "gnu" => [
27 "new" => [
28 "CC" => "gcc-10",
29 "CXX" => "g++-10",
30 ]
31 ]
32 ],
33 "ubuntu-18.04" => [
34 "clang" => [
35 "old" => [
36 "CC" => "clang-7",
37 "CXX" => "clang-7"
38 ]
39 ]
40 ]
41 ];
42 const MAP = [
43 'env.OS_VER' => [
44 "ubuntu-20.04" => [
45 'env.CC_VND' => [
46 "gnu" => [
47 'env.CC_VER' => [
48 "new" => "-10",
49 "cur" => "-9",
50 "old" => "-8"
51 ]
52 ],
53 "clang" => [
54 'env.CC_VER' => [
55 "new" => "-10",
56 "cur" => "-9",
57 "old" => "-8"
58 ]
59 ]
60 ]
61 ],
62 "ubuntu-18.04" => [
63 'env.CC_VND' => [
64 "gnu" => [
65 'env.CC_VER' => [
66 "new" => "-9",
67 "cur" => "-8",
68 "old" => "-7"
69 ]
70 ],
71 "clang" => [
72 'env.CC_VER' => [
73 "new" => "-9",
74 "cur" => "-8",
75 "old" => "-7"
76 ]
77 ]
78 ]
79 ]
80 ]
81 ];
82
83 /**
84 * @var bool $splat_map false = no splat map, null = default splat map, true = full splat map
85 */
86 function steps_setenv($splat_map = null) {
87 if ($splat_map !== false) {
88 foreach (MAP as $os_is => $os_vers) {
89 foreach ($os_vers as $os_ver => $cc_vnds_) {
90 if (!$splat_map && DEF[DEF["os"]] != $os_ver) continue;
91 foreach ($cc_vnds_ as $cc_vnd_is => $cc_vnds) {
92 foreach ($cc_vnds as $cc_vnd => $cc_vers_) {
93 if (!$splat_map && DEF[DEF[DEF["os"]]] != $cc_vnd) continue;
94 foreach ($cc_vers_ as $cc_ver_is => $cc_vers) {
95 foreach ($cc_vers as $cc_ver => $ver) {
96 if (!$splat_map && DEF[DEF[DEF[DEF["os"]]]]["ver"] != $cc_ver) continue;
97 ?>
98 <?=PRE?> - name: Prepare environment (<?= "for $cc_ver $cc_vnd on $os_ver" ?>)
99 <?=PRE?> if: (<?="$os_is=='$os_ver') && ($cc_vnd_is=='$cc_vnd') && ($cc_ver_is=='$cc_ver'"?>)
100 <?=PRE?> run: |
101 <?=PRE?> echo CC=<?=DEF[$cc_vnd]["CC"] . $ver?> >> ${GITHUB_ENV}
102 <?=PRE?> echo CXX=<?=DEF[$cc_vnd]["CXX"] . $ver?> >> ${GITHUB_ENV}
103 <?php
104 if (isset(APT[$os_ver][$cc_vnd][$cc_ver])) {
105 $dep = APT[$os_ver][$cc_vnd][$cc_ver];
106 ?>
107 <?=PRE?> echo INSTALL_CC='<?=$dep["CC"]?>' >> ${GITHUB_ENV}
108 <?=PRE?> echo INSTALL_CXX='<?=$dep["CXX"]?>' >> ${GITHUB_ENV}
109 <?php
110 }
111 }
112 }
113 }
114 }
115 }
116 }
117 }
118 }
119
120 function steps_getdeps() {
121 ?>
122 <?=PRE?> - name: Install dependencies
123 <?=PRE?> if: runner.os == 'Linux'
124 <?=PRE?> run: sudo apt-get install libevent-dev libsasl2-dev ${INSTALL_MEMCACHED} ${INSTALL_CC} ${INSTALL_CXX}
125 <?php
126 }
127
128 function steps_build() {
129 ?>
130 <?=PRE?> - name: Generate build tree (${{ env.CMAKE_CONFIG_TYPE }})
131 <?=PRE?> run: cmake -S . -B build
132 <?=PRE?> - name: Build all with ${{ env.CXX }} ${{ env.CXXFLAGS }}
133 <?=PRE?> run: make -C build -j2 all
134 <?=PRE?> - name: Test
135 <?=PRE?> run: make -C build -j2 test
136 <?=PRE?> - name: Install
137 <?=PRE?> run: make -C build -j2 install DESTDIR=.
138 <?=PRE?> - name: Failed tests log
139 <?=PRE?> if: ${{ failure() }}
140 <?=PRE?> run: cat build/Testing/Temporary/LastTest.log || true
141 <?php
142 }
143
144 function steps($splat_map = null) {
145 steps_setenv($splat_map);
146 steps_getdeps();
147 steps_build();
148 }
149
150 function defaults() {
151 $os_ver = DEF[DEF["os"]];
152 $cc_vnd = DEF[$os_ver];
153 $cc_ver = DEF[$cc_vnd]["ver"];
154 return "$os_ver, $cc_vnd, $cc_ver";
155 }
156 ?>
157 name: cmake-build-ci
158 on:
159 push:
160 paths-ignore:
161 - "docs/**"
162 branches-ignore:
163 - gh-pages
164 - v1.x
165 pull_request:
166 branches:
167 - master
168 - v1.x
169 env:
170 # defaults
171 INSTALL_MEMCACHED: memcached
172 CMAKE_BUILD_TYPE: Debug
173 BUILD_TESTING: "ON"
174 ENABLE_SASL: "OFF"
175 ENABLE_HASH_HSIEH: "ON"
176 ENABLE_DTRACE: "OFF"
177 VERBOSE: "ON"
178 OS_VND: <?=DEF["os"]?> #
179 OS_VER: <?=DEF[DEF["os"]]?> #
180 CC_VND: <?=DEF[DEF[DEF["os"]]]?> #
181 CC_VER: <?=DEF[DEF[DEF[DEF["os"]]]]["ver"]?> #
182
183 jobs:
184
185 # new memcached
186 ci-new:
187 name: ci-dbg (<?=defaults()?>, memcached-1.6)
188 runs-on: <?=DEF[DEF["os"]]?> #
189 env:
190 INSTALL_MEMCACHED:
191 MEMCACHED_PREFIX: /tmp
192 MEMCACHED_BINARY: /tmp/bin/memcached
193 ENABLE_SASL: "ON"
194 steps:
195 - uses: actions/checkout@v2
196 - uses: actions/checkout@v2
197 with:
198 repository: memcached/memcached
199 path: memcached
200 ref: 1.6.7
201 <?php steps_setenv(); ?>
202 <?php steps_getdeps(); ?>
203 - name: Build memcached
204 run: |
205 cd memcached
206 ./autogen.sh
207 ./configure CFLAGS="-O2 -pipe" \
208 --prefix=${MEMCACHED_PREFIX} \
209 --enable-sasl \
210 --enable-sasl-pwdb \
211 --disable-docs \
212 --disable-coverage \
213 --disable-dependency-tracking
214 make -j2
215 make install
216 cd ..
217 <?php steps_build(); ?>
218
219 # sanitizer build
220 ci-san:
221 name: ci-dbg (<?=defaults()?>, sanitizers)
222 runs-on: <?=DEF[DEF["os"]]?> #
223 env:
224 ENABLE_SANITIZERS: "address;undefined"
225 steps:
226 - uses: actions/checkout@v2
227 <?php steps(); ?>
228
229 # coverage build
230 ci-cov:
231 name: ci-dbg (<?=defaults()?>, coverage)
232 runs-on: <?=DEF[DEF["os"]]?> #
233 env:
234 CFLAGS: -O0 --coverage
235 CXXFLAGS: -O0 --coverage
236 steps:
237 - uses: actions/checkout@v2
238 <?php steps(); ?>
239 - uses: codecov/codecov-action@v1.0.13
240
241 # release builds
242 ci-rel:
243 strategy:
244 fail-fast: false
245 matrix:
246 os_ver: [ubuntu-20.04, ubuntu-18.04]
247 cc_vnd: [gnu, clang]
248 cc_ver: [new, cur, old]
249 runs-on: ${{ matrix.os_ver }}
250 continue-on-error: ${{ matrix.cc_vnd == 'clang' }}
251 env:
252 CMAKE_BUILD_TYPE: Release
253 OS_VND: Linux
254 OS_VER: ${{ matrix.os_ver }}
255 CC_VND: ${{ matrix.cc_vnd }}
256 CC_VER: ${{ matrix.cc_ver }}
257 steps:
258 - uses: actions/checkout@v2
259 <?php steps(true); ?>