mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	CI: Merge prepare_bytecode_report and storebytecode.sh script into a new script and use it for all platforms in CI
This commit is contained in:
		
							parent
							
								
									69ffcfc242
								
							
						
					
					
						commit
						45c2ffcd55
					
				| @ -76,34 +76,31 @@ commands: | ||||
|     parameters: | ||||
|       label: | ||||
|         type: string | ||||
|       binary_type: | ||||
|         type: enum | ||||
|         enum: | ||||
|           - solcjs | ||||
|           - native | ||||
|       binary_path: | ||||
|         type: string | ||||
|     steps: | ||||
|       - run: mkdir test-cases/ | ||||
|       - run: | ||||
|           name: Prepare input files | ||||
|           name: Generate bytecode reports for the selected preset | ||||
|           command: | | ||||
|             cd test-cases/ | ||||
|             python3 ../scripts/isolate_tests.py ../test/ | ||||
|       - run: | ||||
|           name: Generate bytecode report | ||||
|           command: | | ||||
|             cd test-cases/ | ||||
|             interface=$(echo -e "standard-json\ncli" | circleci tests split) | ||||
|             echo "Selected interface: ${interface}" | ||||
| 
 | ||||
|             python3 ../scripts/bytecodecompare/prepare_report.py \ | ||||
|               << parameters.binary_path >> \ | ||||
|               --interface "$interface" \ | ||||
|               --report-file "../bytecode-report-<< parameters.label >>-${interface}.txt" | ||||
|             .circleci/parallel_bytecode_report.sh \ | ||||
|                 "<< parameters.label >>" \ | ||||
|                 "<< parameters.binary_type >>" \ | ||||
|                 "${PWD}/<< parameters.binary_path >>" | ||||
|       - store_artifacts: | ||||
|           path: bytecode-report-<< parameters.label >>-standard-json.txt | ||||
|       - store_artifacts: | ||||
|           path: bytecode-report-<< parameters.label >>-cli.txt | ||||
|       - store_artifacts: | ||||
|           path: bytecode-report-<< parameters.label >>.txt | ||||
|       - persist_to_workspace: | ||||
|           root: . | ||||
|           paths: | ||||
|             - bytecode-report-<< parameters.label >>-*.txt | ||||
|             - bytecode-report-<< parameters.label >>*.txt | ||||
|       - matrix_notify_failure_unless_pr | ||||
| 
 | ||||
|   install_python3: | ||||
| @ -1485,10 +1482,6 @@ jobs: | ||||
|   # It can be safely removed once we move both to the same Ubuntu version. | ||||
|   b_bytecode_ubu_static: | ||||
|     <<: *base_ubuntu2004_small | ||||
|     environment: | ||||
|       TERM: xterm | ||||
|       MAKEFLAGS: -j 2 | ||||
|       LC_ALL: C | ||||
|     parallelism: 2 # For prepare_bytecode_report | ||||
|     steps: | ||||
|       - checkout | ||||
| @ -1496,14 +1489,11 @@ jobs: | ||||
|           at: build | ||||
|       - prepare_bytecode_report: | ||||
|           label: "ubuntu2004-static" | ||||
|           binary_path: "../build/solc/solc-static-linux" | ||||
|           binary_type: native | ||||
|           binary_path: "build/solc/solc-static-linux" | ||||
| 
 | ||||
|   b_bytecode_ubu: | ||||
|     <<: *base_ubuntu2204_small | ||||
|     environment: | ||||
|       TERM: xterm | ||||
|       MAKEFLAGS: -j 2 | ||||
|       LC_ALL: C | ||||
|     parallelism: 2 # For prepare_bytecode_report | ||||
|     steps: | ||||
|       - checkout | ||||
| @ -1511,14 +1501,11 @@ jobs: | ||||
|           at: build | ||||
|       - prepare_bytecode_report: | ||||
|           label: "ubuntu" | ||||
|           binary_path: "../build/solc/solc" | ||||
|           binary_type: native | ||||
|           binary_path: "build/solc/solc" | ||||
| 
 | ||||
