ci: Add support for Cirrus CI
This commit is contained in:
parent
f2d9aeae6d
commit
8c02e465c5
171
.cirrus.yml
Normal file
171
.cirrus.yml
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
env:
|
||||||
|
WIDEMUL: auto
|
||||||
|
BIGNUM: auto
|
||||||
|
STATICPRECOMPUTATION: yes
|
||||||
|
ECMULTGENPRECISION: auto
|
||||||
|
ASM: no
|
||||||
|
BUILD: check
|
||||||
|
WITH_VALGRIND: yes
|
||||||
|
RUN_VALGRIND: no
|
||||||
|
EXTRAFLAGS:
|
||||||
|
HOST:
|
||||||
|
ECDH: no
|
||||||
|
RECOVERY: no
|
||||||
|
SCHNORRSIG: no
|
||||||
|
EXPERIMENTAL: no
|
||||||
|
CTIMETEST: yes
|
||||||
|
BENCH: yes
|
||||||
|
ITERS: 2
|
||||||
|
# We only need the top commit
|
||||||
|
CIRRUS_CLONE_DEPTH: 1
|
||||||
|
|
||||||
|
cat_logs_snippet: &CAT_LOGS
|
||||||
|
always:
|
||||||
|
test_logs_script:
|
||||||
|
- cat tests.log || true
|
||||||
|
- cat exhaustive_tests.log || true
|
||||||
|
- cat valgrind_ctime_test.log || true
|
||||||
|
- cat bench.log || true
|
||||||
|
on_failure:
|
||||||
|
debug_output_script:
|
||||||
|
- cat config.log || true
|
||||||
|
- cat test_env.log || true
|
||||||
|
- env
|
||||||
|
|
||||||
|
task:
|
||||||
|
name: "x86_64: Linux (Alpine Linux, Nix Shell)"
|
||||||
|
container:
|
||||||
|
dockerfile: ci/linux-nixos.Dockerfile
|
||||||
|
# Reduce number of CPUs to be able to do more builds in parallel.
|
||||||
|
cpu: 1
|
||||||
|
# More than enough for our scripts.
|
||||||
|
memory: 1G
|
||||||
|
matrix: &ENV_MATRIX
|
||||||
|
- env: {WIDEMUL: int64, RECOVERY: yes}
|
||||||
|
- env: {WIDEMUL: int64, ECDH: yes, EXPERIMENTAL: yes, SCHNORRSIG: yes}
|
||||||
|
- env: {WIDEMUL: int128}
|
||||||
|
- env: {WIDEMUL: int128, RECOVERY: yes, EXPERIMENTAL: yes, SCHNORRSIG: yes}
|
||||||
|
- env: {WIDEMUL: int128, ECDH: yes, EXPERIMENTAL: yes, SCHNORRSIG: yes}
|
||||||
|
- env: {WIDEMUL: int128, ASM: x86_64}
|
||||||
|
- env: {BIGNUM: no}
|
||||||
|
- env: {BIGNUM: no, RECOVERY: yes, EXPERIMENTAL: yes, SCHNORRSIG: yes}
|
||||||
|
- env: {BIGNUM: no, STATICPRECOMPUTATION: no}
|
||||||
|
- env: {BUILD: distcheck, WITH_VALGRIND: no, CTIMETEST: no, BENCH: no}
|
||||||
|
- env: {CPPFLAGS: -DDETERMINISTIC}
|
||||||
|
- env: {CFLAGS: -O0, CTIMETEST: no}
|
||||||
|
- env:
|
||||||
|
CFLAGS: "-fsanitize=undefined -fno-omit-frame-pointer"
|
||||||
|
LDFLAGS: "-fsanitize=undefined -fno-omit-frame-pointer"
|
||||||
|
UBSAN_OPTIONS: "print_stacktrace=1:halt_on_error=1"
|
||||||
|
BIGNUM: no
|
||||||
|
ASM: x86_64
|
||||||
|
ECDH: yes
|
||||||
|
RECOVERY: yes
|
||||||
|
EXPERIMENTAL: yes
|
||||||
|
SCHNORRSIG: yes
|
||||||
|
CTIMETEST: no
|
||||||
|
- env: { ECMULTGENPRECISION: 2 }
|
||||||
|
- env: { ECMULTGENPRECISION: 8 }
|
||||||
|
- env:
|
||||||
|
RUN_VALGRIND: yes
|
||||||
|
BIGNUM: no
|
||||||
|
ASM: x86_64
|
||||||
|
ECDH: yes
|
||||||
|
RECOVERY: yes
|
||||||
|
EXPERIMENTAL: yes
|
||||||
|
SCHNORRSIG: yes
|
||||||
|
EXTRAFLAGS: "--disable-openssl-tests"
|
||||||
|
BUILD:
|
||||||
|
matrix:
|
||||||
|
- env:
|
||||||
|
CC: gcc
|
||||||
|
- env:
|
||||||
|
CC: clang
|
||||||
|
test_script:
|
||||||
|
- nix-shell ci/shell.nix --run ./ci/cirrus.sh
|
||||||
|
<< : *CAT_LOGS
|
||||||
|
|
||||||
|
task:
|
||||||
|
name: "i686: Linux (Alpine Linux, Nix Shell)"
|
||||||
|
container:
|
||||||
|
dockerfile: ci/linux-nixos.Dockerfile
|
||||||
|
cpu: 1
|
||||||
|
memory: 1G
|
||||||
|
env:
|
||||||
|
HOST: i686-linux-gnu
|
||||||
|
ECDH: yes
|
||||||
|
RECOVERY: yes
|
||||||
|
EXPERIMENTAL: yes
|
||||||
|
SCHNORRSIG: yes
|
||||||
|
matrix:
|
||||||
|
- env:
|
||||||
|
CC: gcc
|
||||||
|
- env:
|
||||||
|
CC: clang
|
||||||
|
matrix:
|
||||||
|
- env:
|
||||||
|
BIGNUM: gmp
|
||||||
|
- env:
|
||||||
|
BIGNUM: no
|
||||||
|
test_script:
|
||||||
|
- nix-shell ci/shell-i686.nix --run ./ci/cirrus.sh
|
||||||
|
<< : *CAT_LOGS
|
||||||
|
|
||||||
|
task:
|
||||||
|
name: "x86_64: macOS Catalina"
|
||||||
|
macos_instance:
|
||||||
|
image: catalina-base
|
||||||
|
matrix:
|
||||||
|
<< : *ENV_MATRIX
|
||||||
|
matrix:
|
||||||
|
- env:
|
||||||
|
CC: gcc-9
|
||||||
|
- env:
|
||||||
|
CC: clang
|
||||||
|
# Update Command Line Tools
|
||||||
|
# Uncomment this if the Command Line Tools on the CirrusCI macOS image are too old to brew valgrind.
|
||||||
|
# See https://apple.stackexchange.com/a/195963 for the implementation.
|
||||||
|
## update_clt_script:
|
||||||
|
## - system_profiler SPSoftwareDataType
|
||||||
|
## - touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
|
||||||
|
## - |-
|
||||||
|
## PROD=$(softwareupdate -l | grep "*.*Command Line" | tail -n 1 | awk -F"*" '{print $2}' | sed -e 's/^ *//' | sed 's/Label: //g' | tr -d '\n')
|
||||||
|
## # For debugging
|
||||||
|
## - softwareupdate -l && echo "PROD: $PROD"
|
||||||
|
## - softwareupdate -i "$PROD" --verbose
|
||||||
|
## - rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
|
||||||
|
##
|
||||||
|
brew_script:
|
||||||
|
# TODO cache the binaries
|
||||||
|
- export HOMEBREW_NO_AUTO_UPDATE=1
|
||||||
|
- export HOMEBREW_NO_INSTALL_CLEANUP=1
|
||||||
|
- brew config
|
||||||
|
- brew tap --shallow LouisBrunner/valgrind
|
||||||
|
- brew install --HEAD LouisBrunner/valgrind/valgrind
|
||||||
|
- brew install automake libtool gmp gcc@9
|
||||||
|
test_script:
|
||||||
|
- ./ci/cirrus.sh
|
||||||
|
<< : *CAT_LOGS
|
||||||
|
|
||||||
|
task:
|
||||||
|
name: "s390x (big-endian): Linux (Debian QEMU)"
|
||||||
|
container:
|
||||||
|
dockerfile: ci/linux-debian-s390-qemu.Dockerfile
|
||||||
|
cpu: 1
|
||||||
|
memory: 1G
|
||||||
|
env:
|
||||||
|
QEMU_CMD: qemu-s390x
|
||||||
|
HOST: s390x-linux-gnu
|
||||||
|
BUILD:
|
||||||
|
WITH_VALGRIND: no
|
||||||
|
BIGNUM: no
|
||||||
|
ECDH: yes
|
||||||
|
RECOVERY: yes
|
||||||
|
EXPERIMENTAL: yes
|
||||||
|
SCHNORRSIG: yes
|
||||||
|
CTIMETEST: no
|
||||||
|
test_script:
|
||||||
|
# https://sourceware.org/bugzilla/show_bug.cgi?id=27008
|
||||||
|
- rm /etc/ld.so.cache
|
||||||
|
- ./ci/cirrus.sh
|
||||||
|
<< : *CAT_LOGS
|
@ -97,7 +97,7 @@ before_script: ./autogen.sh
|
|||||||
script:
|
script:
|
||||||
- function keep_alive() { while true; do echo -en "\a"; sleep 60; done }
|
- function keep_alive() { while true; do echo -en "\a"; sleep 60; done }
|
||||||
- keep_alive &
|
- keep_alive &
|
||||||
- ./contrib/travis.sh
|
- ./ci/travis.sh
|
||||||
- kill %keep_alive
|
- kill %keep_alive
|
||||||
|
|
||||||
after_script:
|
after_script:
|
||||||
|
@ -2,6 +2,7 @@ libsecp256k1
|
|||||||
============
|
============
|
||||||
|
|
||||||
[](https://travis-ci.org/bitcoin-core/secp256k1)
|
[](https://travis-ci.org/bitcoin-core/secp256k1)
|
||||||
|
[](https://cirrus-ci.com/github/bitcoin-core/secp256k1)
|
||||||
|
|
||||||
Optimized C library for ECDSA signatures and secret/public key operations on curve secp256k1.
|
Optimized C library for ECDSA signatures and secret/public key operations on curve secp256k1.
|
||||||
|
|
||||||
|
84
ci/cirrus.sh
Executable file
84
ci/cirrus.sh
Executable file
@ -0,0 +1,84 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -x
|
||||||
|
|
||||||
|
export LC_ALL=C
|
||||||
|
|
||||||
|
env >> test_env.log
|
||||||
|
|
||||||
|
$CC -v || true
|
||||||
|
valgrind --version || true
|
||||||
|
|
||||||
|
./autogen.sh
|
||||||
|
|
||||||
|
# Nix doesn't store GNU file in /usr/bin, see https://lists.gnu.org/archive/html/bug-libtool/2015-09/msg00000.html .
|
||||||
|
# The -i'' is necessary for macOS portability, see https://stackoverflow.com/a/4247319 .
|
||||||
|
sed -i'' -e 's@/usr/bin/file@$(which file)@g' configure
|
||||||
|
|
||||||
|
./configure \
|
||||||
|
--enable-experimental="$EXPERIMENTAL" \
|
||||||
|
--with-test-override-wide-multiply="$WIDEMUL" --with-bignum="$BIGNUM" --with-asm="$ASM" \
|
||||||
|
--enable-ecmult-static-precomputation="$STATICPRECOMPUTATION" --with-ecmult-gen-precision="$ECMULTGENPRECISION" \
|
||||||
|
--enable-module-ecdh="$ECDH" --enable-module-recovery="$RECOVERY" \
|
||||||
|
--enable-module-schnorrsig="$SCHNORRSIG" \
|
||||||
|
--with-valgrind="$WITH_VALGRIND" \
|
||||||
|
--host="$HOST" $EXTRAFLAGS
|
||||||
|
|
||||||
|
if [ -n "$BUILD" ]
|
||||||
|
then
|
||||||
|
make -j2 "$BUILD"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$RUN_VALGRIND" = "yes" ]
|
||||||
|
then
|
||||||
|
make -j2
|
||||||
|
# the `--error-exitcode` is required to make the test fail if valgrind found errors, otherwise it'll return 0 (https://www.valgrind.org/docs/manual/manual-core.html)
|
||||||
|
valgrind --error-exitcode=42 ./tests 16
|
||||||
|
valgrind --error-exitcode=42 ./exhaustive_tests
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$QEMU_CMD" ]
|
||||||
|
then
|
||||||
|
make -j2
|
||||||
|
$QEMU_CMD ./tests 16
|
||||||
|
$QEMU_CMD ./exhaustive_tests
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$BENCH" = "yes" ]
|
||||||
|
then
|
||||||
|
# Using the local `libtool` because on macOS the system's libtool has nothing to do with GNU libtool
|
||||||
|
EXEC='./libtool --mode=execute'
|
||||||
|
if [ -n "$QEMU_CMD" ]
|
||||||
|
then
|
||||||
|
EXEC="$EXEC $QEMU_CMD"
|
||||||
|
fi
|
||||||
|
if [ "$RUN_VALGRIND" = "yes" ]
|
||||||
|
then
|
||||||
|
EXEC="$EXEC valgrind --error-exitcode=42"
|
||||||
|
fi
|
||||||
|
# This limits the iterations in the benchmarks below to ITER iterations.
|
||||||
|
export SECP256K1_BENCH_ITERS="$ITERS"
|
||||||
|
{
|
||||||
|
$EXEC ./bench_ecmult
|
||||||
|
$EXEC ./bench_internal
|
||||||
|
$EXEC ./bench_sign
|
||||||
|
$EXEC ./bench_verify
|
||||||
|
} >> bench.log 2>&1
|
||||||
|
if [ "$RECOVERY" = "yes" ]
|
||||||
|
then
|
||||||
|
$EXEC ./bench_recover >> bench.log 2>&1
|
||||||
|
fi
|
||||||
|
if [ "$ECDH" = "yes" ]
|
||||||
|
then
|
||||||
|
$EXEC ./bench_ecdh >> bench.log 2>&1
|
||||||
|
fi
|
||||||
|
if [ "$SCHNORRSIG" = "yes" ]
|
||||||
|
then
|
||||||
|
$EXEC ./bench_schnorrsig >> bench.log 2>&1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ "$CTIMETEST" = "yes" ]
|
||||||
|
then
|
||||||
|
./libtool --mode=execute valgrind --error-exitcode=42 ./valgrind_ctime_test > valgrind_ctime_test.log 2>&1
|
||||||
|
fi
|
6
ci/linux-debian-s390-qemu.Dockerfile
Normal file
6
ci/linux-debian-s390-qemu.Dockerfile
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
FROM debian
|
||||||
|
|
||||||
|
RUN dpkg --add-architecture s390x
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install --no-install-recommends --no-upgrade -y make automake libtool
|
||||||
|
RUN apt-get install --no-install-recommends --no-upgrade -y gcc-s390x-linux-gnu libc6-dev-s390x-cross qemu-user libc6:s390x
|
12
ci/linux-nixos.Dockerfile
Normal file
12
ci/linux-nixos.Dockerfile
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
FROM nixos/nix
|
||||||
|
|
||||||
|
COPY ci/shell.nix /tmp
|
||||||
|
COPY ci/shell-i686.nix /tmp
|
||||||
|
|
||||||
|
RUN nix-channel --remove nixpkgs
|
||||||
|
RUN nix-channel --add https://nixos.org/channels/nixos-20.09 nixpkgs
|
||||||
|
RUN nix-channel --update
|
||||||
|
|
||||||
|
# Run dummy command "true" in the nix-shell just to get the packages prepared.
|
||||||
|
RUN nix-shell /tmp/shell.nix --command true
|
||||||
|
RUN nix-shell /tmp/shell-i686.nix --command true
|
9
ci/shell-i686.nix
Normal file
9
ci/shell-i686.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
with (import <nixpkgs> {}).pkgsi686Linux;
|
||||||
|
mkShell {
|
||||||
|
buildInputs = [
|
||||||
|
bash file pkgconfig autoconf automake libtool gmp valgrind clang gcc
|
||||||
|
];
|
||||||
|
shellHook = ''
|
||||||
|
echo Running nix-shell with nixpkgs version: $(nix eval --raw nixpkgs.lib.version)
|
||||||
|
'';
|
||||||
|
}
|
9
ci/shell.nix
Normal file
9
ci/shell.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
with (import <nixpkgs> {});
|
||||||
|
mkShell {
|
||||||
|
buildInputs = [
|
||||||
|
bash file pkgconfig autoconf automake libtool gmp valgrind clang gcc
|
||||||
|
];
|
||||||
|
shellHook = ''
|
||||||
|
echo Running nix-shell with nixpkgs version: $(nix eval --raw nixpkgs.lib.version)
|
||||||
|
'';
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user