workflows: docs-publish-pages [ci skip]
[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 - ".travis.yml"
194 - ".cirrus.yml"
195 - ".github/workflows/docs*"
196 branches-ignore:
197 - gh-pages
198 pull_request:
199 branches:
200 - master
201 - v1.x
202 env:
203 # defaults
204 INSTALL_MEMCACHED: memcached
205 CMAKE_BUILD_TYPE: Debug
206 BUILD_TESTING: "ON"
207 ENABLE_SASL: "OFF"
208 ENABLE_HASH_HSIEH: "ON"
209 ENABLE_DTRACE: "OFF"
210 VERBOSE: "ON"
211 OS_VND: <?=DEF["os"]?> #
212 OS_VER: <?=DEF[DEF["os"]]?> #
213 CC_VND: <?=DEF[DEF[DEF["os"]]]?> #
214 CC_VER: <?=DEF[DEF[DEF[DEF["os"]]]]["ver"]?> #
215
216 jobs:
217
218 # new memcached
219 dbg-new:
220 name: dbg-new (<?=defaults()?>)
221 runs-on: <?=DEF[DEF["os"]]?> #
222 env:
223 INSTALL_MEMCACHED:
224 MEMCACHED_PREFIX: /tmp
225 ENABLE_SASL: "ON"
226 steps:
227 - uses: actions/checkout@v2
228 - uses: actions/checkout@v2
229 with:
230 repository: memcached/memcached
231 path: memcached
232 ref: 1.6.7
233 <?php steps(); ?>
234
235 # sanitizer build
236 dbg-san:
237 name: dbg-san (<?=defaults()?>)
238 runs-on: <?=DEF[DEF["os"]]?> #
239 env:
240 ENABLE_SANITIZERS: "address;undefined"
241 steps:
242 - uses: actions/checkout@v2
243 <?php steps(); ?>
244
245 # coverage build
246 dbg-cov:
247 name: dbg-cov (<?=defaults()?>)
248 runs-on: <?=DEF[DEF["os"]]?> #
249 env:
250 CFLAGS: -O0 --coverage
251 CXXFLAGS: -O0 --coverage
252 steps:
253 - uses: actions/checkout@v2
254 <?php steps(); ?>
255 - uses: codecov/codecov-action@v1.0.13
256
257 # mac build
258 dbg-mac:
259 name: dbg-mac (<?=DEF["macOS"]?>, <?=DEF[DEF["macOS"]]?>, <?=DEF[DEF[DEF["macOS"]]]["ver"]?>)
260 runs-on: <?=DEF["macOS"]?> #
261 env:
262 CFLAGS: -O0 --coverage
263 CXXFLAGS: -O0 --coverage
264 continue-on-error: true
265 steps:
266 - uses: actions/checkout@v2
267 <?php steps(false); ?>
268 - uses: codecov/codecov-action@v1.0.13
269
270 # release builds
271 release:
272 strategy:
273 fail-fast: false
274 matrix:
275 os_ver: [ubuntu-20.04, ubuntu-18.04]
276 cc_vnd: [gnu, clang]
277 cc_ver: [new, cur, old]
278 runs-on: ${{ matrix.os_ver }}
279 continue-on-error: ${{ matrix.cc_vnd == 'clang' }}
280 env:
281 CMAKE_BUILD_TYPE: Release
282 OS_VND: Linux
283 OS_VER: ${{ matrix.os_ver }}
284 CC_VND: ${{ matrix.cc_vnd }}
285 CC_VER: ${{ matrix.cc_ver }}
286 steps:
287 - uses: actions/checkout@v2
288 <?php steps(true); ?>