Merge pull request #10039 from ethereum/bytecodeComparison

Bytecode comparison on CircleCI
This commit is contained in:
chriseth 2020-10-15 14:59:14 +02:00 committed by GitHub
commit 8b8cd9f307
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 113 additions and 43 deletions

View File

@ -2,7 +2,7 @@ $ErrorActionPreference = "Stop"
cd "$PSScriptRoot\.." cd "$PSScriptRoot\.."
if ("$Env:FORCE_RELEASE") { if ("$Env:FORCE_RELEASE" -Or "$Env:CIRCLE_TAG") {
New-Item prerelease.txt -type file New-Item prerelease.txt -type file
Write-Host "Building release version." Write-Host "Building release version."
} }

View File

@ -481,7 +481,7 @@ jobs:
steps: steps:
- checkout - checkout
- run: *run_build - run: *run_build
- persist_to_workspace: *artifacts_build_dir - persist_to_workspace: *artifacts_executables
t_ubu_codecov: t_ubu_codecov:
<<: *test_ubuntu2004 <<: *test_ubuntu2004
@ -592,7 +592,12 @@ jobs:
- run: *run_build - run: *run_build
- store_artifacts: *artifacts_solc - store_artifacts: *artifacts_solc
- store_artifacts: *artifacts_tools - store_artifacts: *artifacts_tools
- persist_to_workspace: *artifacts_build_dir - persist_to_workspace:
root: .
paths:
- build/solc/solc
- build/test/soltest
- build/test/tools/solfuzzer
t_osx_soltest: t_osx_soltest:
macos: macos:
@ -607,7 +612,7 @@ jobs:
keys: keys:
- dependencies-osx-{{ checksum ".circleci/osx_install_dependencies.sh" }} - dependencies-osx-{{ checksum ".circleci/osx_install_dependencies.sh" }}
- attach_workspace: - attach_workspace:
at: build at: .
- run: *run_soltest - run: *run_soltest
- store_test_results: *store_test_results - store_test_results: *store_test_results
- store_artifacts: *artifacts_test_results - store_artifacts: *artifacts_test_results
@ -623,7 +628,7 @@ jobs:
keys: keys:
- dependencies-osx-{{ checksum ".circleci/osx_install_dependencies.sh" }} - dependencies-osx-{{ checksum ".circleci/osx_install_dependencies.sh" }}
- attach_workspace: - attach_workspace:
at: build at: .
- run: *run_cmdline_tests - run: *run_cmdline_tests
- store_artifacts: *artifacts_test_results - store_artifacts: *artifacts_test_results
@ -919,7 +924,11 @@ jobs:
name: "Run solc.exe to make sure build was successful." name: "Run solc.exe to make sure build was successful."
command: .\build\solc\Release\solc.exe --version command: .\build\solc\Release\solc.exe --version
- store_artifacts: *artifact_solc_windows - store_artifacts: *artifact_solc_windows
- persist_to_workspace: *artifacts_build_dir - persist_to_workspace:
root: build
paths:
- .\solc\*\solc.exe
- .\test\*\soltest.exe
b_win_release: b_win_release:
<<: *b_win <<: *b_win
@ -945,6 +954,81 @@ jobs:
t_win_release: t_win_release:
<<: *t_win <<: *t_win
b_bytecode_ubu:
docker:
- image: << pipeline.parameters.ubuntu-2004-docker-image >>
steps:
- checkout
- attach_workspace:
at: build
- run: scripts/bytecodecompare/storebytecode.sh && cp -v report.txt bytecode-report-ubuntu.txt
- store_artifacts:
path: report.txt
- persist_to_workspace:
root: .
paths:
- bytecode-report-ubuntu.txt
b_bytecode_osx:
macos:
xcode: "11.0.0"
environment:
TERM: xterm
steps:
- checkout
- attach_workspace:
at: .
- run: scripts/bytecodecompare/storebytecode.sh && cp -v report.txt bytecode-report-osx.txt
- store_artifacts:
path: report.txt
- persist_to_workspace:
root: .
paths:
- bytecode-report-osx.txt
b_bytecode_win:
executor:
name: win/default
shell: cmd.exe
steps:
- checkout
- attach_workspace:
at: build
- run: python scripts\isolate_tests.py test\
- run: python scripts\bytecodecompare\prepare_report.py build\solc\Release\solc.exe
- run: cp report.txt bytecode-report-windows.txt
- store_artifacts:
path: report.txt
- persist_to_workspace:
root: .
paths:
- bytecode-report-windows.txt
b_bytecode_ems:
docker:
- image: circleci/node:10
environment:
SOLC_EMSCRIPTEN: "On"
steps:
- checkout
- attach_workspace:
at: emscripten_build/libsolc
- run: scripts/bytecodecompare/storebytecode.sh && cp -v report.txt bytecode-report-emscripten.txt
- store_artifacts:
path: report.txt
- persist_to_workspace:
root: .
paths:
- bytecode-report-emscripten.txt
t_bytecode_compare:
docker:
- image: << pipeline.parameters.ubuntu-2004-docker-image >>
steps:
- attach_workspace:
at: .
- run: diff --report-identical-files --from-file bytecode-report-emscripten.txt bytecode-report-ubuntu.txt bytecode-report-osx.txt bytecode-report-windows.txt
workflows: workflows:
version: 2 version: 2
@ -1002,6 +1086,26 @@ workflows:
- t_win: *workflow_win - t_win: *workflow_win
- t_win_release: *workflow_win_release - t_win_release: *workflow_win_release
# Bytecode comparison:
- b_bytecode_ubu:
requires:
- b_ubu
- b_bytecode_win:
requires:
- b_win
- b_bytecode_osx:
requires:
- b_osx
- b_bytecode_ems:
requires:
- b_ems
- t_bytecode_compare:
requires:
- b_bytecode_ubu
- b_bytecode_win
- b_bytecode_osx
- b_bytecode_ems
nightly: nightly:
triggers: triggers:

