4 echo "# Generated file; do not edit!\n";
8 "Linux" => "ubuntu-20.04",
9 "Windows" => "windows-2019",
10 "macOS" => "macos-10.15",
11 "ubuntu-20.04" => "gnu",
12 "windows-2019" => "msvc",
13 "macos-10.15" => "clang",
39 "INSTALL_CC" => "gcc-10",
40 "INSTALL_CXX" => "g++-10",
47 "CXXFLAGS" => "-stdlib=libc++"
94 * @var bool $splat_map false = no splat map, null = default splat map, true = full splat map
96 function steps_setenv($splat_map = null) {
97 if ($splat_map !== false) {
98 foreach (MAP
as $os_is => $os_vers) {
99 foreach ($os_vers as $os_ver => $cc_vnds_) {
100 if (!$splat_map && DEF
[DEF
["os"]] != $os_ver) continue;
101 foreach ($cc_vnds_ as $cc_vnd_is => $cc_vnds) {
102 foreach ($cc_vnds as $cc_vnd => $cc_vers_) {
103 if (!$splat_map && DEF
[DEF
[DEF
["os"]]] != $cc_vnd) continue;
104 foreach ($cc_vers_ as $cc_ver_is => $cc_vers) {
105 foreach ($cc_vers as $cc_ver => $ver) {
106 if (!$splat_map && DEF
[DEF
[DEF
[DEF
["os"]]]]["ver"] != $cc_ver) continue;
108 - name
: Prepare
environment (<?
= "for $cc_ver $cc_vnd on $os_ver" ?
>)
109 if: (<?
="$os_is=='$os_ver') && ($cc_vnd_is=='$cc_vnd') && ($cc_ver_is=='$cc_ver'"?
>)
111 echo CC
="<?=DEF[$cc_vnd]["CC
"] . $ver?>" >> $
{GITHUB_ENV
}
112 echo CXX
="<?=DEF[$cc_vnd]["CXX
"] . $ver?>" >> $
{GITHUB_ENV
}
114 if (isset(ENV
[$os_ver][$cc_vnd][$cc_ver])) {
115 foreach (ENV
[$os_ver][$cc_vnd][$cc_ver] as $env => $val) {
117 echo <?
=$env?
>="<?=$val?>" >> $
{GITHUB_ENV
}
130 function steps_getdeps() {
132 - name
: Install
dependencies (Linux
)
133 if: runner
.os
== 'Linux'
135 sudo apt
-get install
-my \
140 $
{INSTALL_MEMCACHED
} \
141 $
{INSTALL_CC
} $
{INSTALL_CXX
}
142 sudo systemctl stop memcached ||
true
143 - name
: Install
dependencies (Mac
)
144 if: runner
.os
== 'macOS'
146 brew install bison flex sphinx
-doc $
{INSTALL_MEMCACHED
}
147 brew services stop memcached ||
true
148 echo MEMCACHED_BINARY
="/usr/local/bin/memcached" >> $
{GITHUB_ENV
}
149 - name
: Build memcached
150 if: runner
.os
!= 'Windows'
156 ./configure CFLAGS
="-O2 -pipe" \
157 --prefix
=$
{MEMCACHED_PREFIX
} \
161 --disable
-dependency
-tracking \
164 --disable
-option
-checking \
169 echo MEMCACHED_BINARY
="${MEMCACHED_PREFIX}/bin/memcached" >> $
{GITHUB_ENV
}
174 function steps_build() {
176 - name
: Generate build
tree ($
{{ env
.CMAKE_BUILD_TYPE
}})
177 run
: cmake
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -S
. -B build
178 - name
: Build all with $
{{ env
.CXX
}} $
{{ env
.CXXFLAGS
}}
179 run
: cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
183 function steps_test() {
186 if: env
.BUILD_TESTING
== 'ON'
187 run
: cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
--target test
189 if: env
.BUILD_TESTING
== 'ON'
190 run
: cmake
--install build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} --prefix
/tmp
191 - name
: Failed tests log
192 if: $
{{ env
.BUILD_TESTING
== 'ON' && failure() }}
193 run
: cat build
/Testing
/Temporary
/LastTest
.log ||
true
197 function steps_package() {
201 PUSH_ARTIFACTS_ID
: $
{{ secrets
.PUSH_ARTIFACTS_ID
}}
202 if: env
.CC_VER
== 'cur' && env
.CMAKE_BUILD_TYPE
== 'Release'
204 cmake
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -S
. -B build
205 cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
--target package
206 cmake
-DCPACK_COMPONENT_INSTALL
=ON build
207 cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
--target package
208 cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
--target push
-artifacts
212 function steps_notify() {
214 - name
: Notify
Gitter (success
)
215 if: $
{{ success() && runner
.os
!= 'Windows'}}
217 REF
=$
(basename $
{GITHUB_REF
})
218 curl
-sS
"${{ secrets.GITTER }}" \
219 --data
-urlencode
"level=info" \
220 --data
-urlencode
"message=Github [${GITHUB_REPOSITORY}](https://github.com/${GITHUB_REPOSITORY}/commits/${REF}) (${REF}) [success](https://github.com/m6w6/libmemcached/actions/runs/${GITHUB_RUN_ID}) (${ImageOS}/${CC:-${CC_VND}-${CC_VER}})"
221 - name
: Notify
Gitter (failure
)
222 if: $
{{ failure() && runner
.os
!= 'Windows'}}
224 REF
=$
(basename $
{GITHUB_REF
})
225 curl
-sS
"${{ secrets.GITTER }}" \
226 --data
-urlencode
"level=error" \
227 --data
-urlencode
"message=Github [${GITHUB_REPOSITORY}](https://github.com/${GITHUB_REPOSITORY}/commits/${REF}) (${REF}) [failure](https://github.com/m6w6/libmemcached/actions/runs/${GITHUB_RUN_ID}) (${ImageOS}/${CC:-${CC_VND}-${CC_VER}})"
231 function steps($splat_map = null) {
232 steps_setenv($splat_map);
240 function defaults($os_vnd = DEF
["os"]) {
241 $os_ver = DEF
[$os_vnd];
242 $cc_vnd = DEF
[$os_ver];
243 $cc_ver = DEF
[$cc_vnd]["ver"];
244 return "$os_ver, $cc_vnd, $cc_ver";
247 function env_override($os_vnd, $cc_vnd = null) {
248 isset($cc_vnd) or $cc_vnd = DEF
[DEF
[$os_vnd]];
250 OS_VND
: <?
=$os_vnd?
> #
251 OS_VER
: <?
=DEF
[$os_vnd]?
> #
252 CC_VND
: <?
=$cc_vnd?
> #
253 CC_VER
: <?
=DEF
[$cc_vnd]["ver"]?
> #
268 - ".github/workflows/cmake-build-ci*"
277 INSTALL_MEMCACHED
: memcached
278 ENABLE_SASL
: "OFF" # ^ almost no memcached distribution package has built in sasl support
279 ENABLE_HASH_HSIEH
: "ON"
281 OS_VND
: <?
=DEF
["os"]?
> #
282 OS_VER
: <?
=DEF
[DEF
["os"]]?
> #
283 CC_VND
: <?
=DEF
[DEF
[DEF
["os"]]]?
> #
284 CC_VER
: <?
=DEF
[DEF
[DEF
[DEF
["os"]]]]["ver"]?
> #
290 name
: dbg
-new (<?
=defaults()?
>)
291 runs
-on
: <?
=DEF
[DEF
["os"]]?
> #
293 CMAKE_BUILD_TYPE
: "Debug"
296 CFLAGS
: "-O0 --coverage"
297 CXXFLAGS
: "-O0 --coverage"
298 INSTALL_MEMCACHED
: ""
299 MEMCACHED_PREFIX
: "/tmp"
302 - uses
: actions
/checkout@v2
303 - uses
: actions
/checkout@v2
305 repository
: memcached
/memcached
309 - uses
: codecov
/codecov
-action@v1
.0
.13
313 name
: dbg
-san (<?
=defaults()?
>)
314 runs
-on
: <?
=DEF
[DEF
["os"]]?
> #
316 CMAKE_BUILD_TYPE
: "Debug"
319 ENABLE_SANITIZERS
: "address;undefined"
321 - uses
: actions
/checkout@v2
324 # thread sanitizer build
326 name
: dbg
-tsan (<?
=defaults()?
>)
327 runs
-on
: <?
=DEF
[DEF
["os"]]?
> #
329 CMAKE_BUILD_TYPE
: "Debug"
332 ENABLE_SANITIZERS
: "thread"
334 - uses
: actions
/checkout@v2
339 name
: dbg
-mac (<?
=DEF
["macOS"]?
>, <?
=DEF
[DEF
["macOS"]]?
>, <?
=DEF
[DEF
[DEF
["macOS"]]]["ver"]?
>)
340 runs
-on
: <?
=DEF
["macOS"]?
> #
342 CMAKE_BUILD_TYPE
: "Debug"
345 CFLAGS
: "-O0 --coverage"
346 CXXFLAGS
: "-O0 --coverage"
347 <?php
env_override("macOS")?
> #
348 continue-on
-error
: true
350 - uses
: actions
/checkout@v2
351 <?php
steps(false); ?
>
352 - uses
: codecov
/codecov
-action@v1
.0
.13
356 name
: rel
-mac (<?
=DEF
["macOS"]?
>, <?
=DEF
[DEF
["macOS"]]?
>, <?
=DEF
[DEF
[DEF
["macOS"]]]["ver"]?
>)
357 runs
-on
: <?
=DEF
["macOS"]?
> #
359 CMAKE_BUILD_TYPE
: "Release"
360 BUILD_DOCS_MANGZ
: "ON"
361 <?php
env_override("macOS")?
>
362 continue-on
-error
: true
364 - uses
: actions
/checkout@v2
367 <?php
steps(false); ?
>
371 name
: win
-msvc (<?
=DEF
["Windows"]?
>, <?
=DEF
[DEF
["Windows"]]?
>, <?
=DEF
[DEF
[DEF
["Windows"]]]["ver"]?
>)
372 runs
-on
: <?
=DEF
["Windows"]?
> #
374 CMAKE_BUILD_TYPE
: "Release"
375 BISON_ROOT
: "C:/msys64/usr"
376 FLEX_ROOT
: "C:/msys64/usr"
377 <?php
env_override("Windows", "msvc")?
>
378 continue-on
-error
: true
380 - uses
: actions
/checkout@v2
383 - uses
: msys2
/setup
-msys2@v2
390 <?php
steps(false);?
>
392 # win mingw build (set PATH=%PATH%;c:\msys64\mingw64\bin)
394 name
: win
-mingw (<?
=DEF
["Windows"]?
>, mingw
, <?
=DEF
["mingw"]["ver"]?
>)
395 runs
-on
: <?
=DEF
["Windows"]?
> #
397 CMAKE_BUILD_TYPE
: "Release"
398 CMAKE_GENERATOR
: "MinGW Makefiles"
399 BISON_ROOT
: "C:/msys64/usr"
400 FLEX_ROOT
: "C:/msys64/usr"
401 <?php
env_override("Windows", "mingw")?
>
402 continue-on
-error
: true
404 - uses
: actions
/checkout@v2
405 - uses
: msys2
/setup
-msys2@v2
411 mingw
-w64
-x86_64
-toolchain
412 <?php
steps(false);?
>
414 # linux release builds
419 os_ver
: [ubuntu
-20.04, ubuntu
-18.04]
421 cc_ver
: [new, cur
, old
]
422 runs
-on
: $
{{ matrix
.os_ver
}}
423 continue-on
-error
: $
{{ matrix
.cc_vnd
== 'clang' }}
425 CMAKE_BUILD_TYPE
: "Release"
426 BUILD_DOCS_MANGZ
: "ON"
428 OS_VER
: $
{{ matrix
.os_ver
}}
429 CC_VND
: $
{{ matrix
.cc_vnd
}}
430 CC_VER
: $
{{ matrix
.cc_ver
}}
432 - uses
: actions
/checkout@v2
435 <?php
steps(true); ?
>