Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add CI job to check if updateBinary downloads the correct release #659

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ workflows:
- truffle-sample-project
- cli-smoke-test
- solidity-solcjs-ext-test
- update-binary-test

version: 2.1

Expand Down Expand Up @@ -375,6 +376,24 @@ jobs:
- run: cd solidity/ && curl "https://binaries.soliditylang.org/bin/soljson-nightly.js" --location --output soljson.js
- run: cd solidity/ && test/externalTests/solc-js/solc-js.sh "$(realpath soljson.js)" "$(scripts/get_version.sh)" "$(realpath ../solc-js/)"

update-binary-test:
docker:
- image: cimg/node:current
steps:
- show-npm-version
- checkout:
path: solc-js
- install-dependencies:
cache-id: solc-js
path: solc-js
- run:
name: Verify that `npm run updateBinary` downloads the latest release
command: |
cd solc-js
npm run updateBinary
npm run build
scripts/is-binary-up-to-date.sh

node-v10:
<<: *node-base
docker:
Expand Down
54 changes: 54 additions & 0 deletions scripts/is-binary-up-to-date.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#!/usr/bin/env bash

set -euo pipefail

BASE_URL="https://binaries.soliditylang.org/bin"
REPO_ROOT="$(dirname "$0")/.."
LIST_FILE=$(mktemp -t solc-bin-list-XXXXXX.json)

function fail() {
echo -e "ERROR: $*" >&2
exit 1
}

function check_release_version() {
local current_version="$1"

curl --silent --fail "${BASE_URL}/list.json" -o "$LIST_FILE"
[[ ! -f $LIST_FILE ]] && fail "Download of release list failed:\n [url]: ${BASE_URL}/list.json"

# Retrieve the latest released version
latest_version_short=$(jq --raw-output ".latestRelease" "$LIST_FILE")
latest_release_path=$(jq --raw-output ".releases | .[\"${latest_version_short}\"]" "$LIST_FILE")

# Check if current version is the latest release
if [[ "soljson-v${current_version}.js" != "$latest_release_path" ]]; then
fail "Version is not the latest release:\n [current]: ${current_version}\n [latest]: ${latest_version_short}"
fi

current_sha=$(shasum --binary --algorithm 256 ./soljson.js | awk '{ print $1 }')
release_sha=$(jq --raw-output ".builds[] | select(.path == \"${latest_release_path}\") | .sha256" "$LIST_FILE" | sed 's/^0x//')

# Check if sha matches
if [[ $current_sha != "$release_sha" ]]; then
fail "Checksum mismatch.\n [current]: ${current_sha}\n [release]: ${release_sha}"
fi
}

(
cd "$REPO_ROOT"

current_version=$(node ./dist/solc.js --version | sed --regexp-extended --quiet 's/^(.*).Emscripten.*/\1/p')

# Verify if current version matches the package version.
# It already exits with an error if the version mismatch
node ./dist/verifyVersion.js

# Verify if current version is the latest release
if check_release_version "$current_version"; then
echo "The currently installed soljson.js binary (${current_version}) matches the latest release available in solc-bin."
fi

# Cleanup temp files
rm -f "$LIST_FILE"
)