forked from expressjs/express
-
Notifications
You must be signed in to change notification settings - Fork 0
138 lines (114 loc) · 4.53 KB
/
benchmarks.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
134
135
136
137
138
name: Benchmark
on:
pull_request:
types: [opened, synchronize, reopened, labeled]
permissions:
contents: read
pull-requests: write
jobs:
benchmarks:
if: contains(github.event.pull_request.labels.*.name, 'request-benchmarks')
runs-on: ubuntu-latest
steps:
- name: Install wrk
run: |
sudo apt-get update
sudo apt-get install -y wrk
- name: Checkout Source Branch
uses: actions/checkout@v2
with:
ref: ${{ github.event.pull_request.head.ref }}
path: source
- name: Setup Node.js for Source Branch
uses: actions/setup-node@v3
with:
node-version: '22.x'
- name: Install Dependencies for Source Branch
run: |
cd source
npm install
- name: Run Benchmarks on Source Branch
run: |
cd source/benchmarks
make > source_results.log
- name: Save Source Results
id: save-source-results
uses: actions/upload-artifact@v2
with:
name: source-results
path: source/benchmarks/source_results.log
- name: Checkout Target Branch
uses: actions/checkout@v2
with:
ref: ${{ github.event.pull_request.base.ref }}
path: target
- name: Setup Node.js for Target Branch
uses: actions/setup-node@v3
with:
node-version: '22.x'
- name: Install Dependencies for Target Branch
run: |
cd target
npm install
- name: Run Benchmarks on Target Branch
run: |
cd target/benchmarks
make > target_results.log
- name: Save Target Results
id: save-target-results
uses: actions/upload-artifact@v2
with:
name: target-results
path: target/benchmarks/target_results.log
- name: Download Source Results
uses: actions/download-artifact@v2
with:
name: source-results
path: source-results
- name: Download Target Results
uses: actions/download-artifact@v2
with:
name: target-results
path: target-results
- name: Compare Results and Comment on PR
uses: actions/github-script@v6
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
PR_HEAD_REF: ${{ github.event.pull_request.head.ref }}
PR_BASE_REF: ${{ github.event.pull_request.base.ref }}
PR_COMMENTS_URL: ${{ github.event.pull_request.comments_url }}
with:
script: |
const fs = require('fs');
// Ensure both results files exist
if (!fs.existsSync('source-results/source_results.log') || !fs.existsSync('target-results/target_results.log')) {
console.log("Results files not found!");
return;
}
// Read results into arrays (assuming each line is a metric in the format "MetricName: Value")
const sourceResults = fs.readFileSync('source-results/source_results.log', 'utf8').split('\n');
const targetResults = fs.readFileSync('target-results/target_results.log', 'utf8').split('\n');
// Start the Markdown table
let commentBody = '### Benchmark Comparison \n\n';
commentBody += '| Metric | Source Branch Value | Target Branch Value | \n';
commentBody += '|--------|----------------------|----------------------| \n';
// Assuming the metrics are the same and in the same order for both source and target
sourceResults.forEach((line, i) => {
if (line.trim() === '') return; // Skip empty lines
const [sourceMetricName, sourceMetricValue] = line.split(':');
const targetMetricValue = targetResults[i].split(':')[1];
commentBody += `| ${sourceMetricName} | ${sourceMetricValue} | ${targetMetricValue} | \n`;
});
// Post the comment to the PR
github.rest.issues.createComment({
issue_number: context.env.PR_NUMBER,
owner: context.repo.owner,
repo: context.repo.repo,
body: commentBody,
});
continue-on-error: true
- name: Remove request-benchmarks Label
run: |
curl -s -X DELETE -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-H "Content-Type: application/json" \
"${{ github.event.pull_request.issue_url }}/labels/request-benchmarks"