Schedule based benchmark of pallet-contracts and pallet-evm #90
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Schedule based benchmark of pallet-contracts and pallet-evm | |
on: | |
schedule: | |
- cron: '0 0 * * *' | |
workflow_dispatch: | |
jobs: | |
smart_contract_benchmark: | |
strategy: | |
matrix: | |
type: [ink-wasm, sol-wasm, evm] | |
contract: [erc20] | |
env: | |
BENCHMARK_FILE: benchmark-${{ matrix.type }}.csv | |
BENCHMARK_PATH: results | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Download Moonbeam Release | |
id: moonbeam_release | |
run: | | |
API_URL="https://api.github.com/repos/karolk91/moonbeam/releases/latest" | |
RESPONSE=$(curl -s "${API_URL}") | |
# Get the download URL of the release binary from Repo | |
DOWNLOAD_URL=$(echo $RESPONSE | jq -r '.assets | map(select(.name == "moonbeam.gz")) | .[0].browser_download_url') | |
RELEASE_TAG=$(echo $RESPONSE | jq -r '.tag_name') | |
mkdir -p bin | |
curl -L ${DOWNLOAD_URL} | tar -xzv -C bin && chmod +x bin/moonbeam | |
echo "tag=$(echo ${RELEASE_TAG})" >> $GITHUB_OUTPUT | |
- name: Download Polkadot-Parachain Release | |
id: polkadot_parachain_release | |
run: | | |
API_URL="https://api.github.com/repos/paritytech/cumulus/releases/latest" | |
RESPONSE=$(curl -s "${API_URL}") | |
# Get the download URL of the release binary from Repo | |
DOWNLOAD_URL=$(echo $RESPONSE | jq -r '.assets | map(select(.name == "polkadot-parachain")) | .[0].browser_download_url') | |
RELEASE_TAG=$(echo $RESPONSE | jq -r '.tag_name') | |
mkdir -p bin | |
curl -L -o bin/polkadot-parachain ${DOWNLOAD_URL} && chmod +x bin/polkadot-parachain | |
echo "tag=$(echo ${RELEASE_TAG})" >> $GITHUB_OUTPUT | |
- name: Get Ink contract language verision | |
id: ink_version | |
uses: ./.github/actions/get-contract-language | |
with: | |
contracts-directory: './contracts/ink' | |
- name: Get Solang contract language verision | |
id: solang_version | |
uses: ./.github/actions/get-contract-language | |
with: | |
contracts-directory: './contracts/solidity/wasm' | |
- name: Display variables | |
run: | | |
echo moonbeam_tag: ${{ steps.moonbeam_release.outputs.tag }} | |
echo polkadot_parachain_tag: ${{ steps.polkadot_parachain_release.outputs.tag }} | |
- name: Execute tests | |
id: run_smart_bench | |
env: | |
TEST_PARAMS: --instance-count 1 --call-count 50 | |
run: | | |
# ink solang and solidity versions to be printed | |
RELEASE_COMMIT_SHA=$(echo ${{ github.event.client_payload }} | jq -r '.sha') | |
INPUT_POLKADOT_VERSION=$(echo ${{ github.event.client_payload }} | jq -r '.polkadot_version') | |
echo "${INPUT_POLKADOT_VERSION} ${RELEASE_COMMIT_SHA}" | |
cd launch | |
./download-bins.sh | |
# overwrite parachains | |
cp ../bin/* ./bin | |
./build.sh | |
TPS=$(./run.sh -- ${{ matrix.type }} ${{ matrix.contract }} ${TEST_PARAMS} | grep -E "TPS:" | cut -d' ' -f2 | tr -d '\n') | |
echo "tps=$(echo ${TPS})" >> $GITHUB_OUTPUT | |
- name: Extract Ink benchmark stats | |
if: matrix.type == 'ink-wasm' | |
run: | | |
CURRENT_DATE=$(date +"%Y%m%d") | |
if ${{ matrix.type }} | |
# date, polkadot_version, parachain tag, contract, contract language, TPS | |
echo "${CURRENT_DATE}, ${{ steps.polkadot_parachain_release.outputs.tag }}, ${{ matrix.contract }}, ${{ steps.run_smart_bench.outputs.tps }}, ${{ steps.ink_version.outputs.language }}" > ${BENCHMARK_PATH}/${BENCHMARK_FILE} | |
- name: Extract Solang benchmark stats | |
if: matrix.type == 'sol-wasm' | |
run: | | |
CURRENT_DATE=$(date +"%Y%m%d") | |
if ${{ matrix.type }} | |
# date, polkadot_version, parachain tag, contract, contract language, TPS | |
echo "${CURRENT_DATE}, ${{ steps.polkadot_parachain_release.outputs.tag }}, ${{ matrix.contract }}, ${{ steps.run_smart_bench.outputs.tps }}, ${{ steps.solang_version.outputs.language }}" > ${BENCHMARK_PATH}/${BENCHMARK_FILE} | |
- name: Extract Solidity benchmark stats | |
if: matrix.type == 'evm' | |
run: | | |
CURRENT_DATE=$(date +"%Y%m%d") | |
# date, polkadot_version, parachain tag, contract, contract language, TPS | |
echo "${CURRENT_DATE}, ${{ steps.moonbeam_release.outputs.tag }}, ${{ matrix.contract }}, ${{ steps.run_smart_bench.outputs.tps }}" > ${BENCHMARK_PATH}/${BENCHMARK_FILE} | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.BENCHMARK_FILE }} | |
path: ${{ env.BENCHMARK_PATH }} | |
retention-days: 14 | |
# - name: Commit benchmark stats | |
# run: | | |
# CURRENT_DATE=$(date +"%Y%m%d") | |
# git config --global user.email "actions@example.com" | |
# git config --global user.name "GitHub Action" | |
# git add ${BENCHMARK_PATH}/${BENCHMARK_FILE} | |
# git commit -m "Add benchmark results on ${CURRENT_DATE}" | |
# git push | |