workaround https://github.com/actions/runner/issues/737
[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
141 <?php
142 }
143
144 function steps($splat_map = null) {
145 steps_setenv($splat_map);
146 steps_getdeps();
147 steps_build();
148 }
149
150 ?>
151 name: cmake-build-ci
152 on:
153 push:
154 paths-ignore:
155 - "docs/**"
156 branches-ignore:
157 - gh-pages
158 - v1.x
159 pull_request:
160 branches:
161 - master
162 - v1.x
163 env:
164 # defaults
165 INSTALL_MEMCACHED: memcached
166 CMAKE_BUILD_TYPE: Debug
167 BUILD_TESTING: "ON"
168 ENABLE_SASL: "OFF"
169 ENABLE_HASH_HSIEH: "ON"
170 ENABLE_DTRACE: "OFF"
171 VERBOSE: "ON"
172 OS_VND: <?=DEF["os"]?> #
173 OS_VER: <?=DEF[DEF["os"]]?> #
174 CC_VND: <?=DEF[DEF[DEF["os"]]]?> #
175 CC_VER: <?=DEF[DEF[DEF[DEF["os"]]]]["ver"]?> #
176
177 jobs:
178 # release builds
179 ci-rel:
180 strategy:
181 fail-fast: false
182 matrix:
183 os_ver: [ubuntu-20.04, ubuntu-18.04]
184 cc_vnd: [gnu, clang]
185 cc_ver: [new, cur, old]
186 runs-on: ${{ matrix.os_ver }}
187 continue-on-error: ${{ matrix.cc_vnd == 'clang' }}
188 env:
189 CMAKE_BUILD_TYPE: Release
190 OS_VND: Linux
191 OS_VER: ${{ matrix.os_ver }}
192 CC_VND: ${{ matrix.cc_vnd }}
193 CC_VER: ${{ matrix.cc_ver }}
194 steps:
195 - uses: actions/checkout@v2
196 <?php steps(true); ?>
197
198 # sanitizer build
199 ci-san:
200 runs-on: <?=DEF[DEF["os"]]?> #
201 env:
202 ENABLE_SANITIZERS: "address;undefined"
203 steps:
204 - uses: actions/checkout@v2
205 <?php steps(); ?>
206
207 # coverage build
208 ci-cov:
209 runs-on: <?=DEF[DEF["os"]]?> #
210 env:
211 CFLAGS: -O0 --coverage
212 CXXFLAGS: -O0 --coverage
213 steps:
214 - uses: actions/checkout@v2
215 <?php steps(); ?>
216 - uses: codecov/codecov-action@v1.0.13
217
218 # memcached new
219 ci-new:
220 runs-on: <?=DEF[DEF["os"]]?> #
221 env:
222 INSTALL_MEMCACHED:
223 MEMCACHED_PREFIX: /tmp
224 MEMCACHED_BINARY: /tmp/bin/memcached
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_setenv(); ?>
234 <?php steps_getdeps(); ?>
235 - name: Build memcached
236 run: |
237 cd memcached
238 ./autogen.sh
239 ./configure CFLAGS="-O2 -pipe" \
240 --prefix=${MEMCACHED_PREFIX} \
241 --enable-sasl \
242 --enable-sasl-pwdb \
243 --disable-docs \
244 --disable-coverage \
245 --disable-dependency-tracking
246 make -j2
247 make install
248 cd ..
249 <?php steps_build(); ?>