diff --git a/.circleci/config.yml b/.circleci/config.yml index 56a4af30a..cafe68b78 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1381,6 +1381,13 @@ workflows: binary_type: native # NOTE: Tests crash on nodejs 17: "Error: error:0308010C:digital envelope routines::unsupported" nodejs_version: '16' + - t_ems_ext: + <<: *workflow_ubuntu2004_static + name: t_native_test_ext_euler + project: euler + binary_type: native + # NOTE: Tests crash on nodejs 17: "Error: error:0308010C:digital envelope routines::unsupported" + nodejs_version: '16' # Windows build and tests - b_win: *workflow_trigger_on_tags diff --git a/test/externalTests.sh b/test/externalTests.sh index 846cdf515..67a5e24ad 100755 --- a/test/externalTests.sh +++ b/test/externalTests.sh @@ -43,3 +43,4 @@ printTask "Running external tests..." "$REPO_ROOT/externalTests/colony.sh" "$@" "$REPO_ROOT/externalTests/ens.sh" "$@" "$REPO_ROOT/externalTests/trident.sh" "$@" +"$REPO_ROOT/externalTests/euler.sh" "$@" diff --git a/test/externalTests/common.sh b/test/externalTests/common.sh index 91068d07d..37bd8d74d 100644 --- a/test/externalTests/common.sh +++ b/test/externalTests/common.sh @@ -227,6 +227,26 @@ function force_hardhat_compiler_binary hardhat_solc_build_subtask "$SOLCVERSION_SHORT" "$SOLCVERSION" "$binary_type" "$solc_path" "$language" >> "$config_file" } +function force_hardhat_unlimited_contract_size +{ + local config_file="$1" + local config_var_name="$2" + + printLog "Configuring Hardhat..." + echo "-------------------------------------" + echo "Allow unlimited contract size: true" + echo "-------------------------------------" + + if [[ $config_file == *\.js ]]; then + [[ $config_var_name == "" ]] || assertFail + echo "module.exports.networks.hardhat.allowUnlimitedContractSize = true" >> "$config_file" + else + [[ $config_file == *\.ts ]] || assertFail + [[ $config_var_name != "" ]] || assertFail + echo "${config_var_name}.networks!.hardhat!.allowUnlimitedContractSize = true" >> "$config_file" + fi +} + function force_hardhat_compiler_settings { local config_file="$1" diff --git a/test/externalTests/ens.sh b/test/externalTests/ens.sh index 2a539f8fc..d3fcb0b13 100755 --- a/test/externalTests/ens.sh +++ b/test/externalTests/ens.sh @@ -56,7 +56,6 @@ function ens_test setup_solc "$DIR" "$BINARY_TYPE" "$BINARY_PATH" download_project "$repo" "$ref_type" "$ref" "$DIR" - [[ $BINARY_TYPE == native ]] && replace_global_solc "$BINARY_PATH" neutralize_package_lock neutralize_package_json_hooks diff --git a/test/externalTests/euler.sh b/test/externalTests/euler.sh new file mode 100755 index 000000000..485d7ae56 --- /dev/null +++ b/test/externalTests/euler.sh @@ -0,0 +1,74 @@ +#!/usr/bin/env bash + +# ------------------------------------------------------------------------------ +# This file is part of solidity. +# +# solidity is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# solidity is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with solidity. If not, see +# +# (c) 2022 solidity contributors. +#------------------------------------------------------------------------------ + +set -e + +source scripts/common.sh +source test/externalTests/common.sh + +verify_input "$@" +BINARY_TYPE="$1" +BINARY_PATH="$2" +SELECTED_PRESETS="$3" + +function compile_fn { npm run compile; } +function test_fn { npx --no hardhat --no-compile test; } + +function euler_test +{ + local repo="https://github.com/euler-xyz/euler-contracts" + local ref_type=branch + local ref="master" + local config_file="hardhat.config.js" + + local compile_only_presets=() + local settings_presets=( + "${compile_only_presets[@]}" + #ir-no-optimize # Compilation fails with "YulException: Variable var_utilisation_307 is 6 slot(s) too deep inside the stack." + #ir-optimize-evm-only # Compilation fails with "YulException: Variable var_utilisation_307 is 6 slot(s) too deep inside the stack." + #ir-optimize-evm+yul # Compilation fails with "YulException: Variable var_status_mpos is 3 too deep in the stack" + legacy-optimize-evm-only + legacy-optimize-evm+yul + legacy-no-optimize + ) + + [[ $SELECTED_PRESETS != "" ]] || SELECTED_PRESETS=$(circleci_select_steps_multiarg "${settings_presets[@]}") + print_presets_or_exit "$SELECTED_PRESETS" + + setup_solc "$DIR" "$BINARY_TYPE" "$BINARY_PATH" + download_project "$repo" "$ref_type" "$ref" "$DIR" + + neutralize_package_lock + neutralize_package_json_hooks + force_hardhat_compiler_binary "$config_file" "$BINARY_TYPE" "$BINARY_PATH" + force_hardhat_compiler_settings "$config_file" "$(first_word "$SELECTED_PRESETS")" + force_hardhat_unlimited_contract_size "$config_file" + npm install + + replace_version_pragmas + neutralize_packaged_contracts + + for preset in $SELECTED_PRESETS; do + hardhat_run_test "$config_file" "$preset" "${compile_only_presets[*]}" compile_fn test_fn + done +} + +external_test Euler euler_test