# 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 no_output_timeout: 30m 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 >> # -------------------------------------------------------------------------- # Build Commands setup_prerelease_commit_hash: steps: - run: name: Store commit hash and prerelease command: | if [[ $CIRCLE_BRANCH == release || -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: steps: - run: name: Build command: scripts/ci/build.sh run_build_ossfuzz: steps: - run: name: Build_ossfuzz command: scripts/ci/build_ossfuzz.sh run_proofs: steps: - run: name: Correctness proofs for optimization rules command: scripts/run_proofs.sh run_soltest: steps: - run: name: soltest no_output_timeout: 30m command: .circleci/soltest.sh run_soltest_all: steps: - run: name: soltest_all no_output_timeout: 30m command: .circleci/soltest_all.sh run_cmdline_tests: steps: - run: name: command line tests no_output_timeout: 30m command: .circleci/parallel_cli_tests.py run_docs_pragma_min_version: steps: - run: name: docs pragma version check command: scripts/docs_version_pragma_check.sh # -------------------------------------------------------------------------- # Artifact Commands store_artifacts_solc: description: Store compiled solc executable as artifact steps: - store_artifacts: path: build/solc/solc destination: solc store_artifacts_yul_phaser: steps: - store_artifacts: path: build/tools/yul-phaser destination: yul-phaser persist_executables_to_workspace: description: Persist compiled target executables to workspace steps: - persist_to_workspace: root: build paths: - solc/solc - test/soltest - test/tools/solfuzzer persist_executables_to_workspace_osx: description: Persist compiled target executables to workspace on macOS steps: - persist_to_workspace: root: . paths: - build/solc/solc - build/test/soltest - build/test/tools/solfuzzer persist_ossfuzz_executables_to_workspace: description: Persist compiled OSSFUZZ executables to workspace steps: - persist_to_workspace: 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 store_artifacts_test_results: description: Store test output dir as artifact steps: - store_artifacts: path: test_results/ destination: test_results/ # -------------------------------------------------------------------------- # Complex Build Commands 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_soltest - store_test_results: path: test_results/ - store_artifacts_test_results - matrix_notify_failure_unless_pr 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 build: steps: - checkout - run_build - store_artifacts_solc - store_artifacts_yul_phaser - persist_executables_to_workspace - matrix_notify_failure_unless_pr soltest_all: steps: - checkout - attach_workspace: at: build - run_soltest_all - store_test_results: path: test_results/ - store_artifacts_test_results - matrix_notify_failure_unless_pr cmdline_tests: steps: - checkout - attach_workspace: at: build - run_cmdline_tests - store_test_results: path: test_results/ - store_artifacts_test_results - matrix_notify_failure_unless_pr 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 defaults: # -------------------------------------------------------------------------- # Matrix templates - bytecode_compare_env_presets: &bytecode_compare_env_presets PRESETS: legacy-optimize legacy-no-optimize via-ir-optimize via-ir-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 - via-ir-optimize - via-ir-no-optimize # -------------------------------------------------------------------------- # -------------------------------------------------------------------------- # Base Image Templates - base_archlinux: &base_archlinux docker: - image: archlinux:base environment: &base_archlinux_env TERM: xterm MAKEFLAGS: -j 3 CPUs: 3 - base_archlinux_large: &base_archlinux_large <<: *base_archlinux resource_class: large environment: &base_archlinux_large_env <<: *base_archlinux_env MAKEFLAGS: -j 5 CPUs: 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 CPUs: 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 CPUs: 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 CPUs: 2 - base_osx: &base_osx macos: xcode: "14.2.0" resource_class: macos.x86.medium.gen2 environment: &base_osx_env TERM: xterm MAKEFLAGS: -j5 CPUs: 5 - base_osx_large: &base_osx_large <<: *base_osx resource_class: large environment: &base_osx_large_env <<: *base_osx_env MAKEFLAGS: -j10 CPUs: 10 - 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 CPUs: 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 CPUs: 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 CPUs: 2 - base_ubuntu2004: &base_ubuntu2004 docker: - image: << pipeline.parameters.ubuntu-2004-docker-image >> environment: &base_ubuntu2004_env TERM: xterm MAKEFLAGS: -j 3 CPUs: 3 - base_ubuntu2004_small: &base_ubuntu2004_small <<: *base_ubuntu2004 resource_class: small environment: &base_ubuntu2004_small_env <<: *base_ubuntu2004_env MAKEFLAGS: -j 2 CPUs: 2 - base_ubuntu2004_xlarge: &base_ubuntu2004_xlarge <<: *base_ubuntu2004 resource_class: xlarge environment: &base_ubuntu2004_xlarge_env <<: *base_ubuntu2004_env MAKEFLAGS: -j 10 CPUs: 10 - base_ubuntu2204: &base_ubuntu2204 docker: - image: << pipeline.parameters.ubuntu-2204-docker-image >> environment: &base_ubuntu2204_env TERM: xterm MAKEFLAGS: -j 3 CPUs: 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 CPUs: 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 CPUs: 5 - base_ubuntu2204_small: &base_ubuntu2204_small <<: *base_ubuntu2204 resource_class: small environment: &base_ubuntu2204_small_env <<: *base_ubuntu2204_env MAKEFLAGS: -j 2 CPUs: 2 - base_ubuntu2204_large: &base_ubuntu2204_large <<: *base_ubuntu2204 resource_class: large environment: &base_ubuntu2204_large_env <<: *base_ubuntu2204_env MAKEFLAGS: -j 5 CPUs: 5 - base_ubuntu2204_xlarge: &base_ubuntu2204_xlarge <<: *base_ubuntu2204 resource_class: xlarge environment: &base_ubuntu2204_xlarge_env <<: *base_ubuntu2204_env MAKEFLAGS: -j 10 CPUs: 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/rust:1.70 - 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_proofs - matrix_notify_failure_unless_pr chk_docs_pragma_min_version: <<: *base_ubuntu2204_small steps: - checkout - 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_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_build - persist_executables_to_workspace - 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_soltest - run: name: "Coverage: All" command: codecov --flags all --gcov-root build - store_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_build - matrix_notify_failure_unless_pr b_ubu_ossfuzz: &b_ubu_ossfuzz <<: *base_ubuntu_clang steps: - checkout - setup_prerelease_commit_hash - run_build_ossfuzz - persist_ossfuzz_executables_to_workspace - 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: path: test_results/ - store_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_build - store_artifacts_solc - persist_executables_to_workspace - matrix_notify_failure_unless_pr b_osx: <<: *base_osx_large environment: <<: *base_osx_large_env CMAKE_BUILD_TYPE: Release steps: - checkout - install_dependencies_osx - run_build - store_artifacts_solc - store_artifacts_yul_phaser - persist_executables_to_workspace_osx - 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 - install_dependencies_osx - attach_workspace: at: . - run_soltest - store_test_results: path: test_results/ - store_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 - install_dependencies_osx - attach_workspace: at: . - run_cmdline_tests - store_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 - 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 - 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: path: upload/ - 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: path: test_results/ - store_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_elementfi - t_native_test_ext_brink # NOTE: We are disabling gp2 tests due to constant failures. #- t_native_test_ext_gp2 # TODO: Dropping prb-math from the benchmarks since it is not implemented yet # in the new Foundry external testing infrastructure. # - t_native_test_ext_prb_math # 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