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