# This is a workflow triggered by PR or triggered manually # Runs quick performance tests and reports the comparison against HEAD # Test should take less than 10 minutes to run on current self-hosted devices name: "Performance Testing" # Controls when the action will run. # This workflow runs when manually triggered by keywords used in the start of a review comment # Currently that phrase is /bench_x64. /bench_aarch64 and /bench_all are TODOs. on: issue_comment: types: [created] push: # Env variables env: SG_COMMIT: 2ab01ac GITHUB_CONTEXT: ${{ toJson(github) }} jobs: Wasmtime_Repo_On_PR_Comment: name: Benchmark x64 on PR comment Wasmtime repo runs-on: ubuntu-latest if: | (github.event_name == 'issue_comment') && (github.event.issue.pull_request.url) && (contains(github.event.comment.body, '/bench_x64')) && (('abrown' == github.event.comment.user.login) || ('afonso360' == github.event.comment.user.login) || ('akirilov-arm' == github.event.comment.user.login) || ('alexcrichton' == github.event.comment.user.login) || ('bbouvier' == github.event.comment.user.login) || ('bjorn3' == github.event.comment.user.login) || ('cfallin' == github.event.comment.user.login) || ('elliottt' == github.event.comment.user.login) || ('fitzgen' == github.event.comment.user.login) || ('jameysharp' == github.event.comment.user.login) || ('jlb6740' == github.event.comment.user.login) || ('sparker-arm' == github.event.comment.user.login) || ('uweigand' == github.event.comment.user.login)) steps: - run: echo "$GITHUB_CONTEXT" - run: | # Create and Push Branch git clone https://wasmtime-publish:${{secrets.PERSONAL_ACCESS_TOKEN}}@github.com/bytecodealliance/wasmtime-sightglass-benchmarking.git cd wasmtime-sightglass-benchmarking git remote add wasmtime ${{ github.event.repository.clone_url }} git fetch wasmtime refs/pull/*/merge:refs/remotes/wasmtime/pull/*/merge export issue_pr_url=${{ github.event.issue.pull_request.url }} export issue_commits_url=${{ github.event.issue.comments_url }} export issue_ref_name=$(curl -sSL $issue_pr_url | jq -r '.head.ref' | head -n 1) export issue_number=$(curl -sSL $issue_pr_url | jq -r '.number' | head -n 1) export issue_merge_commit_sha=$(curl -sSL $issue_pr_url | jq -r '.merge_commit_sha' | head -n 1) git submodule update --init --recursive git checkout wasmtime/pull/${issue_number}/merge -b pull/${issue_number}/merge/${issue_merge_commit_sha} git config user.name $(curl -sSL $issue_commits_url | jq -r '.[].commit.committer.name' | tail -n 1) git config user.email $(curl -sSL $issue_commits_url | jq -r '.[].commit.committer.email' | tail -n 1) git log -n 1 git commit --allow-empty -m "${issue_commits_url}" git push origin --force pull/${issue_number}/merge/${issue_merge_commit_sha} git log -n 1 Performance_Repo_On_Push: name: Benchmark x64 on push Performance repo runs-on: [self-hosted, linux, x64] if: (github.event_name == 'push') && (github.repository == 'bytecodealliance/wasmtime-sightglass-benchmarking') steps: - run: echo "$GITHUB_CONTEXT" - run: echo "${{ github.event.head_commit.message }}" - name: "Build sightglass commit '${{ env.SG_COMMIT }}'" run: | cd ../ && ls -l && rm -rf ./sightglass git clone https://github.com/bytecodealliance/sightglass.git && cd ./sightglass git checkout ${{env.SG_COMMIT}} cargo build --release - name: Checkout patch from bytecodealliance/wasmtime (pushed and triggering on this perf repo) uses: actions/checkout@v3 with: submodules: true path: wasmtime_commit - run: rustup update nightly && rustup default nightly - name: Build patch from bytecodealliance/wasmtime (pushed and triggering on this perf repo) working-directory: ./wasmtime_commit run: | cargo --version cargo build --release -p wasmtime-bench-api cp target/release/libwasmtime_bench_api.so /tmp/wasmtime_commit.so - name: Checkout main from bytecodealliance/wasmtime uses: actions/checkout@v3 with: ref: 'main' repository: 'bytecodealliance/wasmtime' submodules: true path: wasmtime_main - name: Build main from bytecodealliance/wasmtime working-directory: ./wasmtime_main run: | cargo build --release -p wasmtime-bench-api cp target/release/libwasmtime_bench_api.so /tmp/wasmtime_main.so - name: Run performance tests working-directory: ../sightglass run: | cargo run -- \ benchmark \ --processes 5 \ --iterations-per-process 5 \ --engine /tmp/wasmtime_main.so \ --engine /tmp/wasmtime_commit.so \ --output-file /tmp/results.txt - name: Print Results run: cat /tmp/results.txt - id: get-comment-body name: Create Results Body run: | body="$(cat /tmp/results.txt)" body="${body//'%'/'%25'}" body="${body//$'\n'/'%0A'}" body="${body//$'\r'/'%0D'}" echo "::set-output name=body::$body" - name: Publish Results run: | curl -X POST -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: token ${{ secrets.WASMTIME_PUBLISHING_TOKEN }}" \ ${{ github.event.head_commit.message }} \ -d '{"body": ${{ toJSON(steps.get-comment-body.outputs.body) }}}'