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