solidity/.circleci/config.yml

1218 lines
37 KiB
YAML
Raw Normal View History

# vim:ts=2:sw=2:et
# --------------------------------------------------------------------------
# Prefixes used in order to keep CircleCI workflow overview more readable:
# - b: build
# - t: test
# - ubu: ubuntu
# - ems: Emscripten
version: 2.1
parameters:
2020-07-15 10:44:35 +00:00
ubuntu-2004-docker-image:
type: string
# solbuildpackpusher/solidity-buildpack-deps:ubuntu2004-8
default: "solbuildpackpusher/solidity-buildpack-deps@sha256:9c3cdfc1d573d1ca3edacd892590a9a83487a1f746a6ca2093d7e009818c5179"
2020-07-15 10:44:35 +00:00
ubuntu-2004-clang-docker-image:
type: string
# solbuildpackpusher/solidity-buildpack-deps:ubuntu2004.clang-8
default: "solbuildpackpusher/solidity-buildpack-deps@sha256:61232feea23c8c57e82cf5fae890f8b86bbec353cdc04f2fcba383ca589e1d8b"
2020-07-15 10:44:35 +00:00
ubuntu-1604-clang-ossfuzz-docker-image:
type: string
# solbuildpackpusher/solidity-buildpack-deps:ubuntu1604.clang.ossfuzz-11
default: "solbuildpackpusher/solidity-buildpack-deps@sha256:4acb2674eab3e7939d6dc6caa0b8320f4dd79484325242b58473ca2875792d90"
2020-07-15 10:44:35 +00:00
emscripten-docker-image:
type: string
2021-07-16 11:01:17 +00:00
# solbuildpackpusher/solidity-buildpack-deps:emscripten-6
default: "solbuildpackpusher/solidity-buildpack-deps@sha256:092da5817bc032c91a806b4f73db2a1a31e5cc4c066d94d43eedd9f365df7154"
orbs:
win: circleci/windows@2.2.0
2018-04-03 15:34:38 +00:00
defaults:
# --------------------------------------------------------------------------
# Build Templates
2018-05-02 13:42:34 +00:00
- setup_prerelease_commit_hash: &setup_prerelease_commit_hash
name: Store commit hash and prerelease
command: |
if [ "$CIRCLE_BRANCH" = release -o -n "$CIRCLE_TAG" ]; then echo -n > prerelease.txt; else date -u +"nightly.%Y.%-m.%-d" > prerelease.txt; fi
echo -n "$CIRCLE_SHA1" > commit_hash.txt
- run_build: &run_build
name: Build
command: scripts/ci/build.sh
- run_build_ossfuzz: &run_build_ossfuzz
name: Build_ossfuzz
command: scripts/ci/build_ossfuzz.sh
2019-06-19 17:25:05 +00:00
- run_proofs: &run_proofs
name: Correctness proofs for optimization rules
command: scripts/run_proofs.sh
# --------------------------------------------------------------------------
# Artifacts Templates
# the whole build directory
- artifacts_build_dir: &artifacts_build_dir
root: build
paths:
- "*"
# compiled solc executable target
- artifacts_solc: &artifacts_solc
path: build/solc/solc
destination: solc
# windows artifacts
- artifact_solc_windows: &artifact_solc_windows
path: upload/
# compiled tool executable target
- artifacts_tools: &artifacts_tools
path: build/tools/solidity-upgrade
destination: solidity-upgrade
# compiled executable targets
- artifacts_executables: &artifacts_executables
root: build
paths:
- solc/solc
- test/soltest
- test/tools/solfuzzer
# compiled OSSFUZZ targets
- artifacts_executables_ossfuzz: &artifacts_executables_ossfuzz
root: build
paths:
- test/tools/ossfuzz/abiv2_proto_ossfuzz
- test/tools/ossfuzz/abiv2_isabelle_ossfuzz
- test/tools/ossfuzz/const_opt_ossfuzz
2021-02-05 11:29:52 +00:00
- test/tools/ossfuzz/solc_mutator_ossfuzz
- test/tools/ossfuzz/solc_ossfuzz
- test/tools/ossfuzz/stack_reuse_codegen_ossfuzz
- test/tools/ossfuzz/strictasm_assembly_ossfuzz
- test/tools/ossfuzz/strictasm_diff_ossfuzz
- test/tools/ossfuzz/strictasm_opt_ossfuzz
- test/tools/ossfuzz/yul_proto_diff_ossfuzz
- test/tools/ossfuzz/yul_proto_diff_custom_mutate_ossfuzz
- test/tools/ossfuzz/yul_proto_ossfuzz
- test/tools/ossfuzz/sol_proto_ossfuzz
2018-04-03 15:34:38 +00:00
# test result output directory
- artifacts_test_results: &artifacts_test_results
path: test_results/
destination: test_results/
# --------------------------------------------------------------------------
# Tests Templates
# store_test_results helper
- store_test_results: &store_test_results
path: test_results/
- run_soltest: &run_soltest
name: soltest
2020-09-08 06:18:27 +00:00
no_output_timeout: 30m
command: ./.circleci/soltest.sh
- run_soltest_all: &run_soltest_all
name: soltest_all
2020-09-08 06:18:27 +00:00
no_output_timeout: 30m
command: ./.circleci/soltest_all.sh
- run_cmdline_tests: &run_cmdline_tests
name: command line tests
2020-09-08 06:18:27 +00:00
no_output_timeout: 30m
command: ./test/cmdlineTests.sh
- run_docs_pragma_min_version: &run_docs_pragma_min_version
name: docs pragma version check
command: ./scripts/docs_version_pragma_check.sh
- test_ubuntu1604_clang: &test_ubuntu1604_clang
docker:
2020-07-15 10:44:35 +00:00
- image: << pipeline.parameters.ubuntu-1604-clang-ossfuzz-docker-image >>
steps:
- checkout
- attach_workspace:
at: build
- run: *run_soltest
- store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results
- test_ubuntu2004_clang: &test_ubuntu2004_clang
2019-09-24 12:31:22 +00:00
docker:
2020-07-15 10:44:35 +00:00
- image: << pipeline.parameters.ubuntu-2004-clang-docker-image >>
2019-09-24 12:31:22 +00:00
steps:
- checkout
- attach_workspace:
at: build
- run: *run_soltest
- store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results
- test_ubuntu2004: &test_ubuntu2004
docker:
2020-07-15 10:44:35 +00:00
- image: << pipeline.parameters.ubuntu-2004-docker-image >>
2020-07-15 11:05:08 +00:00
parallelism: 6
steps:
- checkout
- attach_workspace:
at: build
- run: *run_soltest_all
- store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results
- test_asan: &test_asan
<<: *test_ubuntu2004
steps:
- checkout
- attach_workspace:
at: build
- run:
<<: *run_soltest
- store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results
- test_asan_clang: &test_asan_clang
<<: *test_ubuntu2004_clang
steps:
- checkout
- attach_workspace:
at: build
- run:
<<: *run_soltest
- store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results
# --------------------------------------------------------------------------
# Workflow Templates
- workflow_trigger_on_tags: &workflow_trigger_on_tags
filters:
tags:
only: /.*/
- workflow_ubuntu2004: &workflow_ubuntu2004
<<: *workflow_trigger_on_tags
requires:
- b_ubu
- workflow_ubuntu1604_clang: &workflow_ubuntu1604_clang
<<: *workflow_trigger_on_tags
requires:
- b_ubu_ossfuzz
- workflow_ubuntu2004_clang: &workflow_ubuntu2004_clang
2019-09-24 12:31:22 +00:00
<<: *workflow_trigger_on_tags
requires:
- b_ubu_clang
- workflow_ubuntu2004_release: &workflow_ubuntu2004_release
<<: *workflow_trigger_on_tags
requires:
- b_ubu_release
2020-09-08 08:28:42 +00:00
- workflow_archlinux: &workflow_archlinux
<<: *workflow_trigger_on_tags
requires:
- b_archlinux
- workflow_ubuntu2004_codecov: &workflow_ubuntu2004_codecov
<<: *workflow_trigger_on_tags
requires:
- b_ubu_codecov
- workflow_osx: &workflow_osx
<<: *workflow_trigger_on_tags
requires:
- b_osx
- workflow_ubuntu2004_asan: &workflow_ubuntu2004_asan
<<: *workflow_trigger_on_tags
requires:
- b_ubu_asan
- workflow_ubuntu2004_asan_clang: &workflow_ubuntu2004_asan_clang
<<: *workflow_trigger_on_tags
requires:
- b_ubu_asan_clang
- workflow_emscripten: &workflow_emscripten
<<: *workflow_trigger_on_tags
requires:
- b_ems
- workflow_ubuntu1604_ossfuzz: &workflow_ubuntu1604_ossfuzz
<<: *workflow_trigger_on_tags
requires:
- b_ubu_ossfuzz
2020-09-16 14:24:11 +00:00
- workflow_win: &workflow_win
<<: *workflow_trigger_on_tags
requires:
- b_win
- workflow_win_release: &workflow_win_release
<<: *workflow_trigger_on_tags
requires:
- b_win_release
# --------------------------------------------------------------------------
# Notification Templates
- gitter_notify_failure: &gitter_notify_failure
name: Gitter notify failure
command: >-
curl -X POST -i
-i -H "Content-Type: application/json"
-H "Accept: application/json"
-H "Authorization: Bearer $GITTER_API_TOKEN" "https://api.gitter.im/v1/rooms/$GITTER_NOTIFY_ROOM_ID/chatMessages"
2019-09-19 00:26:39 +00:00
-d '{"text":" ❌ Nightly job **'$CIRCLE_JOB'** failed on **'$CIRCLE_BRANCH'**. Please see '$CIRCLE_BUILD_URL' for details."}'
when: on_fail
- gitter_notify_success: &gitter_notify_success
name: Gitter notify success
command: >-
curl -X POST -i
-i -H "Content-Type: application/json"
-H "Accept: application/json"
-H "Authorization: Bearer $GITTER_API_TOKEN" "https://api.gitter.im/v1/rooms/$GITTER_NOTIFY_ROOM_ID/chatMessages"
2019-09-19 00:26:39 +00:00
-d '{"text":" ✅ Nightly job **'$CIRCLE_JOB'** succeeded on **'$CIRCLE_BRANCH'**. Please see '$CIRCLE_BUILD_URL' for details."}'
when: on_success
# -----------------------------------------------------------------------------------------------
2017-08-16 19:20:46 +00:00
jobs:
chk_spelling:
2017-08-16 19:20:46 +00:00
docker:
- image: circleci/python:3.6
environment:
TERM: xterm
2017-08-16 19:20:46 +00:00
steps:
- checkout
- attach_workspace:
at: build
2017-09-14 21:13:37 +00:00
- run:
name: Install dependencies
2017-09-14 21:13:37 +00:00
command: |
pip install --user codespell
2017-09-14 21:13:37 +00:00
- run:
name: Check spelling
command: ~/.local/bin/codespell -S "*.enc,.git,Dockerfile*" -I ./scripts/codespell_whitelist.txt
2019-01-31 13:22:02 +00:00
chk_docs_examples:
docker:
- image: circleci/node
environment:
TERM: xterm
steps:
- checkout
- attach_workspace:
at: build
- run:
name: JS deps
command: sudo npm install -g solhint
- run:
name: Test Docs examples
command: ./test/docsCodeStyle.sh
chk_coding_style:
2018-02-08 22:43:05 +00:00
docker:
- image: buildpack-deps:focal
2018-02-08 22:43:05 +00:00
steps:
- checkout
2020-03-31 18:05:58 +00:00
- run:
name: Install shellcheck
command: apt -q update && apt install -y shellcheck
2018-02-08 22:43:05 +00:00
- run:
name: Check for C++ coding style
command: ./scripts/check_style.sh
2020-03-31 18:05:58 +00:00
- run:
name: checking shell scripts
command: ./scripts/chk_shellscripts/chk_shellscripts.sh
- run:
name: Check for broken symlinks
command: ./scripts/check_symlinks.sh
2019-01-31 13:22:02 +00:00
2020-05-27 10:13:37 +00:00
chk_errorcodes:
docker:
- image: circleci/python:3.6
steps:
- checkout
- run:
name: Check for error codes
command: ./scripts/error_codes.py --check
2020-05-27 10:13:37 +00:00
chk_pylint:
docker:
- image: buildpack-deps:focal
steps:
- checkout
- run:
name: Install pip
command: apt -q update && apt install -y python3-pip
- run:
name: Install pylint
command: python3 -m pip install pylint z3-solver pygments-lexer-solidity parsec tabulate
# also z3-solver, parsec and tabulate to make sure pylint knows about this module, pygments-lexer-solidity for docs
- run:
name: Linting Python Scripts
command: ./scripts/pylint_all.py
2020-03-11 12:03:57 +00:00
chk_antlr_grammar:
docker:
- image: buildpack-deps:focal
2020-03-11 12:03:57 +00:00
steps:
- checkout
- run:
name: Install Java
command: apt -q update && apt install -y openjdk-14-jdk
- run:
name: Run tests
command: ./scripts/test_antlr_grammar.sh
chk_buglist:
2018-02-09 16:21:36 +00:00
docker:
- image: circleci/node
environment:
TERM: xterm
2018-02-09 16:21:36 +00:00
steps:
- checkout
- run:
name: JS deps
2018-02-09 16:21:36 +00:00
command: |
npm install download
npm install JSONPath
npm install mktemp
- run:
name: Test buglist
command: ./test/buglistTests.js
chk_proofs:
docker:
- image: buildpack-deps:latest
environment:
TERM: xterm
steps:
- checkout
2017-09-14 21:13:37 +00:00
- run:
name: Z3 python deps
2017-09-14 21:13:37 +00:00
command: |
apt-get -qq update
2020-04-22 08:20:52 +00:00
apt-get -qy install python3-pip
pip3 install --user z3-solver
- run: *run_proofs
2019-01-31 13:22:02 +00:00
chk_docs_pragma_min_version:
docker:
2020-07-15 10:44:35 +00:00
- image: << pipeline.parameters.ubuntu-2004-docker-image >>
environment:
TERM: xterm
steps:
- checkout
- run: *run_docs_pragma_min_version
t_pyscripts_ubu:
docker:
- image: << pipeline.parameters.ubuntu-2004-docker-image >>
steps:
- checkout
- run:
name: Python unit tests
command: python3 test/pyscriptTests.py
t_pyscripts_win:
executor:
name: win/default
shell: powershell.exe
steps:
- run: git config --global core.autocrlf false
- checkout
- run:
name: Python unit tests
command: python.exe test/pyscriptTests.py
b_ubu_clang: &build_ubuntu2004_clang
2020-07-27 16:57:23 +00:00
resource_class: xlarge
2019-09-24 12:31:22 +00:00
docker:
2020-07-15 10:44:35 +00:00
- image: << pipeline.parameters.ubuntu-2004-clang-docker-image >>
2019-09-24 12:31:22 +00:00
environment:
CC: clang
CXX: clang++
2020-07-27 16:57:23 +00:00
MAKEFLAGS: -j 10
2019-09-24 12:31:22 +00:00
steps:
- checkout
- run: *run_build
- store_artifacts: *artifacts_solc
- persist_to_workspace: *artifacts_executables
b_ubu_asan_clang: &build_ubuntu2004_clang
docker:
2020-07-15 10:44:35 +00:00
- image: << pipeline.parameters.ubuntu-2004-clang-docker-image >>
environment:
CC: clang
CXX: clang++
CMAKE_OPTIONS: -DSANITIZE=address
2020-07-28 15:30:40 +00:00
MAKEFLAGS: -j 3
steps:
- checkout
- run: *run_build
- store_artifacts: *artifacts_solc
- persist_to_workspace: *artifacts_executables
b_ubu: &build_ubuntu2004
resource_class: xlarge
2019-04-01 22:38:14 +00:00
docker:
2020-07-15 10:44:35 +00:00
- image: << pipeline.parameters.ubuntu-2004-docker-image >>
environment:
MAKEFLAGS: -j 10
steps:
- checkout
- run: *run_build
- store_artifacts: *artifacts_solc
- store_artifacts: *artifacts_tools
- persist_to_workspace: *artifacts_executables
b_ubu_release: &build_ubuntu2004_release
<<: *build_ubuntu2004
environment:
FORCE_RELEASE: ON
2020-07-28 15:30:40 +00:00
MAKEFLAGS: -j 10
2020-09-30 12:49:27 +00:00
b_ubu_static:
<<: *build_ubuntu2004
environment:
MAKEFLAGS: -j 10
CMAKE_OPTIONS: -DCMAKE_BUILD_TYPE=Release -DUSE_Z3_DLOPEN=ON -DUSE_CVC4=OFF -DSOLC_STATIC_STDLIBS=ON
2020-09-30 12:49:27 +00:00
steps:
- checkout
- run: *run_build
- run:
name: strip binary
command: strip build/solc/solc
- store_artifacts: *artifacts_solc
b_ubu_codecov:
<<: *build_ubuntu2004
2019-04-01 22:38:14 +00:00
environment:
COVERAGE: ON
CMAKE_BUILD_TYPE: Debug
2020-07-28 15:30:40 +00:00
MAKEFLAGS: -j 10
steps:
- checkout
- run: *run_build
2020-10-14 20:51:22 +00:00
- persist_to_workspace: *artifacts_executables
t_ubu_codecov:
<<: *test_ubuntu2004
environment:
EVM: constantinople
OPTIMIZE: 1
2019-04-01 22:38:14 +00:00
steps:
- checkout
- attach_workspace:
at: build
2019-04-01 22:38:14 +00:00
- run:
name: "soltest: Syntax Tests"
2019-07-17 09:05:44 +00:00
command: build/test/soltest -t 'syntaxTest*' -- --testpath test
2019-04-01 22:38:14 +00:00
- run:
name: "Code Coverage: Syntax Tests"
command: codecov --flags syntax --gcov-root build
- run: *run_soltest
- run:
name: "Coverage: All"
command: codecov --flags all --gcov-root build
- store_artifacts: *artifacts_test_results
2019-04-01 22:38:14 +00:00
2019-08-09 09:28:22 +00:00
# Builds in C++20 mode and uses debug build in order to speed up.
# Do *NOT* store any artifacts or workspace as we don't run tests on this build.
2019-08-09 09:28:22 +00:00
b_ubu_cxx20:
<<: *build_ubuntu2004
environment:
CMAKE_BUILD_TYPE: Debug
CMAKE_OPTIONS: -DCMAKE_CXX_STANDARD=20 -DUSE_CVC4=OFF
2020-07-28 15:30:40 +00:00
MAKEFLAGS: -j 10
2018-02-08 15:12:04 +00:00
steps:
- checkout
2018-05-02 13:42:34 +00:00
- run: *run_build
b_ubu_ossfuzz: &build_ubuntu1604_clang
docker:
2020-07-15 10:44:35 +00:00
- image: << pipeline.parameters.ubuntu-1604-clang-ossfuzz-docker-image >>
2019-01-31 13:22:02 +00:00
environment:
2019-09-24 12:31:22 +00:00
CC: clang
CXX: clang++
TERM: xterm
2020-07-28 15:30:40 +00:00
MAKEFLAGS: -j 3
2019-01-31 13:22:02 +00:00
steps:
- checkout
- run: *setup_prerelease_commit_hash
- run: *run_build_ossfuzz
- persist_to_workspace: *artifacts_executables_ossfuzz
2019-01-31 13:22:02 +00:00
t_ubu_ossfuzz: &t_ubu_ossfuzz
<<: *test_ubuntu1604_clang
2018-11-08 13:28:25 +00:00
steps:
- checkout
- attach_workspace:
at: build
2018-11-08 13:28:25 +00:00
- run:
name: Regression tests
2018-11-08 13:28:25 +00:00
command: |
git clone https://github.com/ethereum/solidity-fuzzing-corpus /tmp/solidity-fuzzing-corpus
mkdir -p test_results
scripts/regressions.py -o test_results
- run: *gitter_notify_failure
- run: *gitter_notify_success
- store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results
2018-11-08 13:28:25 +00:00
b_archlinux:
2018-10-16 12:21:18 +00:00
docker:
# FIXME: Newer releases won't work until CircleCI updates its host machines.
# See https://github.com/ethereum/solidity/pull/11332
- image: archlinux:base-20210131.0.14634
2018-10-16 12:21:18 +00:00
environment:
TERM: xterm
2020-07-28 15:30:40 +00:00
MAKEFLAGS: -j 3
2018-10-16 12:21:18 +00:00
steps:
- run:
name: Install build dependencies
command: |
pacman --noconfirm -Syu --noprogressbar --needed base-devel boost cmake z3 cvc4 git openssh tar
2018-10-16 12:21:18 +00:00
- checkout
- run: *run_build
- store_artifacts: *artifacts_solc
- persist_to_workspace: *artifacts_executables
2018-10-16 12:21:18 +00:00
b_osx:
macos:
xcode: "11.0.0"
environment:
TERM: xterm
2020-05-20 16:05:40 +00:00
CMAKE_BUILD_TYPE: Release
2020-07-28 11:22:51 +00:00
MAKEFLAGS: -j 5
steps:
- checkout
2019-09-20 00:39:25 +00:00
- restore_cache:
keys:
- dependencies-osx-{{ checksum ".circleci/osx_install_dependencies.sh" }}
# DO NOT EDIT between here and save_cache, but rather edit ./circleci/osx_install_dependencies.sh
# WARNING! If you do edit anything here instead, remember to invalidate the cache manually.
- run:
name: Install build dependencies
2019-09-20 00:39:25 +00:00
command: ./.circleci/osx_install_dependencies.sh
- save_cache:
key: dependencies-osx-{{ checksum ".circleci/osx_install_dependencies.sh" }}
2019-09-20 00:39:25 +00:00
paths:
- /usr/local/bin
- /usr/local/sbin
- /usr/local/lib
- /usr/local/include
- /usr/local/Cellar
- /usr/local/Homebrew
2018-05-02 13:42:34 +00:00
- run: *run_build
- store_artifacts: *artifacts_solc
- store_artifacts: *artifacts_tools
- persist_to_workspace:
root: .
paths:
- build/solc/solc
- build/test/soltest
- build/test/tools/solfuzzer
2019-09-20 00:39:25 +00:00
t_osx_soltest:
macos:
xcode: "11.0.0"
environment:
EVM: constantinople
OPTIMIZE: 0
TERM: xterm
steps:
- checkout
- restore_cache:
keys:
- dependencies-osx-{{ checksum ".circleci/osx_install_dependencies.sh" }}
2019-09-20 00:39:25 +00:00
- attach_workspace:
at: .
2019-09-20 00:39:25 +00:00
- run: *run_soltest
- store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results
t_osx_cli:
macos:
xcode: "11.0.0"
environment:
TERM: xterm
steps:
- checkout
2019-09-20 00:39:25 +00:00
- restore_cache:
keys:
- dependencies-osx-{{ checksum ".circleci/osx_install_dependencies.sh" }}
- attach_workspace:
at: .
- run: *run_cmdline_tests
- store_artifacts: *artifacts_test_results
b_ems:
resource_class: xlarge
docker:
2020-07-15 10:44:35 +00:00
- image: << pipeline.parameters.emscripten-docker-image >>
environment:
MAKEFLAGS: -j 10
TERM: xterm
steps:
- checkout
- run:
name: Build
command: |
2020-10-19 15:57:22 +00:00
scripts/ci/build_emscripten.sh
- store_artifacts:
path: emscripten_build/libsolc/soljson.js
destination: soljson.js
- run: mkdir -p workspace
- run: cp emscripten_build/libsolc/soljson.js workspace/soljson.js
- run: scripts/get_version.sh > workspace/version.txt
- persist_to_workspace:
root: workspace
paths:
- soljson.js
- version.txt
# x64 ASAN build, for testing for memory related bugs
b_ubu_asan: &b_ubu_asan
<<: *build_ubuntu2004
2019-06-19 17:25:05 +00:00
environment:
CMAKE_OPTIONS: -DSANITIZE=address
2020-07-28 15:30:40 +00:00
MAKEFLAGS: -j 10
CMAKE_BUILD_TYPE: Release
2019-06-19 17:25:05 +00:00
steps:
- checkout
- run: *run_build
- store_artifacts: *artifacts_solc
- persist_to_workspace: *artifacts_executables
2019-06-19 17:25:05 +00:00
b_docs:
docker:
2020-07-15 10:44:35 +00:00
- image: << pipeline.parameters.ubuntu-2004-docker-image >>
steps:
- checkout
- run: *setup_prerelease_commit_hash
2018-07-23 11:29:55 +00:00
- run:
name: Build documentation
command: ./scripts/docs.sh
2018-10-11 15:01:06 +00:00
- store_artifacts:
path: docs/_build/html/
destination: docs-html
t_ubu_soltest: &t_ubu_soltest
<<: *test_ubuntu2004
2020-09-08 08:28:42 +00:00
t_archlinux_soltest: &t_archlinux_soltest
docker:
# FIXME: Newer releases won't work until CircleCI updates its host machines.
# See https://github.com/ethereum/solidity/pull/11332
- image: archlinux:base-20210131.0.14634
2020-09-08 08:28:42 +00:00
environment:
EVM: constantinople
OPTIMIZE: 0
TERM: xterm
# For Archlinux we do not have prebuilt docker images and we would need to build evmone from source,
# thus we forgo semantics tests to speed things up.
# FIXME: Z3 4.8.11 prerelease is now in main Arch Linux repos but it makes some of our SMT
# tests hang. Disabling SMT tests until we get a proper release.
# See https://github.com/Z3Prover/z3/issues/5330 for more details.
SOLTEST_FLAGS: --no-semantic-tests --no-smt
2020-09-08 08:28:42 +00:00
steps:
- run:
name: Install runtime dependencies
command: |
pacman --noconfirm -Syu --noprogressbar --needed base-devel boost cmake z3 cvc4 git openssh tar
- checkout
- attach_workspace:
at: build
- run: *run_soltest
- store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results
t_ubu_soltest_enforce_yul: &t_ubu_soltest_enforce_yul
docker:
2020-07-15 10:44:35 +00:00
- image: << pipeline.parameters.ubuntu-2004-docker-image >>
environment:
EVM: constantinople
SOLTEST_FLAGS: --enforce-via-yul
OPTIMIZE: 0
TERM: xterm
steps:
- checkout
- attach_workspace:
at: build
- run: *run_soltest
- store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results
2019-09-24 12:31:22 +00:00
t_ubu_clang_soltest: &t_ubu_clang_soltest
<<: *test_ubuntu2004_clang
2019-09-24 12:31:22 +00:00
environment:
EVM: constantinople
OPTIMIZE: 0
t_ubu_release_soltest: &t_ubu_release_soltest
<<: *t_ubu_soltest
t_ubu_cli: &t_ubu_cli
2019-01-28 13:51:47 +00:00
docker:
2020-07-15 10:44:35 +00:00
- image: << pipeline.parameters.ubuntu-2004-docker-image >>
2019-01-28 13:51:47 +00:00
environment:
TERM: xterm
steps:
- checkout
- attach_workspace:
at: build
- run: *run_cmdline_tests
- store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results
2019-01-28 13:51:47 +00:00
t_ubu_release_cli: &t_ubu_release_cli
<<: *t_ubu_cli
t_ubu_asan_cli:
<<: *t_ubu_cli
2018-11-08 13:28:25 +00:00
environment:
TERM: xterm
ASAN_OPTIONS: check_initialization_order=true:detect_stack_use_after_return=true:strict_init_order=true:strict_string_checks=true:detect_invalid_pointer_pairs=2
2018-11-08 13:28:25 +00:00
steps:
- checkout
- attach_workspace:
at: build
- run:
<<: *run_cmdline_tests
- store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results
2018-11-08 13:28:25 +00:00
t_ubu_asan_constantinople:
<<: *test_asan
environment:
EVM: constantinople
OPTIMIZE: 0
SOLTEST_FLAGS: --no-smt
ASAN_OPTIONS: check_initialization_order=true:detect_stack_use_after_return=true:strict_init_order=true:strict_string_checks=true:detect_invalid_pointer_pairs=2
t_ubu_asan_constantinople_clang:
<<: *test_asan_clang
environment:
EVM: constantinople
OPTIMIZE: 0
SOLTEST_FLAGS: --no-smt
ASAN_OPTIONS: check_initialization_order=true:detect_stack_use_after_return=true:strict_init_order=true:strict_string_checks=true:detect_invalid_pointer_pairs=2
t_ems_solcjs:
docker:
2021-05-19 15:35:19 +00:00
- image: << pipeline.parameters.ubuntu-2004-docker-image >>
environment:
TERM: xterm
steps:
- checkout
- attach_workspace:
at: /tmp/workspace
- run:
name: Install test dependencies
command: |
apt-get update
2021-05-19 15:35:19 +00:00
apt-get install -qqy --no-install-recommends nodejs npm
- run:
name: Test solcjs
2020-09-08 06:18:27 +00:00
no_output_timeout: 30m
command: |
node --version
npm --version
test/externalTests/solc-js/solc-js.sh /tmp/workspace/soljson.js $(cat /tmp/workspace/version.txt)
2018-02-08 15:12:04 +00:00
t_ems_ext:
parameters:
project:
type: string
compile_only:
type: integer
default: 0
nodejs_version:
type: integer
default: 14
gitter_notify:
type: boolean
default: no
docker:
- image: circleci/node:<<parameters.nodejs_version>>
environment:
TERM: xterm
COMPILE_ONLY: <<parameters.compile_only>>
steps:
- checkout
- attach_workspace:
at: /tmp/workspace
- run:
name: Install dependencies
command: |
# lsof is used by Colony in its stop-blockchain-client.sh script
sudo apt-get -qy install lsof
- run:
name: External <<parameters.project>> tests
command: |
test/externalTests/<<parameters.project>>.sh /tmp/workspace/soljson.js
- when:
condition: <<parameters.gitter_notify>>
steps:
- run: *gitter_notify_failure
- run: *gitter_notify_success
2020-07-22 14:22:21 +00:00
b_win: &b_win
executor:
name: win/default
shell: powershell.exe
steps:
# NOTE: Not disabling git's core.autocrlf here because we want to build using the typical Windows config.
- checkout
- restore_cache:
keys:
- dependencies-win-{{ checksum "scripts/install_deps.ps1" }}
# DO NOT EDIT between here and save_cache, but rather edit .\scripts\install_deps.ps1
2020-10-16 09:42:20 +00:00
# WARNING! If you do edit anything here instead, remember to invalidate the cache manually.
- run:
name: "Installing dependencies"
command: .\scripts\install_deps.ps1
- save_cache:
key: dependencies-win-{{ checksum "scripts/install_deps.ps1" }}
paths:
- .\deps
- run:
name: "Building solidity"
command: .circleci/build_win.ps1
- run:
name: "Run solc.exe to make sure build was successful."
command: .\build\solc\Release\solc.exe --version
- store_artifacts: *artifact_solc_windows
2020-10-14 20:51:22 +00:00
- persist_to_workspace:
root: build
paths:
- .\solc\*\solc.exe
- .\test\*\soltest.exe
2020-07-22 14:22:21 +00:00
b_win_release:
<<: *b_win
environment:
FORCE_RELEASE: ON
2020-09-16 14:24:11 +00:00
t_win: &t_win
executor:
name: win/default
shell: powershell.exe
steps:
# NOTE: Git's default core.autocrlf is fine for running soltest. We get additional coverage
# for files using CRLF that way.
2020-09-16 14:24:11 +00:00
- checkout
- attach_workspace:
at: build
- run:
name: "Install evmone"
command: scripts/install_evmone.ps1
- run:
name: "Run soltest"
command: .circleci/soltest.ps1
- store_test_results: *store_test_results
2020-09-16 14:24:11 +00:00
- store_artifacts: *artifacts_test_results
t_win_release:
<<: *t_win
2020-07-22 14:22:21 +00:00
b_bytecode_ubu:
docker:
- image: << pipeline.parameters.ubuntu-2004-docker-image >>
steps:
- checkout
- attach_workspace:
at: build
- run: mkdir test-cases/
- run: cd test-cases && ../scripts/isolate_tests.py ../test/
- run: cd test-cases && ../scripts/bytecodecompare/prepare_report.py ../build/solc/solc --interface standard-json --report-file ../bytecode-report-ubuntu-json.txt
- run: cd test-cases && ../scripts/bytecodecompare/prepare_report.py ../build/solc/solc --interface cli --report-file ../bytecode-report-ubuntu-cli.txt
- store_artifacts:
path: bytecode-report-ubuntu-json.txt
- store_artifacts:
path: bytecode-report-ubuntu-cli.txt
- persist_to_workspace:
root: .
paths:
- bytecode-report-ubuntu-json.txt
- bytecode-report-ubuntu-cli.txt
b_bytecode_osx:
macos:
xcode: "11.0.0"
environment:
TERM: xterm
steps:
- checkout
- attach_workspace:
at: .
- run: mkdir test-cases/
- run: cd test-cases && ../scripts/isolate_tests.py ../test/
- run: cd test-cases && ../scripts/bytecodecompare/prepare_report.py ../build/solc/solc --interface standard-json --report-file ../bytecode-report-osx-json.txt
- run: cd test-cases && ../scripts/bytecodecompare/prepare_report.py ../build/solc/solc --interface cli --report-file ../bytecode-report-osx-cli.txt
- store_artifacts:
path: bytecode-report-osx-json.txt
- store_artifacts:
path: bytecode-report-osx-cli.txt
- persist_to_workspace:
root: .
paths:
- bytecode-report-osx-json.txt
- bytecode-report-osx-cli.txt
b_bytecode_win:
executor:
name: win/default
shell: cmd.exe
steps:
# NOTE: For bytecode generation we need the input files to be byte-for-byte identical on all
# platforms so line ending conversions must absolutely be disabled.
- run: git config --global core.autocrlf false
- checkout
- attach_workspace:
at: build
- run: mkdir test-cases\
- run: cd test-cases\ && python ..\scripts\isolate_tests.py ..\test\
- run: cd test-cases\ && python ..\scripts\bytecodecompare\prepare_report.py ..\build\solc\Release\solc.exe --interface standard-json --report-file ..\bytecode-report-windows-json.txt
- run: cd test-cases\ && python ..\scripts\bytecodecompare\prepare_report.py ..\build\solc\Release\solc.exe --interface cli --report-file ..\bytecode-report-windows-cli.txt
- store_artifacts:
path: bytecode-report-windows-json.txt
- store_artifacts:
path: bytecode-report-windows-cli.txt
- persist_to_workspace:
root: .
paths:
- bytecode-report-windows-json.txt
- bytecode-report-windows-cli.txt
b_bytecode_ems:
docker:
- image: circleci/node:14
environment:
SOLC_EMSCRIPTEN: "On"
steps:
- checkout
- attach_workspace:
at: emscripten_build/libsolc
- run: scripts/bytecodecompare/storebytecode.sh && mv -v report.txt bytecode-report-emscripten.txt
- store_artifacts:
path: bytecode-report-emscripten.txt
- persist_to_workspace:
root: .
paths:
- bytecode-report-emscripten.txt
t_bytecode_compare:
docker:
- image: << pipeline.parameters.ubuntu-2004-docker-image >>
environment:
REPORT_FILES: |
bytecode-report-emscripten.txt
bytecode-report-ubuntu-json.txt
bytecode-report-ubuntu-cli.txt
bytecode-report-osx-json.txt
bytecode-report-osx-cli.txt
bytecode-report-windows-json.txt
bytecode-report-windows-cli.txt
steps:
- attach_workspace:
at: .
- run:
name: Compare reports
command: diff --brief --report-identical-files --from-file $REPORT_FILES
- run:
name: Print diff
when: on_fail
command: diff --unified=0 --report-identical-files --from-file $REPORT_FILES | head --lines 50
- run:
name: Install zip
when: on_fail
command: |
apt update --quiet
apt install zip --assume-yes
- run:
name: Bundle reports into a single package
when: on_fail
command: zip all-bytecode-reports.zip $REPORT_FILES
- store_artifacts:
# NOTE: store_artifacts does not support the 'when' attribute.
# Fortunately when the artifact does not exist it just says "No artifact files found" and ignores it.
path: all-bytecode-reports.zip
2018-02-08 15:12:04 +00:00
workflows:
version: 2
main:
2018-02-08 15:12:04 +00:00
jobs:
# basic checks
- chk_spelling: *workflow_trigger_on_tags
- chk_coding_style: *workflow_trigger_on_tags
2019-09-16 17:06:50 +00:00
# DISABLED FOR 0.6.0 - chk_docs_examples: *workflow_trigger_on_tags
- chk_buglist: *workflow_trigger_on_tags
- chk_proofs: *workflow_trigger_on_tags
- chk_pylint: *workflow_trigger_on_tags
2020-05-27 10:13:37 +00:00
- chk_errorcodes: *workflow_trigger_on_tags
2020-03-11 12:03:57 +00:00
- chk_antlr_grammar: *workflow_trigger_on_tags
- chk_docs_pragma_min_version: *workflow_trigger_on_tags
- t_pyscripts_ubu: *workflow_trigger_on_tags
- t_pyscripts_win: *workflow_trigger_on_tags
# build-only
- b_docs: *workflow_trigger_on_tags
2019-08-09 09:28:22 +00:00
- b_ubu_cxx20: *workflow_trigger_on_tags
- b_ubu_ossfuzz: *workflow_trigger_on_tags
# OS/X build and tests
- b_osx: *workflow_trigger_on_tags
- t_osx_cli: *workflow_osx
2019-09-20 00:39:25 +00:00
- t_osx_soltest: *workflow_osx
2020-09-08 08:28:42 +00:00
# ArchLinux build and tests
- b_archlinux: *workflow_trigger_on_tags
- t_archlinux_soltest: *workflow_archlinux
2020-09-30 12:49:27 +00:00
# Static build
- b_ubu_static: *workflow_trigger_on_tags
# Ubuntu build and tests
- b_ubu: *workflow_trigger_on_tags
- t_ubu_cli: *workflow_ubuntu2004
- t_ubu_soltest: *workflow_ubuntu2004
- t_ubu_soltest_enforce_yul: *workflow_ubuntu2004
2019-09-24 12:31:22 +00:00
- b_ubu_clang: *workflow_trigger_on_tags
- t_ubu_clang_soltest: *workflow_ubuntu2004_clang
# Ubuntu fake release build and tests
- b_ubu_release: *workflow_trigger_on_tags
- t_ubu_release_cli: *workflow_ubuntu2004_release
- t_ubu_release_soltest: *workflow_ubuntu2004_release
# Emscripten build and tests that take 15 minutes or less
- b_ems: *workflow_trigger_on_tags
- t_ems_solcjs: *workflow_emscripten
- t_ems_ext:
<<: *workflow_emscripten
name: t_ems_compile_ext_colony
project: colony
compile_only: 1
- t_ems_ext:
<<: *workflow_emscripten
name: t_ems_compile_ext_gnosis
project: gnosis
compile_only: 1
- t_ems_ext:
<<: *workflow_emscripten
name: t_ems_compile_ext_gnosis_v2
project: gnosis-v2
compile_only: 1
- t_ems_ext:
<<: *workflow_emscripten
name: t_ems_compile_ext_zeppelin
project: zeppelin
compile_only: 1
- t_ems_ext:
<<: *workflow_emscripten
name: t_ems_compile_ext_ens
project: ens
compile_only: 1
# NOTE: One of the dependencies (fsevents) fails to build its native extension on node.js 12+.
nodejs_version: 10
2020-12-04 17:42:27 +00:00
# FIXME: Gnosis tests are pretty flaky right now. They often fail on CircleCI due to random ProviderError
# and there are also other less frequent problems. See https://github.com/gnosis/safe-contracts/issues/216.
#- t_ems_ext:
# <<: *workflow_emscripten
# name: t_ems_test_ext_gnosis
# project: gnosis
# # NOTE: Tests do not start on node.js 14 ("ganache-cli exited early with code 1").
# nodejs_version: 12
- t_ems_ext:
<<: *workflow_emscripten
name: t_ems_test_ext_gnosis_v2
project: gnosis-v2
# NOTE: Tests do not start on node.js 14 ("ganache-cli exited early with code 1").
nodejs_version: 12
- t_ems_ext:
<<: *workflow_emscripten
name: t_ems_test_ext_zeppelin
project: zeppelin
- t_ems_ext:
<<: *workflow_emscripten
name: t_ems_test_ext_ens
project: ens
# NOTE: One of the dependencies (fsevents) fails to build its native extension on node.js 12+.
nodejs_version: 10
# Windows build and tests
- b_win: *workflow_trigger_on_tags
2020-07-22 14:22:21 +00:00
- b_win_release: *workflow_trigger_on_tags
2020-09-16 14:24:11 +00:00
- t_win: *workflow_win
- t_win_release: *workflow_win_release
# Bytecode comparison:
- b_bytecode_ubu:
requires:
- b_ubu
- b_bytecode_win:
requires:
- b_win
- b_bytecode_osx:
requires:
- b_osx
- b_bytecode_ems:
requires:
- b_ems
- t_bytecode_compare:
requires:
- b_bytecode_ubu
- b_bytecode_win
- b_bytecode_osx
- b_bytecode_ems
nightly:
triggers:
- schedule:
cron: "0 0 * * *"
filters:
branches:
only:
- develop
2019-09-19 00:26:39 +00:00
- develop_060
jobs:
# OSSFUZZ builds and (regression) tests
- b_ubu_ossfuzz: *workflow_trigger_on_tags
- t_ubu_ossfuzz: *workflow_ubuntu1604_ossfuzz
# Code Coverage enabled build and tests
- b_ubu_codecov: *workflow_trigger_on_tags
- t_ubu_codecov: *workflow_ubuntu2004_codecov
2020-08-24 18:11:02 +00:00
# ASan build and tests
- b_ubu_asan: *workflow_trigger_on_tags
- b_ubu_asan_clang: *workflow_trigger_on_tags
- t_ubu_asan_constantinople: *workflow_ubuntu2004_asan
- t_ubu_asan_constantinople_clang: *workflow_ubuntu2004_asan_clang
- t_ubu_asan_cli: *workflow_ubuntu2004_asan
# Emscripten build and tests that take more than 15 minutes to execute
- b_ems: *workflow_trigger_on_tags
- t_ems_ext:
<<: *workflow_emscripten
name: t_ems_test_ext_colony
project: colony
gitter_notify: yes