evmc/circle.yml

338 lines
9.6 KiB
YAML
Raw Normal View History

version: 2.1
executors:
linux:
docker:
- image: ethereum/cpp-build-env:10
commands:
build_and_test:
2018-03-28 13:20:39 +00:00
steps:
- checkout
- run:
name: "Environment"
command: |
CC=${CC:-cc}
CXX=${CXX:-cpp}
echo CC: $CC
echo CXX: $CXX
$CC --version
$CXX --version
cmake --version
2018-03-28 13:20:39 +00:00
- run:
name: "Configure"
working_directory: ~/build
command: cmake ../project -DCMAKE_INSTALL_PREFIX=~/install -DEVMC_TESTING=ON $CMAKE_OPTIONS
2018-03-28 13:20:39 +00:00
- run:
name: "Build"
2019-09-25 19:14:29 +00:00
command: cmake --build ~/build -- -j4
2018-04-11 10:55:01 +00:00
- run:
name: "Test"
command: |
cmake --build ~/build --target test -- ARGS="-j4 --schedule-random --output-on-failure"
# Test statically linked end-to-end example
~/build/examples/evmc-example-static
# Test dynamically loaded end-to-end example
~/build/examples/evmc-example ~/build/examples/example_vm/libexample-vm.so
2018-04-11 13:19:41 +00:00
- run:
name: "Install"
command: cmake --build ~/build --target install
2018-04-18 14:32:24 +00:00
- run:
name: "Package"
command: |
2019-08-08 11:24:41 +00:00
cmake --build ~/build --target package_source
2018-04-18 14:32:24 +00:00
cmake --build ~/build --target package
mkdir ~/package
mv ~/build/evmc-*.tar.gz ~/package
- store_artifacts:
path: ~/package
destination: package
- persist_to_workspace:
root: ~/build
paths:
- bin/evmc-vmtester
- examples/evmc-example
2018-03-28 13:20:39 +00:00
jobs:
lint:
2019-09-25 10:26:50 +00:00
docker:
- image: ethereum/cpp-build-env:12-lint
steps:
- checkout
- run:
name: "Check code format"
command: |
clang-format --version
find bindings examples include lib test tools -name '*.hpp' -o -name '*.cpp' -o -name '*.h' -o -name '*.c' | xargs clang-format -i
git diff --color --exit-code
- run:
name: "Run codespell"
command: |
2019-09-25 10:32:46 +00:00
codespell --quiet-level=4 --ignore-words=./.codespell-whitelist --skip=.git
- run:
name: "Check bumpversion"
command: |
export PATH="/home/builder/.local/bin:$PATH"
pip3 install bumpversion
bumpversion --dry-run --verbose major
bumpversion --dry-run --verbose minor
bumpversion --dry-run --verbose patch
2019-06-25 11:49:10 +00:00
- run:
name: "Test documentation"
command: |
cat Doxyfile | sed 's/HTML_OUTPUT = ./HTML_OUTPUT = ..\/docs/' | doxygen - > doxygen.log 2> doxygen.warnings
if [ -s doxygen.warnings ]; then
printf '\n\nDoxygen warnings:\n\n'
cat doxygen.warnings
exit 1
fi
cat doxygen.log
- store_artifacts:
path: ~/docs
destination: docs
upload-docs:
docker:
- image: ethereum/cpp-build-env:12-lint
2019-06-25 11:49:10 +00:00
steps:
- checkout
- run:
name: "Generate documentation"
command: doxygen Doxyfile
- run:
name: "Upload documentation"
command: |
git config user.email "docs-bot@ethereum.org"
git config user.name "Documentation Bot"
git add --all
git commit -m "Update docs"
git push -f "https://$GITHUB_TOKEN@github.com/ethereum/evmc.git" HEAD:gh-pages
2019-12-06 21:14:02 +00:00
build-clang9-coverage:
docker:
- image: ethereum/cpp-build-env:12-clang-9
environment:
CMAKE_OPTIONS: -DCMAKE_BUILD_TYPE=Coverage
steps:
- run:
name: "Install lcov"
working_directory: /tmp
command: |
sudo apt-get -q update
# sudo apt-get install -qy lcov --no-install-recommends
apt-get download lcov
sudo dpkg -i --force-depends lcov*.deb
- build_and_test
- run:
name: "Collect coverage data"
working_directory: ~/build
command: |
find -name '*.profraw'
llvm-profdata merge *.profraw -o evmc.profdata
llvm-cov report -instr-profile evmc.profdata \
-object test/evmc-unittests \
-object bin/evmc-vmtester
llvm-cov export -instr-profile evmc.profdata -format=lcov > evmc.lcov \
-object test/evmc-unittests \
2019-12-10 10:12:42 +00:00
-object bin/evmc \
2019-12-06 21:14:02 +00:00
-object bin/evmc-vmtester
genhtml evmc.lcov -o coverage -t EVMC
- store_artifacts:
path: ~/build/coverage
destination: coverage
- run:
name: "Upload to Codecov"
command: |
# Convert to relative paths
sed -i 's|$(pwd)/||' ~/build/evmc.lcov
codecov --file ~/build/evmc.lcov -X gcov
2019-09-26 13:56:40 +00:00
build-gcc8-cxx17:
docker:
- image: ethereum/cpp-build-env:12-gcc-8
environment:
CMAKE_OPTIONS: -DTOOLCHAIN=cxx17-pic
steps:
- build_and_test
2019-09-26 13:56:40 +00:00
build-gcc9-cxx17-ubsan:
2019-09-25 19:05:16 +00:00
docker:
- image: ethereum/cpp-build-env:12-gcc-9
environment:
CMAKE_OPTIONS: -DTOOLCHAIN=cxx17-pic -DSANITIZE=undefined
steps:
- build_and_test
2019-09-26 13:56:40 +00:00
build-clang9-cxx14-asan:
2019-09-25 18:37:12 +00:00
docker:
- image: ethereum/cpp-build-env:12-clang-9
2018-08-28 09:06:53 +00:00
environment:
2019-04-29 13:21:07 +00:00
CMAKE_OPTIONS: -DTOOLCHAIN=cxx14-pic -DSANITIZE=address
2019-09-25 19:05:16 +00:00
UBSAN_OPTIONS: halt_on_error=1
steps:
- build_and_test
build-gcc6:
docker:
- image: ethereum/cpp-build-env:12-gcc-6
steps:
- build_and_test
2019-11-28 15:30:31 +00:00
build-clang5:
docker:
- image: ethereum/cpp-build-env:12-clang-5
steps:
- build_and_test
build-clang38:
docker:
- image: ethereum/cpp-build-env:12-clang-3.8
steps:
- build_and_test
2018-08-28 09:06:53 +00:00
2019-09-26 13:56:40 +00:00
build-gcc-32bit:
docker:
- image: ethereum/cpp-build-env:12-base
2019-06-25 09:25:53 +00:00
environment:
CMAKE_OPTIONS: -DTOOLCHAIN=cxx11-32bit
steps:
- run:
name: "Install GCC 32-bit"
command: sudo apt -q update && sudo apt -qy install g++-multilib
- build_and_test
bindings-go-latest:
2018-08-20 10:15:09 +00:00
docker:
- image: circleci/golang
2018-08-20 10:15:09 +00:00
steps: &bindings-go-steps
- checkout
- run:
name: "Go Build"
command: |
go get -v github.com/ethereum/go-ethereum/common
go build -v ./bindings/go/evmc
go vet -v ./bindings/go/evmc
2019-03-12 12:53:07 +00:00
go generate -v ./bindings/go/evmc
go test -v ./bindings/go/evmc
2018-08-20 10:15:09 +00:00
bindings-go-min:
2018-08-20 10:15:09 +00:00
docker:
- image: circleci/golang:1.9
steps: *bindings-go-steps
bindings-java:
docker:
- image: circleci/openjdk:11-stretch
steps:
- checkout
- run:
name: Update environment
command: |
sudo apt -qq update
sudo apt -yq install build-essential
- run:
name: "Java Build"
command: |
cd bindings/java && make clean build
- run:
name: "Java Test"
command: |
cd bindings/java && make test
2019-03-13 13:37:59 +00:00
bindings-rust:
docker:
- image: rust:1
steps:
- checkout
- run:
name: Update environment
command: |
apt update
apt -y install libclang-dev clang
rustup component add rustfmt
rustup update
- run:
name: Check formatting
command: |
rustfmt --version
cargo fmt --all -- --check
- run:
name: Build
command: cargo build
- run:
name: Test
command: cargo test
- attach_workspace:
at: ~/build
- run:
name: Test with evmc-vmtester
command: |
~/build/bin/evmc-vmtester target/debug/libexamplerustvm.so
2019-08-08 19:43:04 +00:00
- run:
name: Test with evmc-example
command: |
~/build/examples/evmc-example target/debug/libexamplerustvm.so
2018-08-20 10:15:09 +00:00
bindings-rust-asan-combined:
docker:
- image: rust:1-buster
steps:
- checkout
- run:
name: Update environment
command: |
echo 'deb http://apt.llvm.org/buster/ llvm-toolchain-buster-8 main' >> /etc/apt/sources.list
2019-08-07 13:23:43 +00:00
wget -nv -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
apt -qq update
apt -yq install llvm-8-dev clang-8
rustup toolchain install nightly-x86_64-unknown-linux-gnu
rustup update
- run:
name: Build
command: RUSTFLAGS="-Z sanitizer=address" ASAN_OPTIONS=detect_leaks=1 cargo +nightly build --target x86_64-unknown-linux-gnu
- run:
name: Test
command: RUSTFLAGS="-Z sanitizer=address -C opt-level=0" ASAN_OPTIONS=detect_leaks=1 cargo +nightly test --target x86_64-unknown-linux-gnu
- attach_workspace:
at: ~/build
- run:
name: Test with evmc-vmtester
command: |
~/build/bin/evmc-vmtester target/x86_64-unknown-linux-gnu/debug/libexamplerustvm.so
2019-08-08 19:43:04 +00:00
- run:
name: Test with evmc-example
command: |
~/build/examples/evmc-example target/x86_64-unknown-linux-gnu/debug/libexamplerustvm.so
2018-03-28 13:20:39 +00:00
workflows:
version: 2
evmc:
jobs:
- lint
2019-12-06 21:14:02 +00:00
- build-clang9-coverage
2019-09-26 13:56:40 +00:00
- build-gcc8-cxx17
- build-gcc9-cxx17-ubsan
- build-clang9-cxx14-asan
- build-gcc6
2019-11-28 15:30:31 +00:00
- build-clang5
- build-clang38
2019-09-26 13:56:40 +00:00
- build-gcc-32bit
- bindings-go-latest
- bindings-go-min
- bindings-java
- bindings-rust:
requires:
2019-09-26 13:56:40 +00:00
- build-gcc8-cxx17
- bindings-rust-asan-combined:
requires:
2019-09-26 13:56:40 +00:00
- build-clang9-cxx14-asan
2018-03-28 15:01:47 +00:00
- upload-docs:
requires:
2019-06-25 11:49:10 +00:00
- lint
2018-03-28 15:01:47 +00:00
filters:
branches:
only:
- master