forked from bytecodealliance/wasmtime
-
Notifications
You must be signed in to change notification settings - Fork 2
133 lines (120 loc) · 5.67 KB
/
performance.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# 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@v4
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@v4
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) }}}'