4 echo "# Generated file; do not edit!\n";
9 "Linux" => "ubuntu-22.04", "ubuntu-22.04" => "gnu",
10 "Windows" => "windows-2022", "windows-2022" => "msvc",
11 "macOS" => "macos-12", "macos-12" => "clang",
22 "CMAKE_GENERATOR" => "Visual Studio"
25 "CMAKE_GENERATOR" => "MinGW Makefiles"
105 "CXXFLAGS" => "-stdlib=libc++",
106 "INSTALL_CXX" => "libc++-14-dev libc++abi-14-dev"
109 "CXXFLAGS" => "-stdlib=libc++",
110 "INSTALL_CXX" => "libc++-13-dev libc++abi-13-dev"
117 "CXXFLAGS" => "-stdlib=libc++",
118 "INSTALL_CXX" => "libc++-12-dev libc++abi-12-dev"
121 "CXXFLAGS" => "-stdlib=libc++",
122 "INSTALL_CXX" => "libc++-11-dev libc++abi-11-dev"
125 "CXXFLAGS" => "-stdlib=libc++",
126 "INSTALL_CXX" => "libc++-10-dev libc++abi-10-dev"
132 function set_addpath($os_vnd, $paths) {
133 foreach ((array) $paths as $path) if ($os_vnd == "Windows") {
135 echo "<?=$path?>" | Out
-File
-FilePath
$env:GITHUB_PATH
-Encoding utf8
-Append
139 echo 'PATH="$PATH:<?=$path?>"' >> $
{GITHUB_ENV
}
143 function step_setenv($os_vnd, $var, $val) {
144 if ($var === "PATH") {
145 return set_addpath($os_vnd, $val);
147 if ($os_vnd == "Windows") {
149 echo '<?=$var?>=<?=$val?>' | Out
-File
-FilePath
$env:GITHUB_ENV
-Encoding utf8
-Append
153 echo <?
=$var?
>="<?=$val?>" >> $
{GITHUB_ENV
}
159 * @var bool $splat_map false = no splat map, null = default splat map, true = full splat map
161 function steps_setenv($os_vnd, $splat_map = null) {
162 if ($os_vnd === "Windows") {
164 - name
: Prepare
environment (Windows
)
166 echo "c:\msys64\usr\bin" | Out
-File
-FilePath
$env:GITHUB_PATH
-Encoding utf8
-Append
167 echo "c:\msys64\mingw64\bin" | Out
-File
-FilePath
$env:GITHUB_PATH
-Encoding utf8
-Append
170 if ($splat_map !== false) {
171 foreach (MAP
[$os_vnd] as $os_is => $os_vers) {
172 foreach ($os_vers as $os_ver => $cc_vnds_) {
173 if (!$splat_map && DEF
[DEF
["os"]] != $os_ver) continue;
174 foreach ($cc_vnds_ as $cc_vnd_is => $cc_vnds) {
175 foreach ($cc_vnds as $cc_vnd => $cc_vers_) {
176 if (!$splat_map && DEF
[DEF
[DEF
["os"]]] != $cc_vnd) continue;
177 foreach ($cc_vers_ as $cc_ver_is => $cc_vers) {
178 foreach ($cc_vers as $cc_ver => $ver) {
179 if (!$splat_map && "cur" != $cc_ver) continue;
181 - name
: Prepare
environment (<?
= "for $cc_ver $cc_vnd on $os_ver" ?
>)
182 if: (<?
="$os_is=='$os_ver') && ($cc_vnd_is=='$cc_vnd') && ($cc_ver_is=='$cc_ver'"?
>)
185 foreach (DEF
[$cc_vnd] as $env => $val) {
186 step_setenv($os_vnd, $env, $val . $ver);
188 if (isset(ENV
[$os_ver][$cc_vnd][$cc_ver])) {
189 foreach (ENV
[$os_ver][$cc_vnd][$cc_ver] as $env => $val) {
190 step_setenv($os_vnd, $env, $val);
202 function steps_getdeps($os_vnd) {
204 - name
: Install
dependencies (<?
=$os_vnd?
>)
205 if: runner
.os
== '<?=$os_vnd?>'
207 if ($os_vnd === "Linux") :
210 sudo apt
-get update
-y
211 sudo apt
-get install
-my \
216 $
{INSTALL_MEMCACHED
} \
217 $
{INSTALL_CC
} $
{INSTALL_CXX
}
218 sudo systemctl stop memcached ||
true
221 if ($os_vnd === "macOS") :
224 brew install bison flex libevent pkg
-config sphinx
-doc $
{INSTALL_MEMCACHED
}
225 brew services stop memcached ||
true
226 echo MEMCACHED_BINARY
="/usr/local/bin/memcached" >> $
{GITHUB_ENV
}
229 if ($os_vnd === "Windows") :
231 uses
: msys2
/setup
-msys2@v2
242 if ($os_vnd != "Windows") :
244 - name
: Build memcached
245 if: runner
.os
!= 'Windows'
251 cp configure
{,.old
} && sed
-e
's/-Werror//g' <configure
.old
>configure
252 ./configure CFLAGS
="-O2 -pipe -fcommon" \
253 --prefix
=$
{MEMCACHED_PREFIX
} \
257 --disable
-dependency
-tracking \
260 --disable
-option
-checking \
265 echo MEMCACHED_BINARY
="${MEMCACHED_PREFIX}/bin/memcached" >> $
{GITHUB_ENV
}
271 function steps_build() {
273 - name
: Generate build
tree ($
{{ env
.CMAKE_BUILD_TYPE
}})
274 run
: cmake
-DCMAKE_BUILD_TYPE
=$
{{ env
.CMAKE_BUILD_TYPE
}} -S
. -B build
275 - name
: Build all with $
{{ env
.CXX
}} $
{{ env
.CXXFLAGS
}}
276 run
: cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
280 function steps_test() {
283 if: env
.BUILD_TESTING
== 'ON'
284 run
: cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
--target test
286 if: env
.BUILD_TESTING
== 'ON'
287 run
: cmake
--install build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} --prefix
/tmp
288 - name
: Failed tests log
289 if: $
{{ env
.BUILD_TESTING
== 'ON' && failure() }}
290 run
: cat build
/Testing
/Temporary
/LastTest
.log ||
true
294 function steps_package() {
298 PUSH_ARTIFACTS_ID
: $
{{ secrets
.PUSH_ARTIFACTS_ID
}}
299 if: env
.PUSH_ARTIFACTS_ID
!= '' && env
.CMAKE_BUILD_TYPE
== 'Release'
301 cmake
-DCMAKE_BUILD_TYPE
=$
{{ env
.CMAKE_BUILD_TYPE
}} -S
. -B build
302 cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
--target package
303 cmake
-DCPACK_COMPONENT_INSTALL
=ON build
304 cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
--target package
305 cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
--target push
-artifacts
309 function steps_notify($os_vnd) {
311 - name
: Notify Gitter
313 GITTER
: $
{{ secrets
.GITTER
}}
314 if: (success() ||
failure()) && env
.GITTER
!= ''
315 run
: bash
.github
/notify
-gitter
.sh $
{{ job
.status
}}
319 function steps($os_vnd, $splat_map = null) {
320 steps_setenv($os_vnd, $splat_map);
321 steps_getdeps($os_vnd);
325 steps_notify($os_vnd);
328 function defaults($os_vnd = DEF
["os"]) {
329 $os_ver = DEF
[$os_vnd];
330 $cc_vnd = DEF
[$os_ver];
331 return "$os_ver, $cc_vnd";
334 function env_override($os_vnd, $cc_vnd = null) {
335 isset($cc_vnd) or $cc_vnd = DEF
[DEF
[$os_vnd]];
337 OS_VND
: <?
=$os_vnd?
> #
338 OS_VER
: <?
=DEF
[$os_vnd]?
> #
339 CC_VND
: <?
=$cc_vnd?
> #
352 - ".github/workflows/cmake-build-ci*"
367 INSTALL_MEMCACHED
: memcached
368 ENABLE_SASL
: "OFF" # ^ almost no memcached distribution package has built in sasl support
369 ENABLE_HASH_HSIEH
: "ON"
371 OS_VND
: <?
=DEF
["os"]?
> #
372 OS_VER
: <?
=DEF
[DEF
["os"]]?
> #
373 CC_VND
: <?
=DEF
[DEF
[DEF
["os"]]]?
> #
380 name
: debug sanitizer
381 runs
-on
: <?
=DEF
[DEF
["os"]]?
> #
384 sanitizer
: ['address;undefined', 'thread']
386 CMAKE_BUILD_TYPE
: "Debug"
389 ENABLE_SANITIZERS
: $
{{ matrix
.sanitizer
}}
391 - uses
: actions
/checkout@v3
392 <?php
steps("Linux"); ?
>
396 name
: debug memcached
397 runs
-on
: <?
=DEF
[DEF
["os"]]?
> #
398 continue-on
-error
: true
401 memcached
: ['master', '1.6.17', '1.6.9', '1.5.22', '1.5.6']
403 CMAKE_BUILD_TYPE
: "Debug"
406 INSTALL_MEMCACHED
: ""
407 MEMCACHED_PREFIX
: "/tmp"
410 - uses
: actions
/checkout@v3
411 - uses
: actions
/checkout@v3
413 repository
: memcached
/memcached
415 ref
: $
{{ matrix
.memcached
}}
416 <?php
steps("Linux"); ?
>
419 debug
-coverage
-linux
:
420 name
: debug
coverage (<?
=defaults()?
>)
421 runs
-on
: <?
=DEF
[DEF
["os"]]?
> #
423 CMAKE_BUILD_TYPE
: "Debug"
426 CFLAGS
: "-O0 --coverage"
427 CXXFLAGS
: "-O0 --coverage"
428 INSTALL_MEMCACHED
: ""
429 MEMCACHED_PREFIX
: "/tmp"
432 - uses
: actions
/checkout@v3
433 - uses
: actions
/checkout@v3
435 repository
: memcached
/memcached
438 <?php
steps("Linux"); ?
>
439 - uses
: codecov
/codecov
-action@v3
444 name
: debug
coverage (<?
=defaults("macOS")?
>)
445 runs
-on
: <?
=DEF
["macOS"]?
> #
447 CMAKE_BUILD_TYPE
: "Debug"
450 CFLAGS
: "-O0 --coverage"
451 CXXFLAGS
: "-O0 --coverage"
452 <?php
env_override("macOS")?
>
453 continue-on
-error
: true
455 - uses
: actions
/checkout@v3
456 <?php
steps("macOS", false); ?
>
457 - uses
: codecov
/codecov
-action@v3
465 os_ver
: [macos
-12, macos
-11, macos
-10.15]
466 runs
-on
: $
{{ matrix
.os_ver
}}
468 CMAKE_BUILD_TYPE
: "Release"
469 BUILD_DOCS_MANGZ
: "ON"
470 <?php
env_override("macOS")?
>
471 continue-on
-error
: true
473 - uses
: actions
/checkout@v3
476 <?php
steps("macOS", false); ?
>
478 # windows release builds
484 os_ver
: [windows
-2022, windows
-2019]
485 cc_vnd
: [msvc
, mingw
]
487 runs
-on
: $
{{ matrix
.os_ver
}}
488 continue-on
-error
: true
490 CMAKE_BUILD_TYPE
: "Release"
492 OS_VER
: $
{{ matrix
.os_ver
}}
493 CC_VND
: $
{{ matrix
.cc_vnd
}}
494 CC_VER
: $
{{ matrix
.cc_ver
}}
496 - uses
: actions
/checkout@v3
499 <?php
steps("Windows", true); ?
>
501 # linux release builds
506 os_ver
: [ubuntu
-22.04, ubuntu
-20.04]
508 cc_ver
: [new, cur
, old
]
509 runs
-on
: $
{{ matrix
.os_ver
}}
510 continue-on
-error
: $
{{ matrix
.cc_vnd
== 'clang' }}
512 CMAKE_BUILD_TYPE
: "Release"
513 BUILD_DOCS_MANGZ
: "ON"
515 OS_VER
: $
{{ matrix
.os_ver
}}
516 CC_VND
: $
{{ matrix
.cc_vnd
}}
517 CC_VER
: $
{{ matrix
.cc_ver
}}
519 - uses
: actions
/checkout@v3
522 <?php
steps("Linux", true); ?
>