From 157473dba32ff94b95f645a309b6ed8b8a8b9130 Mon Sep 17 00:00:00 2001 From: Oleksandr Zarudnyi Date: Mon, 11 Mar 2024 23:17:38 +0400 Subject: [PATCH] Add CI workflows --- .github/workflows/benchmarks.yml | 202 +++++++++++++++++++++++++++++++ .github/workflows/tests.yaml | 56 +++++++++ 2 files changed, 258 insertions(+) create mode 100644 .github/workflows/benchmarks.yml create mode 100644 .github/workflows/tests.yaml diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml new file mode 100644 index 00000000..cb8208d2 --- /dev/null +++ b/.github/workflows/benchmarks.yml @@ -0,0 +1,202 @@ +name: Benchmarking + +on: + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + benchmarks_candidate: + runs-on: [matterlabs-ci-runner] + container: + image: matterlabs/llvm_runner:latest + credentials: + username: ${{ secrets.DOCKERHUB_USER }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + options: -m 110g + steps: + - uses: AutoModality/action-clean@492b2d2e2e77247bfd0b17eaa89a371b2f3430ee # v1 + - name: Preparing workspace. Setting environment. + run: | + echo "BENCHMARK_MODE=${{ github.event.inputs.compiler_llvm_benchmark_mode || '^M^B3' }}" >> $GITHUB_ENV + echo "BENCHMARK_PATH=${{ github.event.inputs.compiler_llvm_benchmark_path || '' }}" >> $GITHUB_ENV + echo "CANDIDATE_BRANCH_NAME=${{ github.event.inputs.compiler_tester_candidate_branch }}" >> $GITHUB_ENV + + - name: Get branch name (pull request) + if: github.event_name == 'pull_request' + shell: bash + run: echo "BRANCH_NAME=$(echo ${GITHUB_BASE_REF} | tr / -)" >> $GITHUB_ENV + + - name: Preparing workspace. Checkout compiler-tester candidate (pull request) + if: github.event_name == 'pull_request' + uses: actions/checkout@v4 + with: + submodules: recursive + path: compiler-tester + + - name: Preparing workspace. Checkout compiler-tester candidate (workflow dispatch) + if: github.event_name == 'workflow_dispatch' + uses: actions/checkout@v4 + with: + path: compiler-tester + submodules: recursive + ref: ${{ env.CANDIDATE_BRANCH_NAME }} + + - name: Testing. Benchmarking LLVM framework candidate. + id: compiler_tester_run + run: | + cd compiler-tester + cargo install compiler-llvm-builder + /usr/local/cargo/bin/zkevm-llvm clone && /usr/local/cargo/bin/zkevm-llvm build + + export RUST_BACKTRACE='full' + export LLVM_SYS_150_PREFIX="$(pwd)/target-llvm/target-final/" + cargo build --verbose --release --bin 'compiler-tester' + cargo build --verbose --release --manifest-path /usr/local/cargo/git/checkouts/era-compiler-solidity-*/*/Cargo.toml --target-dir './target-zksolc/' + cargo build --verbose --release --manifest-path /usr/local/cargo/git/checkouts/era-compiler-vyper-*/*/Cargo.toml --target-dir './target-zkvyper/' + + ./target/release/compiler-tester \ + --zksolc './target-zksolc/release/zksolc' \ + --zkvyper './target-zkvyper/release/zkvyper' \ + --path=${{ env.BENCHMARK_PATH || '' }} \ + --mode=${{ env.BENCHMARK_MODE || '' }} \ + --benchmark='candidate.json' + + - uses: actions/upload-artifact@v4 + with: + name: candidate-benchmark + path: compiler-tester/candidate.json + + benchmarks_reference: + runs-on: [matterlabs-ci-runner] + container: + image: matterlabs/llvm_runner:latest + credentials: + username: ${{ secrets.DOCKERHUB_USER }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + options: -m 110g + steps: + - uses: AutoModality/action-clean@492b2d2e2e77247bfd0b17eaa89a371b2f3430ee # v1 + - name: Preparing workspace. Setting environment. + run: | + echo "BENCHMARK_MODE=${{ github.event.inputs.compiler_llvm_benchmark_mode || '^M^B3' }}" >> $GITHUB_ENV + echo "BENCHMARK_PATH=${{ github.event.inputs.compiler_llvm_benchmark_path || '' }}" >> $GITHUB_ENV + echo "REFERENCE_BRANCH_NAME=${{ github.event.inputs.compiler_tester_reference_branch }}" >> $GITHUB_ENV + + - name: Get branch name (pull request) + if: github.event_name == 'pull_request' + shell: bash + run: echo "BRANCH_NAME=$(echo ${GITHUB_BASE_REF} | tr / -)" >> $GITHUB_ENV + + - name: Preparing workspace. Checkout compiler-tester reference (pull request) + if: github.event_name == 'pull_request' + uses: actions/checkout@v4 + with: + path: compiler-tester + submodules: recursive + ref: ${{ env.BRANCH_NAME }} + + - name: Preparing workspace. Checkout compiler-tester reference (workflow dispatch) + if: github.event_name == 'workflow_dispatch' + uses: actions/checkout@v4 + with: + path: compiler-tester + submodules: recursive + ref: ${{ env.REFERENCE_BRANCH_NAME }} + + - name: Testing. Benchmarking LLVM framework reference. + id: compiler_tester_run + run: | + cd compiler-tester + cargo install compiler-llvm-builder + /usr/local/cargo/bin/zkevm-llvm clone && /usr/local/cargo/bin/zkevm-llvm build + + export RUST_BACKTRACE='full' + export LLVM_SYS_150_PREFIX="$(pwd)/target-llvm/target-final/" + cargo build --verbose --release --bin 'compiler-tester' + cargo build --verbose --release --manifest-path /usr/local/cargo/git/checkouts/era-compiler-solidity-*/*/Cargo.toml --target-dir './target-zksolc/' + cargo build --verbose --release --manifest-path /usr/local/cargo/git/checkouts/era-compiler-vyper-*/*/Cargo.toml --target-dir './target-zkvyper/' + + ./target/release/compiler-tester \ + --zksolc './target-zksolc/release/zksolc' \ + --zkvyper './target-zkvyper/release/zkvyper' \ + --path=${{ env.BENCHMARK_PATH || '' }} \ + --mode=${{ env.BENCHMARK_MODE || '' }} \ + --benchmark='reference.json' + + - uses: actions/upload-artifact@v4 + with: + name: reference-benchmark + path: compiler-tester/reference.json + + benchmarks_analysis: + runs-on: [matterlabs-ci-runner] + needs: [benchmarks_candidate, benchmarks_reference] + container: + image: matterlabs/llvm_runner:latest + credentials: + username: ${{ secrets.DOCKERHUB_USER }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + steps: + - uses: AutoModality/action-clean@492b2d2e2e77247bfd0b17eaa89a371b2f3430ee # v1 + - name: Get branch name (pull request) + if: github.event_name == 'pull_request' + shell: bash + run: echo "BRANCH_NAME=$(echo ${GITHUB_BASE_REF} | tr / -)" >> $GITHUB_ENV + + - name: Preparing workspace. Checkout compiler-tester candidate (pull request) + if: github.event_name == 'pull_request' + uses: actions/checkout@v4 + with: + path: compiler-tester + submodules: recursive + + - name: Preparing workspace. Checkout compiler-tester candidate (workflow dispatch) + if: github.event_name == 'workflow_dispatch' + uses: actions/checkout@v4 + with: + path: compiler-tester + ref: ${{ env.CANDIDATE_BRANCH_NAME }} + + - uses: actions/download-artifact@v4 + with: + name: candidate-benchmark + path: compiler-tester + + - uses: actions/download-artifact@v4 + with: + name: reference-benchmark + path: compiler-tester + + - name: Testing. Comparing LLVM framework results. + id: compiler_tester_run + run: | + cd compiler-tester && \ + export RUST_BACKTRACE=full && \ + cargo run --release --bin benchmark-analyzer -- --reference reference.json --candidate candidate.json --output-file result.txt && \ + chown 1000:1000 result.txt + + - name: Testing. Posting LLVM benchmark results to step summary. + run: | + printf "Benchmark results:\n" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + cat ./compiler-tester/result.txt >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + cat $GITHUB_STEP_SUMMARY > ./compiler-tester/result.txt + + - name: Testing. Posting LLVM benchmark results to PR comment. + if: github.event_name == 'pull_request' + uses: mshick/add-pr-comment@v2 + with: + message-path: ./compiler-tester/result.txt + + - uses: 8398a7/action-slack@v3 + with: + status: ${{ job.status }} + fields: repo,commit,author,action,eventName,ref,workflow,job,took,pullRequest # selectable (default: repo,message) + env: + SLACK_WEBHOOK_URL: ${{ secrets.COMPILER_CI_MATTERMOST_WEBHOOK }} # required + if: ${{ failure() || success() }} # Skip canceled jobs + diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml new file mode 100644 index 00000000..d61c886a --- /dev/null +++ b/.github/workflows/tests.yaml @@ -0,0 +1,56 @@ +name: Testing + +on: + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + testing: + runs-on: [self-hosted, ci-runner-compiler] + timeout-minutes: 720 + container: + image: matterlabs/llvm_runner:latest + credentials: + username: ${{ secrets.DOCKERHUB_USER }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + options: -m 110g + steps: + # Add safe.directory per https://github.com/actions/checkout/issues/766 + - name: Setting all dirs as safe safe.directory + run: | + git config --system --add safe.directory '*' + git config --global --add safe.directory '*' + + - name: Preparing workspace. Checkout compiler-tester repository. + uses: actions/checkout@v4 + with: + path: compiler-tester + submodules: recursive + + - name: Testing. Building and running compiler tester. + id: compiler_tester_run + run: | + cd compiler-tester + cargo install compiler-llvm-builder + /usr/local/cargo/bin/zkevm-llvm clone && /usr/local/cargo/bin/zkevm-llvm build + + export RUST_BACKTRACE='full' + export LLVM_SYS_150_PREFIX="$(pwd)/target-llvm/target-final/" + cargo build --verbose --release --bin 'compiler-tester' + cargo build --verbose --release --manifest-path /usr/local/cargo/git/checkouts/era-compiler-solidity-*/*/Cargo.toml --target-dir './target-zksolc/' + cargo build --verbose --release --manifest-path /usr/local/cargo/git/checkouts/era-compiler-vyper-*/*/Cargo.toml --target-dir './target-zkvyper/' + + ./target/release/compiler-tester \ + --zksolc './target-zksolc/release/zksolc' \ + --zkvyper './target-zkvyper/release/zkvyper' + + - uses: 8398a7/action-slack@v3 + with: + status: ${{ job.status }} + fields: repo,commit,author,action,eventName,ref,workflow,job,took,pullRequest # selectable (default: repo,message) + env: + SLACK_WEBHOOK_URL: ${{ secrets.COMPILER_CI_MATTERMOST_WEBHOOK }} # required + if: ${{ failure() || success() }} # Skip canceled jobs