feat(evm): enable basic performance check in ci #1015
Workflow file for this run
This file contains hidden or 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: DTVM-EVM test CI in x86-64 | |
| on: | |
| push: | |
| paths-ignore: | |
| - 'docs/**' | |
| - 'resources/**' | |
| - '*.md' | |
| - '.gitignore' | |
| pull_request: | |
| paths-ignore: | |
| - 'docs/**' | |
| - 'resources/**' | |
| - '*.md' | |
| - '.gitignore' | |
| permissions: | |
| contents: read | |
| jobs: | |
| build_test_evm_interpreter_x86_ctest: | |
| name: Test DTVM-EVM interpreter with ctest on x86-64 | |
| runs-on: ubuntu-latest | |
| container: | |
| image: dtvmdev1/dtvm-dev-x64:main | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v3 | |
| with: | |
| submodules: "true" | |
| - name: Code Format Check | |
| run: | | |
| ./tools/format.sh check | |
| - name: Clone asmjit | |
| run: | | |
| git clone https://github.com/asmjit/asmjit.git | |
| - name: Build and Test | |
| run: | | |
| echo "current home is $HOME" | |
| export LLVM_SYS_150_PREFIX=/opt/llvm15 | |
| export LLVM_DIR=$LLVM_SYS_150_PREFIX/lib/cmake/llvm | |
| export PATH=$LLVM_SYS_150_PREFIX/bin:$PATH | |
| export CMAKE_BUILD_TARGET=Debug | |
| export ENABLE_ASAN=true | |
| export RUN_MODE=interpreter | |
| export INPUT_FORMAT=evm | |
| export ENABLE_LAZY=true | |
| export ENABLE_MULTITHREAD=true | |
| export TestSuite=evmtestsuite | |
| export CPU_EXCEPTION_TYPE='check' | |
| export ENABLE_GAS_METER=false | |
| bash .ci/run_test_suite.sh | |
| build_test_release_multipass_lazy_evmtestsuite_on_x86_ctest: | |
| name: Test DTVM-EVM multipass in release mode with ctest on x86-64 | |
| runs-on: ubuntu-latest | |
| container: | |
| image: dtvmdev1/dtvm-dev-x64:main | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v3 | |
| with: | |
| submodules: "true" | |
| - name: Code Format Check | |
| run: | | |
| ./tools/format.sh check | |
| - name: Build and Test | |
| run: | | |
| echo "current home is $HOME" | |
| export LLVM_SYS_150_PREFIX=/opt/llvm15 | |
| export LLVM_DIR=$LLVM_SYS_150_PREFIX/lib/cmake/llvm | |
| export PATH=$LLVM_SYS_150_PREFIX/bin:$PATH | |
| export CMAKE_BUILD_TARGET=Release | |
| export ENABLE_ASAN=true | |
| export RUN_MODE=multipass | |
| export INPUT_FORMAT=evm | |
| export ENABLE_LAZY=false | |
| export ENABLE_MULTITHREAD=true | |
| export TestSuite=evmtestsuite | |
| export CPU_EXCEPTION_TYPE='check' | |
| export ENABLE_GAS_METER=true | |
| bash .ci/run_test_suite.sh | |
| build_test_evm_interpreter_x86_cli: | |
| name: Test DTVM-EVM interpreter with CLI on x86-64 | |
| runs-on: ubuntu-latest | |
| container: | |
| image: dtvmdev1/dtvm-dev-x64:main | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v3 | |
| with: | |
| submodules: "true" | |
| - name: Code Format Check | |
| run: | | |
| ./tools/format.sh check | |
| - name: Build and Test | |
| run: | | |
| echo "current home is $HOME" | |
| export LLVM_SYS_150_PREFIX=/opt/llvm15 | |
| export LLVM_DIR=$LLVM_SYS_150_PREFIX/lib/cmake/llvm | |
| export PATH=$LLVM_SYS_150_PREFIX/bin:$PATH | |
| export CMAKE_BUILD_TARGET=Debug | |
| export ENABLE_ASAN=true | |
| export RUN_MODE=interpreter | |
| export INPUT_FORMAT=evm | |
| export ENABLE_LAZY=true | |
| export ENABLE_MULTITHREAD=true | |
| export TestSuite=evmrealsuite | |
| export CPU_EXCEPTION_TYPE='check' | |
| export ENABLE_GAS_METER=false | |
| bash .ci/run_test_suite.sh | |
| build_test_debug_multipass_lazy_evmtestsuite_on_x86: | |
| name: Test DTVM-EVM multipass in debug mode on x86-64 | |
| runs-on: ubuntu-latest | |
| container: | |
| image: dtvmdev1/dtvm-dev-x64:main | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v3 | |
| with: | |
| submodules: "true" | |
| - name: Code Format Check | |
| run: | | |
| ./tools/format.sh check | |
| - name: Build and Test | |
| run: | | |
| echo "current home is $HOME" | |
| export LLVM_SYS_150_PREFIX=/opt/llvm15 | |
| export LLVM_DIR=$LLVM_SYS_150_PREFIX/lib/cmake/llvm | |
| export PATH=$LLVM_SYS_150_PREFIX/bin:$PATH | |
| export CMAKE_BUILD_TARGET=Debug | |
| export ENABLE_ASAN=true | |
| export RUN_MODE=multipass | |
| export INPUT_FORMAT=evm | |
| export ENABLE_LAZY=false | |
| export ENABLE_MULTITHREAD=true | |
| export TestSuite=evmrealsuite | |
| export CPU_EXCEPTION_TYPE='check' | |
| export ENABLE_GAS_METER=true | |
| bash .ci/run_test_suite.sh | |
| build_test_release_evmone_unittests_on_x86: | |
| name: Test DTVM-EVM multipass and interpreter using evmone unit tests in release mode on x86-64 | |
| runs-on: ubuntu-latest | |
| container: | |
| image: dtvmdev1/dtvm-dev-x64:main | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v3 | |
| with: | |
| submodules: "true" | |
| - name: Code Format Check | |
| run: | | |
| ./tools/format.sh check | |
| - name: Build and Test | |
| run: | | |
| echo "current home is $HOME" | |
| export LLVM_SYS_150_PREFIX=/opt/llvm15 | |
| export LLVM_DIR=$LLVM_SYS_150_PREFIX/lib/cmake/llvm | |
| export PATH=$LLVM_SYS_150_PREFIX/bin:$PATH | |
| export CMAKE_BUILD_TARGET=Release | |
| export ENABLE_ASAN=true | |
| export RUN_MODE=multipass | |
| export CPU_EXCEPTION_TYPE='cpu' | |
| export TestSuite=evmonetestsuite | |
| bash .ci/run_test_suite.sh | |
| performance_regression_check: | |
| name: Performance Regression Check (10% threshold) | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| container: | |
| image: dtvmdev1/dtvm-dev-x64:main | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v3 | |
| with: | |
| submodules: "true" | |
| fetch-depth: 0 | |
| - name: Setup git safe directory | |
| run: | | |
| echo "Configuring git safe directory: ${{ github.workspace }}" | |
| git config --global --add safe.directory /__w/DTVM/DTVM | |
| - name: Code Format Check | |
| run: | | |
| ./tools/format.sh check | |
| - name: Build baseline (${{ github.base_ref }}) | |
| run: | | |
| echo "Building baseline on branch: ${{ github.base_ref }}" | |
| export LLVM_SYS_150_PREFIX=/opt/llvm15 | |
| export LLVM_DIR=$LLVM_SYS_150_PREFIX/lib/cmake/llvm | |
| export PATH=$LLVM_SYS_150_PREFIX/bin:$PATH | |
| # Save current state (including untracked files) | |
| git stash push -u -m "perf-check-stash" | |
| git checkout ${{ github.base_ref }} | |
| # Build baseline | |
| export CMAKE_BUILD_TARGET=Release | |
| export ENABLE_ASAN=false | |
| export RUN_MODE=multipass | |
| export ENABLE_LAZY=false | |
| export ENABLE_MULTITHREAD=true | |
| export TestSuite=benchmarksuite | |
| export CPU_EXCEPTION_TYPE='cpu' | |
| export BENCHMARK_MODE=multipass | |
| export BENCHMARK_SAVE_BASELINE=/tmp/perf_baseline.json | |
| bash .ci/run_test_suite.sh | |
| - name: Build current PR and check regression | |
| id: perf-check | |
| run: | | |
| echo "Building PR branch: ${{ github.sha }}" | |
| export LLVM_SYS_150_PREFIX=/opt/llvm15 | |
| export LLVM_DIR=$LLVM_SYS_150_PREFIX/lib/cmake/llvm | |
| export PATH=$LLVM_SYS_150_PREFIX/bin:$PATH | |
| # Switch back to PR branch | |
| git checkout ${{ github.sha }} | |
| git stash pop || true | |
| # Clean and rebuild for current PR | |
| rm -rf build evmone | |
| # Build and check | |
| export CMAKE_BUILD_TARGET=Release | |
| export ENABLE_ASAN=false | |
| export RUN_MODE=multipass | |
| export ENABLE_LAZY=false | |
| export ENABLE_MULTITHREAD=true | |
| export TestSuite=benchmarksuite | |
| export CPU_EXCEPTION_TYPE='cpu' | |
| export BENCHMARK_MODE=multipass | |
| export BENCHMARK_THRESHOLD=0.10 | |
| export BENCHMARK_BASELINE_FILE=/tmp/perf_baseline.json | |
| export BENCHMARK_SUMMARY_FILE=/tmp/perf_summary.md | |
| bash .ci/run_test_suite.sh | |
| continue-on-error: true | |
| - name: Comment on PR | |
| if: always() | |
| uses: actions/github-script@v6 | |
| with: | |
| script: | | |
| const fs = require('fs'); | |
| const passed = '${{ steps.perf-check.outcome }}' === 'success'; | |
| let summary = ''; | |
| try { | |
| summary = fs.readFileSync('/tmp/perf_summary.md', 'utf8'); | |
| } catch (e) { | |
| summary = '_No benchmark summary available._'; | |
| } | |
| const icon = passed ? '✅' : '⚠️'; | |
| const title = passed | |
| ? 'Performance Check Passed' | |
| : 'Performance Regression Detected'; | |
| const body = `${icon} **${title}**\n\n${summary}`; | |
| github.rest.issues.createComment({ | |
| issue_number: context.issue.number, | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| body: body | |
| }); | |
| - name: Fail on regression | |
| if: steps.perf-check.outcome == 'failure' | |
| run: | | |
| echo "::error::Performance regression detected. See logs for details." | |
| exit 1 |