solidity/.circleci/config.yml
Kamil Śliwak 8b64195d4b CI: Make jobs extend base environments instead of redefining them
- 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.
2023-06-27 14:00:28 +02:00

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