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($os_vnd, $splat_map = null) {
97 if ($os_vnd === "Windows") {
99 - name
: Prepare
environment (Windows
)
101 echo "c:\msys64\usr\bin" | Out
-File
-FilePath
$env:GITHUB_PATH
-Encoding utf8
-Append
102 echo "c:\msys64\mingw64\bin" | Out
-File
-FilePath
$env:GITHUB_PATH
-Encoding utf8
-Append
103 - name
: Prepare
environment (MinGW
)
104 if: env
.CC_VND
== 'mingw'
106 echo "CMAKE_GENERATOR=\"MinGW Makefiles\"" | Out
-File
-FilePath
$env:GITHUB_ENV
-Encoding utf8
-Append
108 } elseif ($splat_map !== false) {
109 foreach (MAP
as $os_is => $os_vers) {
110 foreach ($os_vers as $os_ver => $cc_vnds_) {
111 if (!$splat_map && DEF
[DEF
["os"]] != $os_ver) continue;
112 foreach ($cc_vnds_ as $cc_vnd_is => $cc_vnds) {
113 foreach ($cc_vnds as $cc_vnd => $cc_vers_) {
114 if (!$splat_map && DEF
[DEF
[DEF
["os"]]] != $cc_vnd) continue;
115 foreach ($cc_vers_ as $cc_ver_is => $cc_vers) {
116 foreach ($cc_vers as $cc_ver => $ver) {
117 if (!$splat_map && DEF
[DEF
[DEF
[DEF
["os"]]]]["ver"] != $cc_ver) continue;
119 - name
: Prepare
environment (<?
= "for $cc_ver $cc_vnd on $os_ver" ?
>)
120 if: (<?
="$os_is=='$os_ver') && ($cc_vnd_is=='$cc_vnd') && ($cc_ver_is=='$cc_ver'"?
>)
122 echo CC
="<?=DEF[$cc_vnd]["CC
"] . $ver?>" >> $
{GITHUB_ENV
}
123 echo CXX
="<?=DEF[$cc_vnd]["CXX
"] . $ver?>" >> $
{GITHUB_ENV
}
125 if (isset(ENV
[$os_ver][$cc_vnd][$cc_ver])) {
126 foreach (ENV
[$os_ver][$cc_vnd][$cc_ver] as $env => $val) {
128 echo <?
=$env?
>="<?=$val?>" >> $
{GITHUB_ENV
}
141 function steps_getdeps($os_vnd) {
143 - name
: Install
dependencies (<?
=$os_vnd?
>)
144 if: runner
.os
== '<?=$os_vnd?>'
146 if ($os_vnd === "Linux") :
149 sudo apt
-get install
-my \
154 $
{INSTALL_MEMCACHED
} \
155 $
{INSTALL_CC
} $
{INSTALL_CXX
}
156 sudo systemctl stop memcached ||
true
159 if ($os_vnd === "macOS") :
162 brew install bison flex sphinx
-doc $
{INSTALL_MEMCACHED
}
163 brew services stop memcached ||
true
164 echo MEMCACHED_BINARY
="/usr/local/bin/memcached" >> $
{GITHUB_ENV
}
167 if ($os_vnd === "Windows") :
169 uses
: msys2
/setup
-msys2@v2
178 if ($os_vnd != "Windows") :
180 - name
: Build memcached
181 if: runner
.os
!= 'Windows'
187 ./configure CFLAGS
="-O2 -pipe" \
188 --prefix
=$
{MEMCACHED_PREFIX
} \
192 --disable
-dependency
-tracking \
195 --disable
-option
-checking \
200 echo MEMCACHED_BINARY
="${MEMCACHED_PREFIX}/bin/memcached" >> $
{GITHUB_ENV
}
206 function steps_build() {
208 - name
: Generate build
tree ($
{{ env
.CMAKE_BUILD_TYPE
}})
209 run
: cmake
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -S
. -B build
210 - name
: Build all with $
{{ env
.CXX
}} $
{{ env
.CXXFLAGS
}}
211 run
: cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
215 function steps_test() {
218 if: env
.BUILD_TESTING
== 'ON'
219 run
: cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
--target test
221 if: env
.BUILD_TESTING
== 'ON'
222 run
: cmake
--install build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} --prefix
/tmp
223 - name
: Failed tests log
224 if: $
{{ env
.BUILD_TESTING
== 'ON' && failure() }}
225 run
: cat build
/Testing
/Temporary
/LastTest
.log ||
true
229 function steps_package() {
233 PUSH_ARTIFACTS_ID
: $
{{ secrets
.PUSH_ARTIFACTS_ID
}}
234 if: env
.CC_VER
== 'cur' && env
.CMAKE_BUILD_TYPE
== 'Release'
236 cmake
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -S
. -B build
237 cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
--target package
238 cmake
-DCPACK_COMPONENT_INSTALL
=ON build
239 cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
--target package
240 cmake
--build build
--config $
{{ env
.CMAKE_BUILD_TYPE
}} -j2
--target push
-artifacts
244 function steps_notify($os_vnd) {
245 if ($os_vnd !== "Windows") :
247 - name
: Notify
Gitter (success
)
248 if: $
{{ success() && runner
.os
!= 'Windows'}}
250 REF
=$
(basename $
{GITHUB_REF
})
251 curl
-sS
"${{ secrets.GITTER }}" \
252 --data
-urlencode
"level=info" \
253 --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}})"
254 - name
: Notify
Gitter (failure
)
255 if: $
{{ failure() && runner
.os
!= 'Windows'}}
257 REF
=$
(basename $
{GITHUB_REF
})
258 curl
-sS
"${{ secrets.GITTER }}" \
259 --data
-urlencode
"level=error" \
260 --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}})"
265 function steps($os_vnd, $splat_map = null) {
266 steps_setenv($os_vnd, $splat_map);
267 steps_getdeps($os_vnd);
271 steps_notify($os_vnd);
274 function defaults($os_vnd = DEF
["os"]) {
275 $os_ver = DEF
[$os_vnd];
276 $cc_vnd = DEF
[$os_ver];
277 $cc_ver = DEF
[$cc_vnd]["ver"];
278 return "$os_ver, $cc_vnd, $cc_ver";
281 function env_override($os_vnd, $cc_vnd = null) {
282 isset($cc_vnd) or $cc_vnd = DEF
[DEF
[$os_vnd]];
284 OS_VND
: <?
=$os_vnd?
> #
285 OS_VER
: <?
=DEF
[$os_vnd]?
> #
286 CC_VND
: <?
=$cc_vnd?
> #
287 CC_VER
: <?
=DEF
[$cc_vnd]["ver"]?
> #
302 - ".github/workflows/cmake-build-ci*"
311 INSTALL_MEMCACHED
: memcached
312 ENABLE_SASL
: "OFF" # ^ almost no memcached distribution package has built in sasl support
313 ENABLE_HASH_HSIEH
: "ON"
315 OS_VND
: <?
=DEF
["os"]?
> #
316 OS_VER
: <?
=DEF
[DEF
["os"]]?
> #
317 CC_VND
: <?
=DEF
[DEF
[DEF
["os"]]]?
> #
318 CC_VER
: <?
=DEF
[DEF
[DEF
[DEF
["os"]]]]["ver"]?
> #
324 name
: dbg
-new (<?
=defaults()?
>)
325 runs
-on
: <?
=DEF
[DEF
["os"]]?
> #
327 CMAKE_BUILD_TYPE
: "Debug"
330 CFLAGS
: "-O0 --coverage"
331 CXXFLAGS
: "-O0 --coverage"
332 INSTALL_MEMCACHED
: ""
333 MEMCACHED_PREFIX
: "/tmp"
336 - uses
: actions
/checkout@v2
337 - uses
: actions
/checkout@v2
339 repository
: memcached
/memcached
342 <?php
steps("Linux"); ?
>
343 - uses
: codecov
/codecov
-action@v1
.0
.13
347 runs
-on
: <?
=DEF
[DEF
["os"]]?
> #
350 sanitizer
: ['address;undefined', 'thread']
352 CMAKE_BUILD_TYPE
: "Debug"
355 ENABLE_SANITIZERS
: $
{{ matrix
.sanitizer
}}
357 - uses
: actions
/checkout@v2
358 <?php
steps("Linux"); ?
>
362 name
: dbg
-mac (<?
=DEF
["macOS"]?
>, <?
=DEF
[DEF
["macOS"]]?
>, <?
=DEF
[DEF
[DEF
["macOS"]]]["ver"]?
>)
363 runs
-on
: <?
=DEF
["macOS"]?
> #
365 CMAKE_BUILD_TYPE
: "Debug"
368 CFLAGS
: "-O0 --coverage"
369 CXXFLAGS
: "-O0 --coverage"
370 <?php
env_override("macOS")?
>
371 continue-on
-error
: true
373 - uses
: actions
/checkout@v2
374 <?php
steps("macOS", false); ?
>
375 - uses
: codecov
/codecov
-action@v1
.0
.13
379 name
: rel
-mac (<?
=DEF
["macOS"]?
>, <?
=DEF
[DEF
["macOS"]]?
>, <?
=DEF
[DEF
[DEF
["macOS"]]]["ver"]?
>)
380 runs
-on
: <?
=DEF
["macOS"]?
> #
382 CMAKE_BUILD_TYPE
: "Release"
383 BUILD_DOCS_MANGZ
: "ON"
384 <?php
env_override("macOS")?
>
385 continue-on
-error
: true
387 - uses
: actions
/checkout@v2
390 <?php
steps(false); ?
>
392 # windows release builds
397 os_ver
: [<?
=DEF
["Windows"]?
>]
398 cc_vnd
: [msvc
, mingw
]
400 runs
-on
: $
{{ matrix
.os_ver
}}
401 continue-on
-error
: true
403 CMAKE_BUILD_TYPE
: "Release"
405 OS_VER
: $
{{ matrix
.os_ver
}}
406 CC_VND
: $
{{ matrix
.cc_vnd
}}
407 CC_VER
: $
{{ matrix
.cc_ver
}}
409 - uses
: actions
/checkout@v2
412 <?php
steps("Windows", true); ?
>
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("Linux", true); ?
>