|   b_bytecode_osx: | ||||
|     <<: *base_osx | ||||
|     environment: | ||||
|       TERM: xterm | ||||
|       MAKEFLAGS: -j 5 | ||||
|       LC_ALL: C | ||||
|     parallelism: 2 # For prepare_bytecode_report | ||||
|     steps: | ||||
|       - checkout | ||||
| @ -1526,12 +1513,11 @@ jobs: | ||||
|           at: . | ||||
|       - prepare_bytecode_report: | ||||
|           label: "osx" | ||||
|           binary_path: "../build/solc/solc" | ||||
|           binary_type: native | ||||
|           binary_path: "build/solc/solc" | ||||
| 
 | ||||
|   b_bytecode_win: | ||||
|     <<: *base_win | ||||
|     environment: | ||||
|       LC_ALL: C | ||||
|     parallelism: 2 # For prepare_bytecode_report | ||||
|     steps: | ||||
|       # NOTE: For bytecode generation we need the input files to be byte-for-byte identical on all | ||||
| @ -1544,25 +1530,19 @@ jobs: | ||||
|           at: build | ||||
|       - prepare_bytecode_report: | ||||
|           label: "windows" | ||||
|           binary_path: "../build/solc/Release/solc.exe" | ||||
|           binary_type: native | ||||
|           binary_path: "build/solc/Release/solc.exe" | ||||
| 
 | ||||
|   b_bytecode_ems: | ||||
|     <<: *base_node_small | ||||
|     environment: | ||||
|       SOLC_EMSCRIPTEN: "On" | ||||
|       LC_ALL: C | ||||
|     steps: | ||||
|       - checkout | ||||
|       - attach_workspace: | ||||
|           at: emscripten_build/libsolc | ||||
|       - run: scripts/bytecodecompare/storebytecode.sh && mv -v report.txt bytecode-report-emscripten.txt | ||||
|       - store_artifacts: | ||||
|           path: bytecode-report-emscripten.txt | ||||
|       - persist_to_workspace: | ||||
|           root: . | ||||
|           paths: | ||||
|             - bytecode-report-emscripten.txt | ||||
|       - matrix_notify_failure_unless_pr | ||||
|       - prepare_bytecode_report: | ||||
|           label: "emscripten" | ||||
|           binary_type: solcjs | ||||
|           binary_path: "emscripten_build/libsolc/soljson.js" | ||||
| 
 | ||||
|   t_bytecode_compare: | ||||
|     <<: *base_ubuntu2204_small | ||||
|  | ||||
							
								
								
									
										73
									
								
								.circleci/parallel_bytecode_report.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										73
									
								
								.circleci/parallel_bytecode_report.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,73 @@ | ||||
| #!/usr/bin/env bash | ||||
| set -euo pipefail | ||||
| 
 | ||||
| #------------------------------------------------------------------------------ | ||||
| # Splits all test source code into multiple files, generates bytecode and metadata | ||||
| # for each file and combines it into a single report.txt file. | ||||
| # | ||||
| # The script is meant to be executed in CI on all supported platforms. All generated | ||||
| # reports must be identical for a given compiler version. | ||||
| # | ||||
| # ------------------------------------------------------------------------------ | ||||
| # 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 <http://www.gnu.org/licenses/> | ||||
| # | ||||
| # (c) 2023 solidity contributors. | ||||
| #------------------------------------------------------------------------------ | ||||
| 
 | ||||
