???
[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" ### skip
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($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 <?=PRE?> - name: Install dependencies
112 <?=PRE?> if: runner.os == 'Linux'
113 <?=PRE?> run: sudo apt-get install libevent-dev libsasl2-dev ${INSTALL_MEMCACHED} ${INSTALL_CC} ${INSTALL_CXX}
114 <?=PRE?> - name: Generate build tree (${CMAKE_CONFIG_TYPE})
115 <?=PRE?> run: cmake -S . -B build
116 <?=PRE?> - name: Build all with ${CXX} ${CXXFLAGS}
117 <?=PRE?> run: make -C build -j2 all
118 <?=PRE?> - name: Test
119 <?=PRE?> run: make -C build -j2 test
120 <?=PRE?> - name: Install
121 <?=PRE?> run: make -C build -j2 install DESTDIR=.
122 <?=PRE?> - name: Failed tests log
123 <?=PRE?> if: ${{ failure() }}
124 <?=PRE?> run: cat Testing/Temporary/LastTest.log
125 <?php
126 }
127
128 ?>
129 name: cmake-build-ci
130 on:
131 push:
132 paths-ignore:
133 - "docs/**"
134 branches-ignore:
135 - gh-pages
136 - v1.x
137 pull_request:
138 branches:
139 - master
140 - v1.x
141 env:
142 # defaults
143 INSTALL_MEMCACHED: memcached
144 CMAKE_CONFIG_TYPE: Debug
145 BUILD_TESTING: "ON"
146 ENABLE_SASL: "ON"
147 ENABLE_HASH_HSIEH: "ON"
148 ENABLE_DTRACE: "ON"
149 VERBOSE: "ON"
150 OS_VND: <?=DEF["os"]?> #
151 OS_VER: <?=DEF[DEF["os"]]?> #
152 CC_VND: <?=DEF[DEF[DEF["os"]]]?> #
153 CC_VER: <?=DEF[DEF[DEF[DEF["os"]]]]["ver"]?> #
154
155 jobs:
156 # release builds
157 ci-rel:
158 strategy:
159 matrix:
160 os: [ubuntu-20.04, ubuntu-18.04]
161 compiler_vendor: [gnu, clang]
162 compiler_version: [new, cur, old]
163 runs-on: ${{ matrix.os }}
164 if: ${{ ! ( matrix.os == 'ubuntu-18.04' && matrix.compiler_vendor == 'clang' && matrix.compiler_version == 'old' ) }}# skip clang-6
165 env:
166 CMAKE_CONFIG_TYPE: Release
167 OS_VND: Linux
168 OS_VER: ${{ matrix.os }}
169 CC_VND: ${{ matrix.compiler_vendor }}
170 CC_VER: ${{ matrix.compiler_version }}
171 steps:
172 - uses: actions/checkout@v2
173 <?php steps(true); ?>
174
175 # sanitizer build
176 ci-san:
177 runs-on: <?=DEF[DEF["os"]]?> #
178 env:
179 ENABLE_SANITIZERS: "address;undefined"
180 steps:
181 - uses: actions/checkout@v2
182 <?php steps(); ?>
183
184 # coverage build
185 ci-cov:
186 runs-on: <?=DEF[DEF["os"]]?> #
187 env:
188 CFLAGS: --coverage
189 CXXFLAGS: --coverage
190 steps:
191 - uses: actions/checkout@v2
192 <?php steps(); ?>
193 - uses: codecov/codecov-action@v1.0.13
194
195 # memcached new
196 ci-new:
197 runs-on: <?=DEF[DEF["os"]]?> #
198 env:
199 INSTALL_MEMCACHED:
200 MEMCACHED_PREFIX: /tmp
201 MEMCACHED_BINARY: /tmp/bin/memcached
202 enable_sasl: yes
203 enable_sasl_pwdb: yes
204 enable_docs: no
205 enable_coverage: no
206 enable_dependency_tracking: no
207 steps:
208 - uses: actions/checkout@v2
209 - uses: actions/checkout@v2
210 with:
211 repository: memcached/memcached
212 path: memcached
213 ref: 1.6.7
214 - name: Build memcached
215 run: |
216 cd memcached
217 ./autogen.sh
218 ./configure CFLAGS="-O2 -pipe" --prefix=${MEMCACHED_PREFIX}
219 make -j2
220 make install
221 cd ..
222 <?php steps(); ?>
223