mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
8b64195d4b
- Also remove variables that are now redundant. - Note that this adds new variables for jobs that previously did not have them. This should not affect behavior because we were simply omitting those variables where they were not necessary.
1810 lines
58 KiB
YAML
1810 lines
58 KiB
YAML
# 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:
|
|
ubuntu-2004-docker-image:
|
|
type: string
|
|
# solbuildpackpusher/solidity-buildpack-deps:ubuntu2004-20
|
|
default: "solbuildpackpusher/solidity-buildpack-deps@sha256:7a1e1b01eda0d1e20704279672bcfd53dbbc481898ff960958a225dea76345bd"
|
|
ubuntu-2204-docker-image:
|
|
type: string
|
|
# solbuildpackpusher/solidity-buildpack-deps:ubuntu2204-5
|
|
default: "solbuildpackpusher/solidity-buildpack-deps@sha256:4df420b7ccd96f540a4300a4fae0fcac2f4d3f23ffff9e3777c1f2d7c37ef901"
|
|
ubuntu-2204-clang-docker-image:
|
|
type: string
|
|
# solbuildpackpusher/solidity-buildpack-deps:ubuntu2204.clang-4
|
|
default: "solbuildpackpusher/solidity-buildpack-deps@sha256:538596bf55961197f8b5670d8a6742d9bcd502b6a1045ae9d372cdf35ce69d93"
|
|
ubuntu-clang-ossfuzz-docker-image:
|
|
type: string
|
|
# solbuildpackpusher/solidity-buildpack-deps:ubuntu.clang.ossfuzz-2
|
|
default: "solbuildpackpusher/solidity-buildpack-deps@sha256:a4fc3a41240c3bc58882d3f504e446c6931b547119012f5c45f79b0df91dbdd1"
|
|
emscripten-docker-image:
|
|
type: string
|
|
# NOTE: Please remember to update the `build_emscripten.sh` whenever the hash of this image changes.
|
|
# solbuildpackpusher/solidity-buildpack-deps:emscripten-16
|
|
default: "solbuildpackpusher/solidity-buildpack-deps@sha256:19fcb5ac029bbc27ec36e10f7d14ea224d8010145f9690562ef084fd16146b0c"
|
|
evm-version:
|
|
type: string
|
|
default: london
|
|
|
|
orbs:
|
|
win: circleci/windows@2.2.0
|
|
|
|
commands:
|
|
matrix_notify_unless_pr:
|
|
description: "Posts a notification to the solidity-dev room on Matrix (if not running on a PR)."
|
|
parameters:
|
|
event:
|
|
type: enum
|
|
enum: ["failure", "success", "release"]
|
|
condition:
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: "Matrix notification"
|
|
when: << parameters.condition >>
|
|
command: scripts/ci/notification/matrix_notification.sh << parameters.event >>
|
|
|
|
matrix_notify_failure_unless_pr:
|
|
description: "Posts a failure notification to the main room on Matrix (if not running on a PR)."
|
|
steps:
|
|
- matrix_notify_unless_pr:
|
|
event: failure
|
|
condition: on_fail
|
|
|
|
matrix_notify_success_unless_pr:
|
|
description: "Posts a success notification to the main room on Matrix (if not running on a PR)."
|
|
steps:
|
|
- matrix_notify_unless_pr:
|
|
event: success
|
|
condition: on_success
|
|
|
|
matrix_notify_release_unless_pr:
|
|
description: "Posts a release notification to the main room on Matrix (if not running on a PR)."
|
|
steps:
|
|
- matrix_notify_unless_pr:
|
|
event: release
|
|
condition: on_success
|
|
|
|
prepare_bytecode_report:
|
|
description: "Generate bytecode report and upload it as an artifact."
|
|
parameters:
|
|
label:
|
|
type: string
|
|
binary_type:
|
|
type: enum
|
|
enum:
|
|
- solcjs
|
|
- native
|
|
binary_path:
|
|
type: string
|
|
preset:
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: Generate bytecode reports for the selected preset
|
|
command: |
|
|
.circleci/parallel_bytecode_report.sh \
|
|
"<< parameters.label >>" \
|
|
"<< parameters.binary_type >>" \
|
|
"${PWD}/<< parameters.binary_path >>" \
|
|
"<< parameters.preset >>"
|
|
- store_artifacts:
|
|
path: bytecode-report-<< parameters.label >>-standard-json-<< parameters.preset >>.txt
|
|
- store_artifacts:
|
|
path: bytecode-report-<< parameters.label >>-cli-<< parameters.preset >>.txt
|
|
- store_artifacts:
|
|
path: bytecode-report-<< parameters.label >>-<< parameters.preset >>.txt
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- bytecode-report-<< parameters.label >>*.txt
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
install_python3:
|
|
description: "Install python3 and given packages."
|
|
parameters:
|
|
packages:
|
|
description: "List of extra Python packages to be installed (separated by space)."
|
|
type: string
|
|
default: ""
|
|
steps:
|
|
- run:
|
|
name: Install python and dependencies
|
|
command: |
|
|
sudo apt update
|
|
sudo apt install python3 python3-pip --assume-yes --no-install-recommends
|
|
if [[ "<< parameters.packages >>" != "" ]]
|
|
then
|
|
echo "Installing additional packages..."
|
|
python3 -m pip install --user << parameters.packages >>
|
|
fi
|
|
|
|
install_foundry:
|
|
description: "Install Foundry."
|
|
parameters:
|
|
version:
|
|
type: string
|
|
default: "nightly"
|
|
install_path:
|
|
type: string
|
|
default: /home/circleci/bin
|
|
steps:
|
|
- run:
|
|
name: Setup Foundry environment variables
|
|
command: |
|
|
FOUNDRY_REPO="foundry-rs/foundry"
|
|
FOUNDRY_VERSION="<< parameters.version >>"
|
|
# Make authenticated requests when the Github token is available
|
|
if [[ -n "$GITHUB_ACCESS_TOKEN" ]]; then
|
|
EXTRA_HEADERS=(--header 'Authorization: Bearer '"${GITHUB_ACCESS_TOKEN}")
|
|
fi
|
|
FOUNDRY_RELEASE_SHA=$(curl \
|
|
--silent \
|
|
--fail \
|
|
--show-error \
|
|
"${EXTRA_HEADERS[@]}" \
|
|
"https://api.github.com/repos/${FOUNDRY_REPO}/git/refs/tags/${FOUNDRY_VERSION}" \
|
|
| jq --raw-output .object.sha \
|
|
)
|
|
echo "export FOUNDRY_REPO=$FOUNDRY_REPO" >> "$BASH_ENV"
|
|
echo "export FOUNDRY_VERSION=$FOUNDRY_VERSION" >> "$BASH_ENV"
|
|
echo "export FOUNDRY_RELEASE_TAG='nightly-${FOUNDRY_RELEASE_SHA}'" >> "$BASH_ENV"
|
|
# Save commit sha for caching
|
|
echo "$FOUNDRY_RELEASE_SHA" > /tmp/workspace/foundry-release-sha
|
|
- restore_cache:
|
|
keys:
|
|
- foundry-<< parameters.version >>-{{ arch }}-{{ checksum "/tmp/workspace/foundry-release-sha" }}
|
|
# WARNING! If you edit anything between here and save_cache, remember to invalidate the cache manually.
|
|
- run:
|
|
name: Install foundry
|
|
command: |
|
|
! forge --version 2> /dev/null
|
|
curl \
|
|
--fail \
|
|
--location \
|
|
--output /tmp/foundry.tar.gz \
|
|
"https://github.com/${FOUNDRY_REPO}/releases/download/${FOUNDRY_RELEASE_TAG}/foundry_${FOUNDRY_VERSION}_linux_amd64.tar.gz"
|
|
cd "<< parameters.install_path >>"
|
|
tar --extract --gzip --file /tmp/foundry.tar.gz --one-top-level
|
|
ln --symbolic --force foundry/{forge,anvil,cast,chisel} .
|
|
- save_cache:
|
|
key: foundry-<< parameters.version >>-{{ arch }}-{{ checksum "/tmp/workspace/foundry-release-sha" }}
|
|
paths:
|
|
- << parameters.install_path >>
|
|
|
|
defaults:
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Build Templates
|
|
|
|
- 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
|
|
|
|
- run_proofs: &run_proofs
|
|
name: Correctness proofs for optimization rules
|
|
command: scripts/run_proofs.sh
|
|
|
|
- run_soltest: &run_soltest
|
|
name: soltest
|
|
no_output_timeout: 30m
|
|
command: ./.circleci/soltest.sh
|
|
|
|
- run_soltest_all: &run_soltest_all
|
|
name: soltest_all
|
|
no_output_timeout: 30m
|
|
command: ./.circleci/soltest_all.sh
|
|
|
|
- run_cmdline_tests: &run_cmdline_tests
|
|
name: command line tests
|
|
no_output_timeout: 30m
|
|
command: .circleci/parallel_cli_tests.py
|
|
|
|
- run_docs_pragma_min_version: &run_docs_pragma_min_version
|
|
name: docs pragma version check
|
|
command: ./scripts/docs_version_pragma_check.sh
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Matrix templates
|
|
|
|
- bytecode_compare_env_presets: &bytecode_compare_env_presets
|
|
PRESETS:
|
|
legacy-optimize
|
|
legacy-no-optimize
|
|
|
|
- bytecode_compare_preset_matrix: &bytecode_compare_preset_matrix
|
|
parameters:
|
|
preset:
|
|
# NOTE: Keep in sync with preset list in bytecode_compare_env_presets
|
|
- legacy-optimize
|
|
- legacy-no-optimize
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Artifacts Templates
|
|
|
|
# compiled solc executable target
|
|
- artifacts_solc: &artifacts_solc
|
|
path: build/solc/solc
|
|
destination: solc
|
|
|
|
# windows artifacts
|
|
- artifact_solc_windows: &artifact_solc_windows
|
|
path: upload/
|
|
|
|
- artifact_yul_phaser: &artifact_yul_phaser
|
|
path: build/tools/yul-phaser
|
|
destination: yul-phaser
|
|
|
|
# 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
|
|
- 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
|
|
|
|
# test result output directory
|
|
- artifacts_test_results: &artifacts_test_results
|
|
path: test_results/
|
|
destination: test_results/
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Step Templates
|
|
|
|
# store_test_results helper
|
|
- store_test_results: &store_test_results
|
|
path: test_results/
|
|
|
|
- steps_soltest: &steps_soltest
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: build
|
|
# NOTE: Different build jobs produce different soltest executables (release/debug,
|
|
# clang/gcc, windows/linux/macos, etc.). The executable used by these steps comes from the
|
|
# attached workspace and we only see the items added to the workspace by jobs we depend on.
|
|
- run: *run_soltest
|
|
- store_test_results: *store_test_results
|
|
- store_artifacts: *artifacts_test_results
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
- steps_test_lsp: &steps_test_lsp
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: build
|
|
- run:
|
|
name: Install dependencies
|
|
command: pip install --user deepdiff colorama
|
|
- run:
|
|
name: Executing solc LSP test suite
|
|
command: ./test/lsp.py ./build/solc/solc --non-interactive
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
- steps_build: &steps_build
|
|
steps:
|
|
- checkout
|
|
- run: *run_build
|
|
- store_artifacts: *artifacts_solc
|
|
- store_artifacts: *artifact_yul_phaser
|
|
- persist_to_workspace: *artifacts_executables
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
- steps_soltest_all: &steps_soltest_all
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: build
|
|
- run: *run_soltest_all
|
|
- store_test_results: *store_test_results
|
|
- store_artifacts: *artifacts_test_results
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
- steps_cmdline_tests: &steps_cmdline_tests
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: build
|
|
- run: *run_cmdline_tests
|
|
- store_test_results: *store_test_results
|
|
- store_artifacts: *artifacts_test_results
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
- steps_install_dependencies_osx: &steps_install_dependencies_osx
|
|
steps:
|
|
# FIXME: We used to cache dependencies on macOS but now it takes longer than just installing
|
|
# them each time. See https://github.com/ethereum/solidity/issues/12925.
|
|
- run:
|
|
name: Install build dependencies
|
|
command: ./.circleci/osx_install_dependencies.sh
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Base Image Templates
|
|
|
|
- base_archlinux: &base_archlinux
|
|
docker:
|
|
- image: archlinux:base
|
|
environment: &base_archlinux_env
|
|
TERM: xterm
|
|
MAKEFLAGS: -j 3
|
|
|
|
- base_archlinux_large: &base_archlinux_large
|
|
<<: *base_archlinux
|
|
resource_class: large
|
|
environment: &base_archlinux_large_env
|
|
<<: *base_archlinux_env
|
|
MAKEFLAGS: -j 5
|
|
|
|
- base_cimg_small: &base_cimg_small
|
|
docker:
|
|
- image: cimg/base:current
|
|
resource_class: small
|
|
environment: &base_cimg_small_env
|
|
TERM: xterm
|
|
MAKEFLAGS: -j 2
|
|
|
|
- base_ems_large: &base_ems_large
|
|
docker:
|
|
- image: << pipeline.parameters.emscripten-docker-image >>
|
|
resource_class: large
|
|
environment: &base_ems_large_env
|
|
TERM: xterm
|
|
MAKEFLAGS: -j 5
|
|
|
|
- base_node_small: &base_node_small
|
|
docker:
|
|
- image: cimg/node:current
|
|
resource_class: small
|
|
environment: &base_node_small_env
|
|
TERM: xterm
|
|
MAKEFLAGS: -j 2
|
|
|
|
- base_osx: &base_osx
|
|
macos:
|
|
xcode: "14.2.0"
|
|
resource_class: macos.x86.medium.gen2
|
|
environment: &base_osx_env
|
|
TERM: xterm
|
|
MAKEFLAGS: -j5
|
|
|
|
- base_osx_large: &base_osx_large
|
|
<<: *base_osx
|
|
resource_class: large
|
|
environment: &base_osx_large_env
|
|
<<: *base_osx_env
|
|
MAKEFLAGS: -j10
|
|
|
|
- base_python_small: &base_python_small
|
|
docker:
|
|
- image: cimg/python:3.6
|
|
resource_class: small
|
|
environment: &base_python_small_env
|
|
TERM: xterm
|
|
MAKEFLAGS: -j 2
|
|
|
|
- base_ubuntu_clang: &base_ubuntu_clang
|
|
docker:
|
|
- image: << pipeline.parameters.ubuntu-clang-ossfuzz-docker-image >>
|
|
environment: &base_ubuntu_clang_env
|
|
TERM: xterm
|
|
MAKEFLAGS: -j 3
|
|
|
|
- base_ubuntu_clang_small: &base_ubuntu_clang_small
|
|
<<: *base_ubuntu_clang
|
|
resource_class: small
|
|
environment: &base_ubuntu_clang_small_env
|
|
<<: *base_ubuntu_clang_env
|
|
MAKEFLAGS: -j 2
|
|
|
|
- base_ubuntu2004: &base_ubuntu2004
|
|
docker:
|
|
- image: << pipeline.parameters.ubuntu-2004-docker-image >>
|
|
environment: &base_ubuntu2004_env
|
|
TERM: xterm
|
|
MAKEFLAGS: -j 3
|
|
|
|
- base_ubuntu2004_small: &base_ubuntu2004_small
|
|
<<: *base_ubuntu2004
|
|
resource_class: small
|
|
environment: &base_ubuntu2004_small_env
|
|
<<: *base_ubuntu2004_env
|
|
MAKEFLAGS: -j 2
|
|
|
|
- base_ubuntu2004_xlarge: &base_ubuntu2004_xlarge
|
|
<<: *base_ubuntu2004
|
|
resource_class: xlarge
|
|
environment: &base_ubuntu2004_xlarge_env
|
|
<<: *base_ubuntu2004_env
|
|
MAKEFLAGS: -j 10
|
|
|
|
- base_ubuntu2204: &base_ubuntu2204
|
|
docker:
|
|
- image: << pipeline.parameters.ubuntu-2204-docker-image >>
|
|
environment: &base_ubuntu2204_env
|
|
TERM: xterm
|
|
MAKEFLAGS: -j 3
|
|
|
|
- base_ubuntu2204_clang: &base_ubuntu2204_clang
|
|
docker:
|
|
- image: << pipeline.parameters.ubuntu-2204-clang-docker-image >>
|
|
environment: &base_ubuntu2204_clang_env
|
|
TERM: xterm
|
|
CC: clang
|
|
CXX: clang++
|
|
MAKEFLAGS: -j 3
|
|
|
|
- base_ubuntu2204_clang_large: &base_ubuntu2204_clang_large
|
|
<<: *base_ubuntu2204_clang
|
|
resource_class: large
|
|
environment: &base_ubuntu2204_clang_large_env
|
|
<<: *base_ubuntu2204_clang_env
|
|
MAKEFLAGS: -j 5
|
|
|
|
- base_ubuntu2204_small: &base_ubuntu2204_small
|
|
<<: *base_ubuntu2204
|
|
resource_class: small
|
|
environment: &base_ubuntu2204_small_env
|
|
<<: *base_ubuntu2204_env
|
|
MAKEFLAGS: -j 2
|
|
|
|
- base_ubuntu2204_large: &base_ubuntu2204_large
|
|
<<: *base_ubuntu2204
|
|
resource_class: large
|
|
environment: &base_ubuntu2204_large_env
|
|
<<: *base_ubuntu2204_env
|
|
MAKEFLAGS: -j 5
|
|
|
|
- base_ubuntu2204_xlarge: &base_ubuntu2204_xlarge
|
|
<<: *base_ubuntu2204
|
|
resource_class: xlarge
|
|
environment: &base_ubuntu2204_xlarge_env
|
|
<<: *base_ubuntu2204_env
|
|
MAKEFLAGS: -j 10
|
|
|
|
- base_win: &base_win
|
|
executor:
|
|
name: win/default
|
|
shell: bash.exe
|
|
|
|
- base_win_large: &base_win_large
|
|
executor:
|
|
name: win/default
|
|
size: large
|
|
shell: bash.exe
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Workflow Templates
|
|
|
|
- on_all_tags_and_branches: &on_all_tags_and_branches
|
|
filters:
|
|
tags:
|
|
only: /.*/
|
|
|
|
- on_version_tags: &on_version_tags
|
|
filters:
|
|
tags:
|
|
only: /^v.*/
|
|
branches:
|
|
ignore: /.*/
|
|
|
|
- on_develop: &on_develop
|
|
filters:
|
|
branches:
|
|
only:
|
|
- develop
|
|
|
|
- requires_nothing: &requires_nothing
|
|
<<: *on_all_tags_and_branches
|
|
|
|
- requires_b_ubu: &requires_b_ubu
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_ubu
|
|
|
|
- requires_b_ubu_clang: &requires_b_ubu_clang
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_ubu_clang
|
|
|
|
- requires_b_ubu_force_release: &requires_b_ubu_force_release
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_ubu_force_release
|
|
|
|
- requires_b_ubu_static: &requires_b_ubu_static
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_ubu_static
|
|
|
|
- requires_b_archlinux: &requires_b_archlinux
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_archlinux
|
|
|
|
- requires_b_ubu_codecov: &requires_b_ubu_codecov
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_ubu_codecov
|
|
|
|
- requires_b_osx: &requires_b_osx
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_osx
|
|
|
|
- requires_b_ubu_asan: &requires_b_ubu_asan
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_ubu_asan
|
|
|
|
- requires_b_ubu_asan_clang: &requires_b_ubu_asan_clang
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_ubu_asan_clang
|
|
|
|
- requires_b_ubu_ubsan_clang: &requires_b_ubu_ubsan_clang
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_ubu_ubsan_clang
|
|
|
|
- requires_b_ems: &requires_b_ems
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_ems
|
|
|
|
- requires_b_ubu_ossfuzz: &requires_b_ubu_ossfuzz
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_ubu_ossfuzz
|
|
|
|
- requires_b_win: &requires_b_win
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_win
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Parameterized Job Templates
|
|
|
|
# Separate compile-only runs of those external tests where a full run takes much longer.
|
|
# Also see https://github.com/ethereum/solidity/pull/14234 for why we excluded those
|
|
# external tests from the nightly jobs.
|
|
- job_ems_compile_ext_colony: &job_ems_compile_ext_colony
|
|
<<: *requires_b_ems
|
|
name: t_ems_compile_ext_colony
|
|
project: colony
|
|
binary_type: solcjs
|
|
compile_only: 1
|
|
image: cimg/node:14.20
|
|
python2: true
|
|
|
|
- job_native_test_ext_gnosis: &job_native_test_ext_gnosis
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_gnosis
|
|
project: gnosis
|
|
binary_type: native
|
|
image: cimg/node:18.16
|
|
|
|
- job_native_test_ext_zeppelin: &job_native_test_ext_zeppelin
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_zeppelin
|
|
project: zeppelin
|
|
binary_type: native
|
|
image: cimg/node:18.16
|
|
resource_class: large
|
|
|
|
- job_native_test_ext_ens: &job_native_test_ext_ens
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_ens
|
|
project: ens
|
|
binary_type: native
|
|
image: cimg/node:18.16
|
|
|
|
- job_native_test_ext_trident: &job_native_test_ext_trident
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_trident
|
|
project: trident
|
|
binary_type: native
|
|
image: cimg/node:18.16
|
|
|
|
- job_native_test_ext_euler: &job_native_test_ext_euler
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_euler
|
|
project: euler
|
|
binary_type: native
|
|
resource_class: medium
|
|
|
|
- job_native_test_ext_yield_liquidator: &job_native_test_ext_yield_liquidator
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_yield_liquidator
|
|
project: yield-liquidator
|
|
binary_type: native
|
|
image: cimg/node:18.16
|
|
|
|
- job_native_test_ext_bleeps: &job_native_test_ext_bleeps
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_bleeps
|
|
project: bleeps
|
|
binary_type: native
|
|
resource_class: medium
|
|
|
|
- job_native_test_ext_pool_together: &job_native_test_ext_pool_together
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_pool_together
|
|
project: pool-together
|
|
binary_type: native
|
|
image: cimg/node:18.16
|
|
|
|
- job_native_test_ext_perpetual_pools: &job_native_test_ext_perpetual_pools
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_perpetual_pools
|
|
project: perpetual-pools
|
|
binary_type: native
|
|
image: cimg/node:18.16
|
|
|
|
- job_native_test_ext_uniswap: &job_native_test_ext_uniswap
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_uniswap
|
|
project: uniswap
|
|
binary_type: native
|
|
image: cimg/node:18.16
|
|
|
|
- job_native_test_ext_prb_math: &job_native_test_ext_prb_math
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_prb_math
|
|
project: prb-math
|
|
binary_type: native
|
|
image: cimg/node:18.16
|
|
|
|
- job_native_test_ext_elementfi: &job_native_test_ext_elementfi
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_elementfi
|
|
project: elementfi
|
|
binary_type: native
|
|
image: cimg/node:18.16
|
|
resource_class: medium
|
|
|
|
- job_native_test_ext_brink: &job_native_test_ext_brink
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_brink
|
|
project: brink
|
|
binary_type: native
|
|
image: cimg/node:18.16
|
|
|
|
- job_native_test_ext_chainlink: &job_native_test_ext_chainlink
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_chainlink
|
|
project: chainlink
|
|
binary_type: native
|
|
image: cimg/node:18.16
|
|
resource_class: large # Tests run out of memory on a smaller machine
|
|
|
|
- job_native_test_ext_gp2: &job_native_test_ext_gp2
|
|
<<: *requires_b_ubu_static
|
|
name: t_native_test_ext_gp2
|
|
project: gp2
|
|
binary_type: native
|
|
image: cimg/node:18.16
|
|
|
|
- job_b_ubu_asan_clang: &job_b_ubu_asan_clang
|
|
<<: *on_all_tags_and_branches
|
|
name: b_ubu_asan_clang
|
|
cmake_options: -DSANITIZE=address
|
|
|
|
- job_b_ubu_ubsan_clang: &job_b_ubu_ubsan_clang
|
|
<<: *on_all_tags_and_branches
|
|
name: b_ubu_ubsan_clang
|
|
cmake_options: -DSANITIZE=undefined
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
jobs:
|
|
|
|
chk_spelling:
|
|
<<: *base_python_small
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: build
|
|
- run:
|
|
name: Install dependencies
|
|
command: |
|
|
pip install --user codespell
|
|
- run:
|
|
name: Check spelling
|
|
command: ~/.local/bin/codespell --skip "*.enc,.git,Dockerfile*,LICENSE,codespell_whitelist.txt,codespell_ignored_lines.txt" --ignore-words ./scripts/codespell_whitelist.txt --exclude-file ./scripts/codespell_ignored_lines.txt
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
chk_docs_examples:
|
|
<<: *base_node_small
|
|
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
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
chk_coding_style:
|
|
<<: *base_cimg_small
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: Install shellcheck
|
|
command: |
|
|
sudo apt -q update
|
|
sudo apt install -y shellcheck
|
|
- run:
|
|
name: Check for C++ coding style
|
|
command: ./scripts/check_style.sh
|
|
- run:
|
|
name: checking shell scripts
|
|
command: ./scripts/chk_shellscripts/chk_shellscripts.sh
|
|
- run:
|
|
name: Check for broken symlinks
|
|
command: ./scripts/check_symlinks.sh
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
chk_errorcodes:
|
|
<<: *base_python_small
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: Check for error codes
|
|
command: ./scripts/error_codes.py --check
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
chk_pylint:
|
|
<<: *base_cimg_small
|
|
steps:
|
|
- checkout
|
|
- install_python3:
|
|
packages: >
|
|
pylint
|
|
z3-solver
|
|
pygments-lexer-solidity
|
|
parsec
|
|
tabulate
|
|
deepdiff
|
|
colorama
|
|
requests
|
|
- run: pylint --version
|
|
- run:
|
|
name: Linting Python Scripts
|
|
command: ./scripts/pylint_all.py
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
chk_antlr_grammar:
|
|
<<: *base_cimg_small
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: Install Java
|
|
command: |
|
|
sudo apt -q update
|
|
sudo apt install -y openjdk-17-jdk
|
|
- run:
|
|
name: Run tests
|
|
command: ./scripts/test_antlr_grammar.sh
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
chk_buglist:
|
|
<<: *base_node_small
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: JS deps
|
|
command: |
|
|
npm install download
|
|
npm install JSONPath
|
|
npm install mktemp
|
|
- run:
|
|
name: Test buglist
|
|
command: ./test/buglistTests.js
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
chk_proofs:
|
|
<<: *base_cimg_small
|
|
steps:
|
|
- checkout
|
|
- install_python3:
|
|
packages: z3-solver
|
|
- run: *run_proofs
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
chk_docs_pragma_min_version:
|
|
<<: *base_ubuntu2204_small
|
|
steps:
|
|
- checkout
|
|
- run: *run_docs_pragma_min_version
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
t_ubu_pyscripts:
|
|
<<: *base_ubuntu2204_small
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: Python unit tests
|
|
command: python3 test/pyscriptTests.py
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
t_win_pyscripts:
|
|
<<: *base_win
|
|
steps:
|
|
- run: git config --global core.autocrlf false
|
|
- checkout
|
|
- run:
|
|
name: Python unit tests
|
|
command: python.exe test/pyscriptTests.py
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
b_ubu: &b_ubu
|
|
# this runs 2x faster on xlarge but takes 4x more resources (compared to medium).
|
|
# Enough other jobs depend on it that it's worth it though.
|
|
<<: *base_ubuntu2204_xlarge
|
|
<<: *steps_build
|
|
|
|
# x64 ASAN build, for testing for memory related bugs
|
|
b_ubu_asan: &b_ubu_asan
|
|
# Runs slightly faster on large and xlarge but we only run it nightly so efficiency matters more.
|
|
<<: *base_ubuntu2204
|
|
environment:
|
|
<<: *base_ubuntu2204_env
|
|
CMAKE_OPTIONS: -DSANITIZE=address
|
|
CMAKE_BUILD_TYPE: Release
|
|
<<: *steps_build
|
|
|
|
b_ubu_clang: &b_ubu_clang
|
|
<<: *base_ubuntu2204_clang_large
|
|
environment:
|
|
<<: *base_ubuntu2204_clang_large_env
|
|
MAKEFLAGS: -j 10
|
|
<<: *steps_build
|
|
|
|
b_ubu_san_clang:
|
|
# This runs a bit faster on large and xlarge but on nightly efficiency matters more.
|
|
parameters:
|
|
cmake_options:
|
|
type: string
|
|
<<: *base_ubuntu2204_clang
|
|
environment:
|
|
<<: *base_ubuntu2204_clang_env
|
|
CMAKE_OPTIONS: << parameters.cmake_options >>
|
|
<<: *steps_build
|
|
|
|
b_ubu_force_release: &b_ubu_force_release
|
|
<<: *b_ubu
|
|
environment:
|
|
<<: *base_ubuntu2204_xlarge_env
|
|
FORCE_RELEASE: ON
|
|
|
|
b_ubu_static:
|
|
# We temporarily keep building static release binaries on ubuntu 20.04
|
|
# to avoid glibc incompatibilities.
|
|
# See: https://github.com/ethereum/solidity/issues/13954
|
|
# On large runs 2x faster than on medium. 3x on xlarge.
|
|
<<: *base_ubuntu2004_xlarge
|
|
environment:
|
|
<<: *base_ubuntu2204_xlarge_env
|
|
CMAKE_OPTIONS: -DCMAKE_BUILD_TYPE=Release -DUSE_Z3_DLOPEN=ON -DUSE_CVC4=OFF -DSOLC_STATIC_STDLIBS=ON
|
|
steps:
|
|
- checkout
|
|
- run: *run_build
|
|
- run:
|
|
name: strip binary
|
|
command: strip build/solc/solc
|
|
- store_artifacts:
|
|
path: build/solc/solc
|
|
destination: solc-static-linux
|
|
- run: mv build/solc/solc build/solc/solc-static-linux
|
|
- persist_to_workspace:
|
|
root: build
|
|
paths:
|
|
- solc/solc-static-linux
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
b_ubu_codecov:
|
|
# Runs ~30% faster on large but we only run it nightly so efficiency matters more.
|
|
<<: *base_ubuntu2204
|
|
environment:
|
|
<<: *base_ubuntu2204_env
|
|
COVERAGE: ON
|
|
CMAKE_BUILD_TYPE: Debug
|
|
steps:
|
|
- checkout
|
|
- run: *run_build
|
|
- persist_to_workspace: *artifacts_executables
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
t_ubu_codecov:
|
|
<<: *base_ubuntu2204_large
|
|
environment:
|
|
<<: *base_ubuntu2204_large_env
|
|
EVM: << pipeline.parameters.evm-version >>
|
|
OPTIMIZE: 1
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: build
|
|
- run:
|
|
name: "soltest: Syntax Tests"
|
|
command: build/test/soltest -t 'syntaxTest*' -- --testpath test
|
|
- 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
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
# 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.
|
|
b_ubu_cxx20:
|
|
<<: *base_ubuntu2204_large
|
|
environment:
|
|
<<: *base_ubuntu2204_large_env
|
|
CMAKE_BUILD_TYPE: Debug
|
|
CMAKE_OPTIONS: -DCMAKE_CXX_STANDARD=20 -DUSE_CVC4=OFF
|
|
MAKEFLAGS: -j 10
|
|
steps:
|
|
- checkout
|
|
- run: *run_build
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
b_ubu_ossfuzz: &b_ubu_ossfuzz
|
|
<<: *base_ubuntu_clang
|
|
steps:
|
|
- checkout
|
|
- run: *setup_prerelease_commit_hash
|
|
- run: *run_build_ossfuzz
|
|
- persist_to_workspace: *artifacts_executables_ossfuzz
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
t_ubu_ossfuzz: &t_ubu_ossfuzz
|
|
<<: *base_ubuntu_clang_small
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: build
|
|
- run:
|
|
name: Regression tests
|
|
command: |
|
|
git clone https://github.com/ethereum/solidity-fuzzing-corpus /tmp/solidity-fuzzing-corpus
|
|
mkdir -p test_results
|
|
scripts/regressions.py -o test_results
|
|
- store_test_results: *store_test_results
|
|
- store_artifacts: *artifacts_test_results
|
|
|
|
b_archlinux:
|
|
<<: *base_archlinux_large
|
|
environment:
|
|
<<: *base_archlinux_large_env
|
|
# This can be switched off if we run out of sync with Arch.
|
|
USE_Z3: ON
|
|
steps:
|
|
- run:
|
|
name: Install build dependencies
|
|
command: |
|
|
pacman --noconfirm -Syu --noprogressbar --needed base-devel boost cmake cvc4 git openssh tar
|
|
- checkout
|
|
- run: *run_build
|
|
- store_artifacts: *artifacts_solc
|
|
- persist_to_workspace: *artifacts_executables
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
b_osx:
|
|
<<: *base_osx_large
|
|
environment:
|
|
<<: *base_osx_large_env
|
|
CMAKE_BUILD_TYPE: Release
|
|
steps:
|
|
- checkout
|
|
- when:
|
|
condition: true
|
|
<<: *steps_install_dependencies_osx
|
|
- run: *run_build
|
|
- store_artifacts: *artifacts_solc
|
|
- store_artifacts: *artifact_yul_phaser
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- build/solc/solc
|
|
- build/test/soltest
|
|
- build/test/tools/solfuzzer
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
t_osx_soltest: &t_osx_soltest
|
|
<<: *base_osx
|
|
environment:
|
|
<<: *base_osx_env
|
|
EVM: << pipeline.parameters.evm-version >>
|
|
OPTIMIZE: 0
|
|
steps:
|
|
- checkout
|
|
- when:
|
|
condition: true
|
|
<<: *steps_install_dependencies_osx
|
|
- attach_workspace:
|
|
at: .
|
|
- run: *run_soltest
|
|
- store_test_results: *store_test_results
|
|
- store_artifacts: *artifacts_test_results
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
t_osx_cli:
|
|
<<: *base_osx
|
|
parallelism: 7 # Should match number of tests in .circleci/cli.sh
|
|
steps:
|
|
- checkout
|
|
- when:
|
|
condition: true
|
|
<<: *steps_install_dependencies_osx
|
|
- attach_workspace:
|
|
at: .
|
|
- run: *run_cmdline_tests
|
|
- store_artifacts: *artifacts_test_results
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
b_ems:
|
|
<<: *base_ems_large
|
|
environment:
|
|
<<: *base_ems_large_env
|
|
MAKEFLAGS: -j 10
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: Build
|
|
command: |
|
|
scripts/ci/build_emscripten.sh
|
|
- store_artifacts:
|
|
path: upload/soljson.js
|
|
destination: soljson.js
|
|
- run: mkdir -p workspace
|
|
- run: cp upload/soljson.js workspace/soljson.js
|
|
- run: scripts/get_version.sh > workspace/version.txt
|
|
- persist_to_workspace:
|
|
root: workspace
|
|
paths:
|
|
- soljson.js
|
|
- version.txt
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
b_docs:
|
|
<<: *base_ubuntu2204_small
|
|
steps:
|
|
- checkout
|
|
- run: *setup_prerelease_commit_hash
|
|
- run:
|
|
name: Build documentation
|
|
command: ./docs/docs.sh
|
|
- store_artifacts:
|
|
path: docs/_build/html/
|
|
destination: docs-html
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
t_ubu_soltest_all: &t_ubu_soltest_all
|
|
<<: *base_ubuntu2204_large
|
|
parallelism: 50
|
|
<<: *steps_soltest_all
|
|
|
|
t_ubu_lsp: &t_ubu_lsp
|
|
<<: *base_ubuntu2204_small
|
|
<<: *steps_test_lsp
|
|
|
|
t_archlinux_soltest: &t_archlinux_soltest
|
|
<<: *base_archlinux
|
|
parallelism: 20
|
|
environment:
|
|
<<: *base_archlinux_env
|
|
EVM: << pipeline.parameters.evm-version >>
|
|
OPTIMIZE: 0
|
|
# 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.
|
|
SOLTEST_FLAGS: --no-semantic-tests --no-smt
|
|
steps:
|
|
- run:
|
|
name: Install runtime dependencies
|
|
command: |
|
|
pacman --noconfirm -Syu --noprogressbar --needed base-devel boost cmake z3 cvc4 git openssh tar
|
|
- when:
|
|
condition: true
|
|
<<: *steps_soltest
|
|
|
|
t_ubu_clang_soltest: &t_ubu_clang_soltest
|
|
<<: *base_ubuntu2204_clang
|
|
parallelism: 20
|
|
environment:
|
|
<<: *base_ubuntu2204_clang_env
|
|
EVM: << pipeline.parameters.evm-version >>
|
|
OPTIMIZE: 0
|
|
# The high parallelism in this job is causing the SMT tests to run out of memory,
|
|
# so disabling for now.
|
|
SOLTEST_FLAGS: --no-smt
|
|
<<: *steps_soltest
|
|
|
|
t_ubu_force_release_soltest_all: &t_ubu_force_release_soltest_all
|
|
# NOTE: This definition is identical to t_ubu_soltest_all but in the workflow we make it depend on
|
|
# a different job (b_ubu_force_release) so the workspace it attaches contains a different executable.
|
|
<<: *t_ubu_soltest_all
|
|
|
|
t_ubu_cli: &t_ubu_cli
|
|
<<: *base_ubuntu2204_small
|
|
parallelism: 7 # Should match number of tests in .circleci/cli.sh
|
|
<<: *steps_cmdline_tests
|
|
|
|
t_ubu_force_release_cli: &t_ubu_force_release_cli
|
|
<<: *t_ubu_cli
|
|
|
|
t_ubu_locale:
|
|
<<: *base_ubuntu2204_small
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: build
|
|
- run: test/localeTest.sh build/solc/solc
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
t_ubu_asan_cli:
|
|
# Runs slightly faster on medium but we only run it nightly so efficiency matters more.
|
|
<<: *base_ubuntu2204
|
|
parallelism: 7 # Should match number of tests in .circleci/cli.sh
|
|
environment:
|
|
<<: *base_ubuntu2204_env
|
|
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
|
|
# Suppress CLN memory leak.
|
|
# See: https://github.com/ethereum/solidity/issues/13891 for details.
|
|
LSAN_OPTIONS: suppressions=/root/project/.circleci/cln-asan.supp:print_suppressions=0
|
|
<<: *steps_cmdline_tests
|
|
|
|
t_ubu_asan_soltest:
|
|
<<: *base_ubuntu2204
|
|
parallelism: 20
|
|
environment:
|
|
<<: *base_ubuntu2204_env
|
|
EVM: << pipeline.parameters.evm-version >>
|
|
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
|
|
# Suppress CLN memory leak.
|
|
# See: https://github.com/ethereum/solidity/issues/13891 for details.
|
|
LSAN_OPTIONS: suppressions=/root/project/.circleci/cln-asan.supp
|
|
<<: *steps_soltest
|
|
|
|
t_ubu_asan_clang_soltest:
|
|
<<: *base_ubuntu2204_clang
|
|
parallelism: 20
|
|
environment:
|
|
<<: *base_ubuntu2204_clang_env
|
|
EVM: << pipeline.parameters.evm-version >>
|
|
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
|
|
<<: *steps_soltest
|
|
|
|
t_ubu_ubsan_clang_soltest:
|
|
<<: *base_ubuntu2204_clang
|
|
parallelism: 20
|
|
environment:
|
|
<<: *base_ubuntu2204_clang_env
|
|
EVM: << pipeline.parameters.evm-version >>
|
|
SOLTEST_FLAGS: --no-smt
|
|
<<: *steps_soltest
|
|
|
|
t_ubu_ubsan_clang_cli:
|
|
<<: *base_ubuntu2204_clang
|
|
parallelism: 7 # Should match number of tests in .circleci/cli.sh
|
|
<<: *steps_cmdline_tests
|
|
|
|
t_ems_solcjs:
|
|
# Unlike other t_ems jobs this one actually runs 2x faster on medium (compared to small).
|
|
<<: *base_ubuntu2204
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- run:
|
|
name: Install test dependencies
|
|
command: |
|
|
apt-get update
|
|
apt-get install -qqy --no-install-recommends nodejs npm
|
|
- run:
|
|
name: Test solcjs
|
|
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)
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
t_ems_ext_hardhat:
|
|
<<: *base_node_small
|
|
docker:
|
|
- image: cimg/node:18.16
|
|
environment:
|
|
<<: *base_node_small_env
|
|
HARDHAT_TESTS_SOLC_PATH: /tmp/workspace/soljson.js
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- run: git clone --depth 1 https://github.com/nomiclabs/hardhat.git
|
|
- run:
|
|
name: Install dependencies
|
|
command: |
|
|
cd hardhat
|
|
yarn
|
|
- run:
|
|
name: Run hardhat-core test suite
|
|
command: |
|
|
HARDHAT_TESTS_SOLC_VERSION=$(scripts/get_version.sh)
|
|
export HARDHAT_TESTS_SOLC_VERSION
|
|
|
|
# NOTE: This is expected to work without running `yarn build` first.
|
|
cd hardhat/packages/hardhat-core
|
|
yarn test
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
t_ext:
|
|
parameters:
|
|
project:
|
|
type: string
|
|
binary_type:
|
|
type: enum
|
|
enum:
|
|
- solcjs
|
|
- native
|
|
compile_only:
|
|
type: integer
|
|
default: 0
|
|
image:
|
|
type: string
|
|
default: cimg/node:current
|
|
resource_class:
|
|
type: string
|
|
default: small
|
|
python2:
|
|
type: boolean
|
|
default: false
|
|
docker:
|
|
- image: << parameters.image >>
|
|
resource_class: << parameters.resource_class >>
|
|
# NOTE: Each external test runs up to 6 independent settings presets. If parallelism is higher than
|
|
# actual preset count, some runs will exit immediately. If it's lower, some runs will get more than one preset.
|
|
parallelism: 6
|
|
environment:
|
|
TERM: xterm
|
|
COMPILE_ONLY: << parameters.compile_only >>
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- install_foundry
|
|
- install_python3:
|
|
packages: requests
|
|
- run:
|
|
name: Install lsof
|
|
command: |
|
|
# lsof is used by Colony in its stop-blockchain-client.sh script
|
|
sudo apt update
|
|
sudo apt-get --quiet --assume-yes --no-install-recommends install lsof
|
|
- when:
|
|
condition: << parameters.python2 >>
|
|
steps:
|
|
- run:
|
|
name: Install Python 2 and make it the default
|
|
command: |
|
|
# python is used by node-gyp to build native modules (needed for Colony).
|
|
# In the 14.x image node-gyp still requires Python 2.
|
|
sudo apt install python2 --assume-yes --no-install-recommends
|
|
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
|
|
- when:
|
|
condition:
|
|
equal: [<< parameters.binary_type >>, "solcjs"]
|
|
steps:
|
|
- run:
|
|
name: External << parameters.project >> tests (<< parameters.binary_type >>)
|
|
command: |
|
|
test/external_tests.py test --solc-binary-type "<< parameters.binary_type >>" --solc-binary-path /tmp/workspace/soljson.js --run "<< parameters.project >>"
|
|
- when:
|
|
condition:
|
|
equal: [<< parameters.binary_type >>, "native"]
|
|
steps:
|
|
- run:
|
|
name: External << parameters.project >> tests (<< parameters.binary_type >>)
|
|
command: |
|
|
test/external_tests.py test --solc-binary-type "<< parameters.binary_type >>" --solc-binary-path /tmp/workspace/solc/solc-static-linux --run "<< parameters.project >>"
|
|
- store_artifacts:
|
|
path: reports/externalTests/
|
|
# persist_to_workspace fails if the directory does not exist and the test script will create
|
|
# it only if it actually has benchmark results.
|
|
- run: mkdir -p reports/externalTests/
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- reports/externalTests/
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
c_ext_benchmarks:
|
|
<<: *base_node_small
|
|
steps:
|
|
- install_python3:
|
|
packages: requests
|
|
- checkout
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Combine benchmark reports
|
|
command: cat reports/externalTests/benchmark-*.json | scripts/externalTests/merge_benchmarks.sh > reports/externalTests/all-benchmarks.json
|
|
- run:
|
|
name: Summarize reports
|
|
command: cat reports/externalTests/all-benchmarks.json | scripts/externalTests/summarize_benchmarks.sh > reports/externalTests/summarized-benchmarks.json
|
|
- run:
|
|
name: Download reports from base branch
|
|
command: |
|
|
if [[ $CIRCLE_PULL_REQUEST != "" ]]; then
|
|
mkdir reports/externalTests/base-branch/
|
|
cd reports/externalTests/base-branch/
|
|
|
|
pr_id=$(echo "$CIRCLE_PULL_REQUEST" | sed 's|\(.*\)\/||')
|
|
scripts_dir=../../../scripts
|
|
|
|
# Our main goal here is to provide new benchmarks, the diff is optional. When benchmarks from
|
|
# the previous run are not available for whatever reason, we still succeed and just skip the diff.
|
|
# download_benchmarks.py exits with status 2 in that case.
|
|
if "${scripts_dir}/externalTests/download_benchmarks.py" --base-of-pr "$pr_id" || [[ $? == 2 ]]; then
|
|
echo 'export SKIP_BENCHMARK_DIFF=true' >> $BASH_ENV
|
|
fi
|
|
fi
|
|
- run:
|
|
name: Diff benchmarks
|
|
command: |
|
|
if [[ $CIRCLE_PULL_REQUEST != "" && $SKIP_BENCHMARK_DIFF != "true" ]]; then
|
|
cd reports/externalTests/
|
|
mkdir diff/
|
|
scripts_dir=../../scripts
|
|
|
|
"${scripts_dir}/externalTests/benchmark_diff.py" table \
|
|
--output-format markdown \
|
|
--style humanized \
|
|
base-branch/summarized-benchmarks-*.json \
|
|
summarized-benchmarks.json > diff/benchmark-diff-summarized-table-markdown-humanized.md
|
|
"${scripts_dir}/externalTests/benchmark_diff.py" table \
|
|
--output-format markdown \
|
|
--style absolute \
|
|
base-branch/summarized-benchmarks-*.json \
|
|
summarized-benchmarks.json > diff/benchmark-diff-summarized-table-markdown-absolute.md
|
|
"${scripts_dir}/externalTests/benchmark_diff.py" inplace \
|
|
--style absolute \
|
|
base-branch/summarized-benchmarks-*.json \
|
|
summarized-benchmarks.json > diff/benchmark-diff-summarized-inplace-absolute.md
|
|
"${scripts_dir}/externalTests/benchmark_diff.py" inplace \
|
|
--style absolute \
|
|
base-branch/all-benchmarks-*.json \
|
|
all-benchmarks.json > diff/benchmark-diff-all-table-inplace-absolute.md
|
|
fi
|
|
- store_artifacts:
|
|
path: reports/externalTests/all-benchmarks.json
|
|
- store_artifacts:
|
|
path: reports/externalTests/summarized-benchmarks.json
|
|
- store_artifacts:
|
|
path: reports/externalTests/diff/
|
|
- store_artifacts:
|
|
path: reports/externalTests/base-branch/
|
|
|
|
b_win: &b_win
|
|
<<: *base_win_large
|
|
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-{{ arch }}-{{ checksum "scripts/install_deps.ps1" }}
|
|
# DO NOT EDIT between here and save_cache, but rather edit .\scripts\install_deps.ps1
|
|
# WARNING! If you do edit anything here instead, remember to invalidate the cache manually.
|
|
- run:
|
|
name: "Installing dependencies"
|
|
command: .\scripts\install_deps.ps1
|
|
shell: powershell.exe
|
|
- save_cache:
|
|
key: dependencies-win-{{ arch }}-{{ checksum "scripts/install_deps.ps1" }}
|
|
paths:
|
|
- .\deps
|
|
- run:
|
|
name: "Building solidity"
|
|
command: .circleci/build_win.ps1
|
|
shell: powershell.exe
|
|
- run:
|
|
name: "Run solc.exe to make sure build was successful."
|
|
command: .\build\solc\Release\solc.exe --version
|
|
shell: powershell.exe
|
|
- store_artifacts: *artifact_solc_windows
|
|
- persist_to_workspace:
|
|
root: build
|
|
paths:
|
|
- .\solc\*\solc.exe
|
|
- .\test\*\soltest.exe
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
t_win_soltest: &t_win_soltest
|
|
<<: *base_win
|
|
steps:
|
|
# NOTE: Git's default core.autocrlf is fine for running soltest. We get additional coverage
|
|
# for files using CRLF that way.
|
|
- checkout
|
|
- attach_workspace:
|
|
at: build
|
|
- run:
|
|
name: "Install evmone"
|
|
command: scripts/install_evmone.ps1
|
|
shell: powershell.exe
|
|
- run:
|
|
name: "Run soltest"
|
|
command: .circleci/soltest.ps1
|
|
shell: powershell.exe
|
|
- run:
|
|
name: Install LSP test dependencies
|
|
command: python -m pip install --user deepdiff colorama
|
|
- run:
|
|
name: Executing solc LSP test suite
|
|
command: python ./test/lsp.py .\build\solc\Release\solc.exe --non-interactive
|
|
shell: powershell.exe
|
|
- store_test_results: *store_test_results
|
|
- store_artifacts: *artifacts_test_results
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
# Note: b_bytecode_ubu_static is required because b_ubu_static and b_ubu
|
|
# are currently built on different Ubuntu base images.
|
|
# It can be safely removed once we move both to the same Ubuntu version.
|
|
b_bytecode_ubu_static:
|
|
parameters:
|
|
preset:
|
|
type: string
|
|
<<: *base_ubuntu2004_small
|
|
parallelism: 2 # For prepare_bytecode_report
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: build
|
|
- prepare_bytecode_report:
|
|
label: "ubuntu2004-static"
|
|
binary_type: native
|
|
binary_path: "build/solc/solc-static-linux"
|
|
preset: "<< parameters.preset >>"
|
|
|
|
b_bytecode_ubu:
|
|
parameters:
|
|
preset:
|
|
type: string
|
|
<<: *base_ubuntu2204_small
|
|
parallelism: 2 # For prepare_bytecode_report
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: build
|
|
- prepare_bytecode_report:
|
|
label: "ubuntu"
|
|
binary_type: native
|
|
binary_path: "build/solc/solc"
|
|
preset: "<< parameters.preset >>"
|
|
|
|
b_bytecode_osx:
|
|
parameters:
|
|
preset:
|
|
type: string
|
|
<<: *base_osx
|
|
parallelism: 2 # For prepare_bytecode_report
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: .
|
|
- prepare_bytecode_report:
|
|
label: "osx"
|
|
binary_type: native
|
|
binary_path: "build/solc/solc"
|
|
preset: "<< parameters.preset >>"
|
|
|
|
b_bytecode_win:
|
|
parameters:
|
|
preset:
|
|
type: string
|
|
<<: *base_win
|
|
parallelism: 2 # For prepare_bytecode_report
|
|
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
|
|
# Ensure windows has python3 alias required by prepare_bytecode_report
|
|
- run: ln -s /c/tools/miniconda3/python /c/tools/miniconda3/python3
|
|
- attach_workspace:
|
|
at: build
|
|
- prepare_bytecode_report:
|
|
label: "windows"
|
|
binary_type: native
|
|
binary_path: "build/solc/Release/solc.exe"
|
|
preset: "<< parameters.preset >>"
|
|
|
|
b_bytecode_ems:
|
|
parameters:
|
|
preset:
|
|
type: string
|
|
<<: *base_node_small
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: emscripten_build/libsolc
|
|
- prepare_bytecode_report:
|
|
label: "emscripten"
|
|
binary_type: solcjs
|
|
binary_path: "emscripten_build/libsolc/soljson.js"
|
|
preset: "<< parameters.preset >>"
|
|
|
|
t_bytecode_compare:
|
|
<<: *base_ubuntu2204_small
|
|
environment:
|
|
<<: *base_ubuntu2204_small_env
|
|
<<: *bytecode_compare_env_presets
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: .
|
|
- run: .circleci/compare_bytecode_reports.sh $PRESETS
|
|
- 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: bytecode-reports-*.zip
|
|
- matrix_notify_failure_unless_pr
|
|
|
|
c_release_binaries:
|
|
<<: *base_ubuntu2204
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: workspace
|
|
- run:
|
|
name: Gather and rename binaries from dependent jobs
|
|
command: |
|
|
mkdir github/
|
|
cp workspace/solc/solc-static-linux github/solc-static-linux
|
|
cp workspace/build/solc/solc github/solc-macos
|
|
cp workspace/solc/Release/solc.exe github/solc-windows.exe
|
|
cp workspace/soljson.js github/soljson.js
|
|
|
|
cd github/
|
|
tar --create --file ../github-binaries.tar *
|
|
- store_artifacts:
|
|
path: github-binaries.tar
|
|
- run:
|
|
name: Rename binaries to solc-bin naming convention
|
|
command: |
|
|
full_version=$(
|
|
github/solc-static-linux --version |
|
|
sed -En 's/^Version: ([0-9.]+.*\+commit\.[0-9a-f]+(\.mod)?).*$/\1/p'
|
|
)
|
|
|
|
mkdir -p solc-bin/{linux-amd64,macosx-amd64,windows-amd64,bin}
|
|
|
|
mv github/solc-static-linux "solc-bin/linux-amd64/solc-linux-amd64-v${full_version}"
|
|
mv github/solc-macos "solc-bin/macosx-amd64/solc-macosx-amd64-v${full_version}"
|
|
mv github/solc-windows.exe "solc-bin/windows-amd64/solc-windows-amd64-v${full_version}.exe"
|
|
mv github/soljson.js "solc-bin/bin/soljson-v${full_version}.js"
|
|
|
|
cd solc-bin/
|
|
tar --create --file ../solc-bin-binaries.tar *
|
|
- store_artifacts:
|
|
path: solc-bin-binaries.tar
|
|
- matrix_notify_failure_unless_pr
|
|
- matrix_notify_release_unless_pr
|
|
|
|
workflows:
|
|
version: 2
|
|
|
|
main:
|
|
jobs:
|
|
# basic checks
|
|
- chk_spelling: *requires_nothing
|
|
- chk_coding_style: *requires_nothing
|
|
# DISABLED FOR 0.6.0 - chk_docs_examples: *requires_nothing
|
|
- chk_buglist: *requires_nothing
|
|
- chk_proofs: *requires_nothing
|
|
- chk_pylint: *requires_nothing
|
|
- chk_errorcodes: *requires_nothing
|
|
- chk_antlr_grammar: *requires_nothing
|
|
- chk_docs_pragma_min_version: *requires_nothing
|
|
- t_ubu_pyscripts: *requires_nothing
|
|
- t_win_pyscripts: *requires_nothing
|
|
|
|
# build-only
|
|
- b_docs: *requires_nothing
|
|
# DISABLED FOR 0.8.18 - b_ubu_cxx20: *requires_nothing
|
|
# Issue: https://github.com/ethereum/solidity/issues/13868
|
|
- b_ubu_ossfuzz: *requires_nothing
|
|
|
|
# OS/X build and tests
|
|
- b_osx: *requires_nothing
|
|
- t_osx_cli: *requires_b_osx
|
|
- t_osx_soltest: *requires_b_osx
|
|
|
|
# ArchLinux build and tests
|
|
- b_archlinux: *requires_nothing
|
|
- t_archlinux_soltest: *requires_b_archlinux
|
|
|
|
# Static build
|
|
- b_ubu_static: *requires_nothing
|
|
|
|
# Ubuntu build and tests
|
|
- b_ubu: *requires_nothing
|
|
- t_ubu_cli: *requires_b_ubu
|
|
- t_ubu_locale: *requires_b_ubu
|
|
- t_ubu_soltest_all: *requires_b_ubu
|
|
- b_ubu_clang: *requires_nothing
|
|
- t_ubu_clang_soltest: *requires_b_ubu_clang
|
|
- t_ubu_lsp: *requires_b_ubu
|
|
|
|
# Ubuntu fake release build and tests
|
|
- b_ubu_force_release: *requires_nothing
|
|
- t_ubu_force_release_cli: *requires_b_ubu_force_release
|
|
- t_ubu_force_release_soltest_all: *requires_b_ubu_force_release
|
|
|
|
# Emscripten build and tests that take 15 minutes or less
|
|
- b_ems: *requires_nothing
|
|
- t_ems_solcjs: *requires_b_ems
|
|
- t_ems_ext_hardhat: *requires_b_ems
|
|
|
|
- t_ext: *job_ems_compile_ext_colony
|
|
|
|
- t_ext: *job_native_test_ext_gnosis
|
|
- t_ext: *job_native_test_ext_zeppelin
|
|
- t_ext: *job_native_test_ext_ens
|
|
- t_ext: *job_native_test_ext_yield_liquidator
|
|
- t_ext: *job_native_test_ext_perpetual_pools
|
|
- t_ext: *job_native_test_ext_uniswap
|
|
- t_ext: *job_native_test_ext_prb_math
|
|
- t_ext: *job_native_test_ext_elementfi
|
|
- t_ext: *job_native_test_ext_brink
|
|
# NOTE: We are disabling gp2 tests due to constant failures.
|
|
# - t_ext: *job_native_test_ext_gp2
|
|
# NOTE: The external tests below were commented because they
|
|
# depend on a specific version of hardhat which does not support shanghai EVM.
|
|
#- t_ext: *job_native_test_ext_trident
|
|
#- t_ext: *job_native_test_ext_euler
|
|
#- t_ext: *job_native_test_ext_bleeps
|
|
#- t_ext: *job_native_test_ext_pool_together
|
|
#- t_ext: *job_native_test_ext_chainlink
|
|
|
|
- c_ext_benchmarks:
|
|
<<: *requires_nothing
|
|
requires:
|
|
- t_ems_compile_ext_colony
|
|
- t_native_test_ext_gnosis
|
|
- t_native_test_ext_zeppelin
|
|
- t_native_test_ext_ens
|
|
- t_native_test_ext_yield_liquidator
|
|
- t_native_test_ext_perpetual_pools
|
|
- t_native_test_ext_uniswap
|
|
- t_native_test_ext_prb_math
|
|
- t_native_test_ext_elementfi
|
|
- t_native_test_ext_brink
|
|
# NOTE: We are disabling gp2 tests due to constant failures.
|
|
#- t_native_test_ext_gp2
|
|
# NOTE: The external tests below were commented because they
|
|
# depend on a specific version of hardhat which does not support shanghai EVM.
|
|
#- t_native_test_ext_trident
|
|
#- t_native_test_ext_euler
|
|
#- t_native_test_ext_bleeps
|
|
#- t_native_test_ext_pool_together
|
|
#- t_native_test_ext_chainlink
|
|
|
|
# Windows build and tests
|
|
- b_win: *requires_nothing
|
|
- t_win_soltest: *requires_b_win
|
|
|
|
# Bytecode comparison:
|
|
- b_bytecode_ubu_static:
|
|
<<: *on_all_tags_and_branches
|
|
matrix: *bytecode_compare_preset_matrix
|
|
requires:
|
|
- b_ubu_static
|
|
- b_bytecode_ubu:
|
|
<<: *on_all_tags_and_branches
|
|
matrix: *bytecode_compare_preset_matrix
|
|
requires:
|
|
- b_ubu
|
|
- b_bytecode_win:
|
|
<<: *on_all_tags_and_branches
|
|
matrix: *bytecode_compare_preset_matrix
|
|
requires:
|
|
- b_win
|
|
- b_bytecode_osx:
|
|
<<: *on_all_tags_and_branches
|
|
matrix: *bytecode_compare_preset_matrix
|
|
requires:
|
|
- b_osx
|
|
- b_bytecode_ems:
|
|
<<: *on_all_tags_and_branches
|
|
matrix: *bytecode_compare_preset_matrix
|
|
requires:
|
|
- b_ems
|
|
- t_bytecode_compare:
|
|
<<: *on_all_tags_and_branches
|
|
requires:
|
|
- b_bytecode_ubu_static
|
|
- b_bytecode_ubu
|
|
- b_bytecode_win
|
|
- b_bytecode_osx
|
|
- b_bytecode_ems
|
|
|
|
# Final artifacts
|
|
- c_release_binaries:
|
|
<<: *on_version_tags
|
|
requires:
|
|
- b_ubu_static
|
|
- b_osx
|
|
- b_win
|
|
- b_ems
|
|
|
|
nightly:
|
|
|
|
triggers:
|
|
- schedule:
|
|
cron: "0 0 * * *"
|
|
<<: *on_develop
|
|
|
|
jobs:
|
|
# OSSFUZZ builds and (regression) tests
|
|
- b_ubu_ossfuzz: *requires_nothing
|
|
- t_ubu_ossfuzz: *requires_b_ubu_ossfuzz
|
|
|
|
# Code Coverage enabled build and tests
|
|
- b_ubu_codecov: *requires_nothing
|
|
- t_ubu_codecov: *requires_b_ubu_codecov
|
|
|
|
# ASan build and tests
|
|
- b_ubu_asan: *requires_nothing
|
|
- b_ubu_san_clang: *job_b_ubu_asan_clang
|
|
- t_ubu_asan_soltest: *requires_b_ubu_asan
|
|
- t_ubu_asan_clang_soltest: *requires_b_ubu_asan_clang
|
|
- t_ubu_asan_cli: *requires_b_ubu_asan
|
|
|
|
# UBSan build and tests
|
|
- b_ubu_san_clang: *job_b_ubu_ubsan_clang
|
|
- t_ubu_ubsan_clang_soltest: *requires_b_ubu_ubsan_clang
|
|
- t_ubu_ubsan_clang_cli: *requires_b_ubu_ubsan_clang
|