aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.travis.yml7
-rw-r--r--appveyor.yml12
-rwxr-xr-xscripts/build_emscripten.sh6
-rw-r--r--scripts/bytecodecompare/deploy_key.encbin0 -> 1680 bytes
-rwxr-xr-xscripts/bytecodecompare/prepare_report.py24
-rw-r--r--scripts/bytecodecompare/storebytecode.bat41
-rwxr-xr-xscripts/bytecodecompare/storebytecode.sh101
-rwxr-xr-xscripts/create_source_tarball.sh2
-rwxr-xr-xscripts/isolate_tests.py24
-rwxr-xr-xtest/cmdlineTests.sh2
10 files changed, 199 insertions, 20 deletions
diff --git a/.travis.yml b/.travis.yml
index 61fe0cc3..d947707c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -44,6 +44,7 @@ env:
- SOLC_INSTALL_DEPS_TRAVIS=On
- SOLC_RELEASE=On
- SOLC_TESTS=On
+ - SOLC_STOREBYTECODE=Off
- SOLC_DOCKER=Off
matrix:
@@ -61,6 +62,7 @@ matrix:
compiler: gcc
env:
- ZIP_SUFFIX=ubuntu-trusty
+ - SOLC_STOREBYTECODE=On
- os: linux
dist: trusty
@@ -68,6 +70,7 @@ matrix:
compiler: clang
env:
- ZIP_SUFFIX=ubuntu-trusty-clang
+ - SOLC_STOREBYTECODE=On
# Documentation target, which generates documentation using Phoenix / ReadTheDocs.
- os: linux
@@ -113,6 +116,8 @@ matrix:
- SOLC_INSTALL_DEPS_TRAVIS=Off
- SOLC_RELEASE=Off
- SOLC_TESTS=Off
+ - ZIP_SUFFIX=emscripten
+ - SOLC_STOREBYTECODE=On
# OS X Mavericks (10.9)
# https://en.wikipedia.org/wiki/OS_X_Mavericks
@@ -175,6 +180,7 @@ cache:
install:
- test $SOLC_INSTALL_DEPS_TRAVIS != On || (scripts/install_deps.sh)
- test "$TRAVIS_OS_NAME" != "linux" || (scripts/install_cmake.sh)
+ - if [ "$TRAVIS_BRANCH" = release ]; then echo -n > prerelease.txt; else date -u +"nightly.%Y.%-m.%-d" > prerelease.txt; fi
- echo -n "$TRAVIS_COMMIT" > commit_hash.txt
before_script:
@@ -187,6 +193,7 @@ before_script:
script:
- test $SOLC_DOCS != On || (scripts/docs.sh)
- test $SOLC_TESTS != On || (cd $TRAVIS_BUILD_DIR && scripts/tests.sh)
+ - test $SOLC_STOREBYTECODE != On || (cd $TRAVIS_BUILD_DIR && scripts/bytecodecompare/storebytecode.sh)
deploy:
# This is the deploy target for the Emscripten build.
diff --git a/appveyor.yml b/appveyor.yml
index 86a689a7..8d9424f0 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -34,6 +34,10 @@ branches:
os: Visual Studio 2015
configuration:
- RelWithDebInfo
+environment:
+ # This is used for pushing to solidity-test-bytecodes
+ priv_key:
+ secure: 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
# NB: Appveyor cache is disabled, because it is proving very unreliable.
# We can re-enable it when we find a way to mitigate the unreliability
# issues. Have automated builds be reliable is the more important thing.
@@ -43,7 +47,14 @@ configuration:
#init:
# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
install:
+ - ps: $fileContent = "-----BEGIN RSA PRIVATE KEY-----`n"
+ - ps: $fileContent += $env:priv_key.Replace(' ', "`n")
+ - ps: $fileContent += "`n-----END RSA PRIVATE KEY-----`n"
+ - ps: Set-Content c:\users\appveyor\.ssh\id_rsa $fileContent
- git submodule update --init --recursive
+ - ps: $prerelease = "nightly."
+ - ps: $prerelease += Get-Date -format "yyyy.M.d"
+ - ps: Set-Content prerelease.txt $prerelease
- scripts/install_deps.bat
- set ETHEREUM_DEPS_PATH=%APPVEYOR_BUILD_FOLDER%\deps\install
before_build:
@@ -54,6 +65,7 @@ build_script:
- msbuild solidity.sln /p:Configuration=%CONFIGURATION% /m:%NUMBER_OF_PROCESSORS% /v:minimal
- cd %APPVEYOR_BUILD_FOLDER%
- scripts\release.bat %CONFIGURATION%
+ - scripts\bytecodecompare\storebytecode.bat %CONFIGURATION% %APPVEYOR_REPO_COMMIT%
test_script:
- cd %APPVEYOR_BUILD_FOLDER%
diff --git a/scripts/build_emscripten.sh b/scripts/build_emscripten.sh
index 9b432e95..6046978e 100755
--- a/scripts/build_emscripten.sh
+++ b/scripts/build_emscripten.sh
@@ -29,12 +29,6 @@
set -e
if [[ "$OSTYPE" != "darwin"* ]]; then
- if [ "$TRAVIS_BRANCH" = release ]
- then
- echo -n > prerelease.txt
- else
- date -u +"nightly.%Y.%-m.%-d" > prerelease.txt
- fi
./scripts/travis-emscripten/install_deps.sh
docker run -v $(pwd):/src trzeci/emscripten:sdk-tag-1.35.4-64bit ./scripts/travis-emscripten/build_emscripten.sh
fi
diff --git a/scripts/bytecodecompare/deploy_key.enc b/scripts/bytecodecompare/deploy_key.enc
new file mode 100644
index 00000000..acab2a27
--- /dev/null
+++ b/scripts/bytecodecompare/deploy_key.enc
Binary files differ
diff --git a/scripts/bytecodecompare/prepare_report.py b/scripts/bytecodecompare/prepare_report.py
new file mode 100755
index 00000000..5a770981
--- /dev/null
+++ b/scripts/bytecodecompare/prepare_report.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+
+import sys
+import glob
+import subprocess
+import json
+
+solc = sys.argv[1]
+report = open("report.txt", "w")
+
+for optimize in [False, True]:
+ for f in sorted(glob.glob("*.sol")):
+ args = [solc, '--combined-json', 'bin,metadata', f]
+ if optimize:
+ args += ['--optimize']
+ proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ (out, err) = proc.communicate()
+ try:
+ result = json.loads(out.strip())
+ for contractName in sorted(result['contracts'].keys()):
+ report.write(contractName + ' ' + result['contracts'][contractName]['bin'] + '\n')
+ report.write(contractName + ' ' + result['contracts'][contractName]['metadata'] + '\n')
+ except:
+ report.write(f + ": ERROR\n")
diff --git a/scripts/bytecodecompare/storebytecode.bat b/scripts/bytecodecompare/storebytecode.bat
new file mode 100644
index 00000000..969a42a4
--- /dev/null
+++ b/scripts/bytecodecompare/storebytecode.bat
@@ -0,0 +1,41 @@
+@ECHO OFF
+
+REM ---------------------------------------------------------------------------
+REM This file is part of solidity.
+REM
+REM solidity is free software: you can redistribute it and/or modify
+REM it under the terms of the GNU General Public License as published by
+REM the Free Software Foundation, either version 3 of the License, or
+REM (at your option) any later version.
+REM
+REM solidity is distributed in the hope that it will be useful,
+REM but WITHOUT ANY WARRANTY; without even the implied warranty of
+REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+REM GNU General Public License for more details.
+REM
+REM You should have received a copy of the GNU General Public License
+REM along with solidity. If not, see <http://www.gnu.org/licenses/>
+REM
+REM Copyright (c) 2017 solidity contributors.
+REM ---------------------------------------------------------------------------
+
+set CONFIGURATION=%1
+set COMMIT=%2
+
+mkdir bytecode
+cd bytecode
+..\scripts\isolate_tests.py ..\test\
+..\scripts\bytecodecompare\prepare_report.py ..\build\solc\%CONFIGURATION%\solc.exe
+
+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
+
+mkdir %COMMIT%
+set REPORT=%COMMIT%/windows.txt
+cp ../report.txt %REPORT%
+git add %REPORT%
+git commit -a -m "Added report."
+git push origin
diff --git a/scripts/bytecodecompare/storebytecode.sh b/scripts/bytecodecompare/storebytecode.sh
new file mode 100755
index 00000000..cdf376a6
--- /dev/null
+++ b/scripts/bytecodecompare/storebytecode.sh
@@ -0,0 +1,101 @@
+#!/usr/bin/env bash
+
+#------------------------------------------------------------------------------
+# Script used for cross-platform comparison as part of the travis automation.
+# Splits all test source code into multiple files, generates bytecode and
+# uploads the bytecode into github.com/ethereum/solidity-test-bytecode where
+# another travis job is triggered to do the actual comparison.
+#
+# ------------------------------------------------------------------------------
+# 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")"/../..
+
+echo "Compiling all test contracts into bytecode..."
+TMPDIR=$(mktemp -d)
+(
+ cd "$REPO_ROOT"
+ REPO_ROOT=$(pwd) # make it absolute
+ cd "$TMPDIR"
+
+ "$REPO_ROOT"/scripts/isolate_tests.py "$REPO_ROOT"/test/
+
+ if [[ "$SOLC_EMSCRIPTEN" = "On" ]]
+ then
+ cp "$REPO_ROOT/build/solc/soljson.js" .
+ npm install solc
+ cat > solc <<EOF
+#!/usr/bin/env node
+var process = require('process')
+var fs = require('fs')
+
+var compiler = require('solc/wrapper.js')(require('./soljson.js'))
+
+for (var optimize of [false, true])
+{
+ for (var filename of process.argv.slice(2))
+ {
+ if (filename !== undefined)
+ {
+ var inputs = {}
+ inputs[filename] = fs.readFileSync(filename).toString()
+ var result = compiler.compile({sources: inputs}, optimize)
+ if (!('contracts' in result) || Object.keys(result['contracts']).length === 0)
+ {
+ console.log(filename + ': ERROR')
+ }
+ else
+ {
+ for (var contractName in result['contracts'])
+ {
+ console.log(contractName + ' ' + result['contracts'][contractName].bytecode)
+ console.log(contractName + ' ' + result['contracts'][contractName].metadata)
+ }
+ }
+ }
+ }
+}
+EOF
+ chmod +x solc
+ ./solc *.sol > report.txt
+ else
+ $REPO_ROOT/scripts/bytecodecompare/prepare_report.py $REPO_ROOT/build/solc/solc
+ fi
+
+ 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
+
+ mkdir -p "$TRAVIS_COMMIT"
+ REPORT="$TRAVIS_COMMIT/$ZIP_SUFFIX.txt"
+ cp ../report.txt "$REPORT"
+ git add "$REPORT"
+ git commit -a -m "Added report $REPORT"
+ git push origin
+)
+rm -rf "$TMPDIR" \ No newline at end of file
diff --git a/scripts/create_source_tarball.sh b/scripts/create_source_tarball.sh
index bf8a336b..9ca72c31 100755
--- a/scripts/create_source_tarball.sh
+++ b/scripts/create_source_tarball.sh
@@ -15,7 +15,7 @@ REPO_ROOT="$(dirname "$0")"/..
then
versionstring="$version"
else
- versionstring="$version-develop-$commitdate-$commithash"
+ versionstring="$version-nightly-$commitdate-$commithash"
fi
TEMPDIR=$(mktemp -d)
diff --git a/scripts/isolate_tests.py b/scripts/isolate_tests.py
index 9bb52f4c..a1d1c75c 100755
--- a/scripts/isolate_tests.py
+++ b/scripts/isolate_tests.py
@@ -8,10 +8,12 @@
import sys
import re
-
+import os
+import hashlib
+from os.path import join
def extract_cases(path):
- lines = open(path).read().splitlines()
+ lines = open(path, 'rb').read().splitlines()
inside = False
delimiter = ''
@@ -33,16 +35,14 @@ def extract_cases(path):
return tests
-def write_cases(tests, start=0):
- for i, test in enumerate(tests, start=start):
- open('test%d.sol' % i, 'w').write(test)
-
+def write_cases(tests):
+ for test in tests:
+ open('test_%s.sol' % hashlib.sha256(test).hexdigest(), 'wb').write(test)
if __name__ == '__main__':
- files = sys.argv[1:]
+ path = sys.argv[1]
- i = 0
- for path in files:
- cases = extract_cases(path)
- write_cases(cases, start=i)
- i += len(cases)
+ for root, dir, files in os.walk(path):
+ for f in files:
+ cases = extract_cases(join(root, f))
+ write_cases(cases)
diff --git a/test/cmdlineTests.sh b/test/cmdlineTests.sh
index e2ee6a5e..99cac346 100755
--- a/test/cmdlineTests.sh
+++ b/test/cmdlineTests.sh
@@ -73,7 +73,7 @@ TMPDIR=$(mktemp -d)
cd "$REPO_ROOT"
REPO_ROOT=$(pwd) # make it absolute
cd "$TMPDIR"
- "$REPO_ROOT"/scripts/isolate_tests.py "$REPO_ROOT"/test/contracts/* "$REPO_ROOT"/test/libsolidity/*EndToEnd*
+ "$REPO_ROOT"/scripts/isolate_tests.py "$REPO_ROOT"/test/
for f in *.sol
do
"$REPO_ROOT"/build/test/solfuzzer < "$f"