View File

@ -27,13 +27,6 @@
set -e set -e
if [[ "${TRAVIS_PULL_REQUEST_BRANCH}" != "" ]]; then
# Variable is set to the branch's name iff current job is a pull request,
# or is set to empty string if it is a push build.
echo "Skipping bytecode comparison."
exit 0
fi
REPO_ROOT="$(dirname "$0")"/../.. REPO_ROOT="$(dirname "$0")"/../..
if test -z "$1"; then if test -z "$1"; then
@ -120,34 +113,7 @@ EOF
$REPO_ROOT/scripts/bytecodecompare/prepare_report.py $REPO_ROOT/$BUILD_DIR/solc/solc $REPO_ROOT/scripts/bytecodecompare/prepare_report.py $REPO_ROOT/$BUILD_DIR/solc/solc
fi fi
if [ "$TRAVIS_SECURE_ENV_VARS" = "true" ] cp report.txt $REPO_ROOT
then
openssl aes-256-cbc -K $encrypted_60701c962b9c_key -iv $encrypted_60701c962b9c_iv -in "$REPO_ROOT"/scripts/bytecodecompare/deploy_key.enc -out deploy_key -d
chmod 600 deploy_key
eval `ssh-agent -s`
ssh-add deploy_key
git clone --depth 2 git@github.com:ethereum/solidity-test-bytecode.git
cd solidity-test-bytecode
git config user.name "travis"
git config user.email "chris@ethereum.org"
git clean -f -d -x
DIRNAME=$(cd "$REPO_ROOT" && git show -s --format="%cd-%H" --date="format:%Y-%m-%d-%H-%M")
mkdir -p "$DIRNAME"
REPORT="$DIRNAME/$ZIP_SUFFIX.txt"
cp ../report.txt "$REPORT"
# Only push if adding actually worked, i.e. there were changes.
if git add "$REPORT" && git commit -a -m "Added report $REPORT"
then
git pull --rebase
git push origin
else
echo "Adding report failed, it might already exist in the repository."
fi
else
echo "Not storing bytecode because the keys are not available."
fi
) )
rm -rf "$TMPDIR" rm -rf "$TMPDIR"
echo "Storebytecode finished." echo "Storebytecode finished."

View File

@ -5,7 +5,7 @@ ROOTDIR="$(dirname "$0")/../.."
cd "${ROOTDIR}" cd "${ROOTDIR}"
# shellcheck disable=SC2166 # shellcheck disable=SC2166
if [ "$CIRCLE_BRANCH" = release -o -n "$CIRCLE_TAG" -o -n "$FORCE_RELEASE" ]; then echo -n >prerelease.txt; else date -u +"nightly.%Y.%-m.%-d" >prerelease.txt; fi if [ "$CIRCLE_BRANCH" = release -o -n "$CIRCLE_TAG" -o -n "$FORCE_RELEASE" ]; then echo -n >prerelease.txt; fi
if [ -n "$CIRCLE_SHA1" ] if [ -n "$CIRCLE_SHA1" ]
then then
echo -n "$CIRCLE_SHA1" >commit_hash.txt echo -n "$CIRCLE_SHA1" >commit_hash.txt