| (( $# == 3 )) || { >&2 echo "Wrong number of arguments."; exit 1; } | ||||
| label="$1" | ||||
| binary_type="$2" | ||||
| binary_path="$3" # This path must be absolute | ||||
| 
 | ||||
| [[ $binary_type == native || $binary_type == solcjs ]] || { >&2 echo "Invalid binary type: ${binary_type}"; exit 1; } | ||||
| 
 | ||||
| # NOTE: Locale affects the order of the globbed files. | ||||
| export LC_ALL=C | ||||
| 
 | ||||
| mkdir test-cases/ | ||||
| cd test-cases/ | ||||
| 
 | ||||
| echo "Preparing input files" | ||||
| python3 ../scripts/isolate_tests.py ../test/ | ||||
| 
 | ||||
| if [[ $binary_type == native ]]; then | ||||
|     interface=$(echo -e "standard-json\ncli" | circleci tests split) | ||||
|     echo "Selected interface: ${interface}" | ||||
| 
 | ||||
|     echo "Generating bytecode reports" | ||||
|     python3 ../scripts/bytecodecompare/prepare_report.py \ | ||||
|         "$binary_path" \ | ||||
|         --interface "$interface" \ | ||||
|         --report-file "../bytecode-report-${label}-${interface}.txt" | ||||
| else | ||||
|     echo "Installing solc-js" | ||||
|     git clone --depth 1 https://github.com/ethereum/solc-js.git solc-js | ||||
|     cp "$binary_path" solc-js/soljson.js | ||||
| 
 | ||||
|     cd solc-js/ | ||||
|     npm install | ||||
|     npm run build | ||||
| 
 | ||||
|     cd .. | ||||
|     npm install ./solc-js/dist | ||||
| 
 | ||||
|     cp ../scripts/bytecodecompare/prepare_report.js . | ||||
| 
 | ||||
|     echo "Generating bytecode reports" | ||||
|     # shellcheck disable=SC2035 | ||||
|     ./prepare_report.js \ | ||||
|         *.sol > "../bytecode-report-${label}.txt" | ||||
| fi | ||||
| @ -1,73 +0,0 @@ | ||||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| #------------------------------------------------------------------------------ | ||||
| # Script used for cross-platform comparison of the bytecode generated by the compiler. | ||||
| # Splits all test source code into multiple files, generates bytecode and metadata | ||||
| # for each file and combines it into a single report.txt file. | ||||
| # | ||||
| # The script is meant to be executed in CI on all supported platforms. All generated | ||||
| # reports must be identical for a given compiler version. | ||||
| # | ||||
| # ------------------------------------------------------------------------------ | ||||
| # 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 <http://www.gnu.org/licenses/> | ||||
| # | ||||
| # (c) 2017 solidity contributors. | ||||
| #------------------------------------------------------------------------------ | ||||
| 
 | ||||
| set -e | ||||
| 
 | ||||
| REPO_ROOT="$(dirname "$0")"/../.. | ||||
| cd "$REPO_ROOT" | ||||
| REPO_ROOT=$(pwd) # make it absolute | ||||
| 
 | ||||
| BUILD_DIR="${1:-${REPO_ROOT}/build}" | ||||
| 
 | ||||
| # Set locale to C to prevent it from affecting glob sort order. | ||||
| export LC_ALL=C | ||||
| 
 | ||||
| echo "Compiling all test contracts into bytecode..." | ||||
| TMPDIR=$(mktemp -d) | ||||
| ( | ||||
|     cd "$TMPDIR" | ||||
| 
 | ||||
|     "$REPO_ROOT"/scripts/isolate_tests.py "$REPO_ROOT"/test/ | ||||
| 
 | ||||
|     if [[ "$SOLC_EMSCRIPTEN" = "On" ]] | ||||
|     then | ||||
|         echo "Installing solc-js..." | ||||
|         # npm install solc | ||||
|         git clone --depth 1 https://github.com/ethereum/solc-js.git solc-js | ||||
|         cp "$REPO_ROOT/emscripten_build/libsolc/soljson.js" solc-js/ | ||||
|         pushd solc-js/ | ||||
|         npm install | ||||
|         npm run build | ||||
|         popd | ||||
| 
 | ||||
|         cp "$REPO_ROOT/scripts/bytecodecompare/prepare_report.js" . | ||||
|         npm install ./solc-js/dist | ||||
| 
 | ||||
|         echo "Running the compiler..." | ||||
|         # shellcheck disable=SC2035 | ||||
|         ./prepare_report.js *.sol > report.txt | ||||
|         echo "Finished running the compiler." | ||||
|     else | ||||
|         "$REPO_ROOT/scripts/bytecodecompare/prepare_report.py" "$BUILD_DIR/solc/solc" | ||||
|     fi | ||||
| 
 | ||||
|     cp report.txt "$REPO_ROOT" | ||||
| ) | ||||
| rm -rf "$TMPDIR" | ||||
| echo "Storebytecode finished." | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user