Skip to content

Commit b8a00ef

Browse files
committed
Removing failure condition on PR benchmarks, informative only
1 parent ec0d5df commit b8a00ef

File tree

1 file changed

+18
-41
lines changed

1 file changed

+18
-41
lines changed

.github/workflows/benchmark-pr.yml

Lines changed: 18 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,9 @@ jobs:
7575
run: |
7676
python3 << 'EOF'
7777
import json
78-
import sys
79-
import os
8078
81-
THRESHOLD = 40.0 # 40% regression threshold
82-
MIN_REGRESSIONS = 5 # Minimum number of regressions to fail
79+
REGRESSION_THRESHOLD = 40.0 # Threshold for flagging significant regressions
80+
IMPROVEMENT_THRESHOLD = 20.0 # Threshold for flagging improvements
8381
8482
def parse_benchmarks(file_path):
8583
"""Parse concatenated BenchmarkDotNet JSON files."""
@@ -132,14 +130,14 @@ jobs:
132130
'change': change_pct
133131
})
134132
135-
if change_pct > THRESHOLD:
133+
if change_pct > REGRESSION_THRESHOLD:
136134
regressions.append({
137135
'name': name,
138136
'baseline': baseline_mean,
139137
'current': current_mean,
140138
'change': change_pct
141139
})
142-
elif change_pct < -THRESHOLD:
140+
elif change_pct < -IMPROVEMENT_THRESHOLD:
143141
improvements.append({
144142
'name': name,
145143
'change': change_pct
@@ -151,28 +149,18 @@ jobs:
151149
152150
# Generate summary
153151
print(f"\nCompared {len(results)} benchmarks")
154-
print(f"Regressions (>{THRESHOLD}%): {len(regressions)}")
155-
print(f"Improvements (<-{THRESHOLD}%): {len(improvements)}")
152+
print(f"Significant regressions (>{REGRESSION_THRESHOLD}%): {len(regressions)}")
153+
print(f"Improvements (<-{IMPROVEMENT_THRESHOLD}%): {len(improvements)}")
156154
157155
if regressions:
158-
print(f"\nPerformance regressions detected:")
156+
print(f"\nBenchmarks with significant regression:")
159157
for r in sorted(regressions, key=lambda x: -x['change']):
160-
print(f" - {r['name']}: +{r['change']:.1f}% slower ({r['baseline']:.2f}ns -> {r['current']:.2f}ns)")
161-
162-
# Only fail if we have at least MIN_REGRESSIONS benchmarks regressing
163-
if len(regressions) >= MIN_REGRESSIONS:
164-
print(f"\n::error::{len(regressions)} benchmarks regressed >{THRESHOLD}% (threshold: {MIN_REGRESSIONS})")
165-
with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
166-
f.write("has_regressions=true\n")
167-
f.write(f"regression_count={len(regressions)}\n")
168-
sys.exit(1)
169-
else:
170-
if regressions:
171-
print(f"\n{len(regressions)} regression(s) detected but below threshold of {MIN_REGRESSIONS} required to fail.")
172-
else:
173-
print("\nNo significant performance regressions detected.")
174-
with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
175-
f.write("has_regressions=false\n")
158+
print(f" - {r['name']}: +{r['change']:.1f}% ({r['baseline']:.2f}ns -> {r['current']:.2f}ns)")
159+
160+
if improvements:
161+
print(f"\nBenchmarks with significant improvement:")
162+
for r in sorted(improvements, key=lambda x: x['change']):
163+
print(f" - {r['name']}: {r['change']:.1f}%")
176164
EOF
177165
178166
- name: Comment PR with benchmark results
@@ -194,24 +182,19 @@ jobs:
194182
const warnings = results.filter(r => r.change > 20 && r.change <= 40);
195183
const improvements = results.filter(r => r.change < -20);
196184
197-
if (regressions.length >= 5) {
198-
body += `:x: **${regressions.length} benchmarks regressed >40% (PR blocked)**\n\n`;
199-
} else if (regressions.length > 0) {
200-
body += `:warning: **${regressions.length} benchmark(s) regressed >40% (below threshold of 5 to block)**\n\n`;
201-
} else {
202-
body += ':white_check_mark: **No significant performance regressions detected**\n\n';
203-
}
204-
205185
if (regressions.length > 0) {
186+
body += `:warning: **${regressions.length} benchmark(s) showed significant regression (>40%)**\n\n`;
206187
body += '| Benchmark | Baseline | Current | Change |\n';
207188
body += '|-----------|----------|---------|--------|\n';
208189
for (const r of regressions.slice(0, 10)) {
209190
const shortName = r.name.split('.').slice(-2).join('.');
210-
body += `| ${shortName} | ${r.baseline.toFixed(2)}ns | ${r.current.toFixed(2)}ns | :x: +${r.change.toFixed(1)}% |\n`;
191+
body += `| ${shortName} | ${r.baseline.toFixed(2)}ns | ${r.current.toFixed(2)}ns | :warning: +${r.change.toFixed(1)}% |\n`;
211192
}
212193
if (regressions.length > 10) {
213-
body += `\n*...and ${regressions.length - 10} more regressions*\n`;
194+
body += `\n*...and ${regressions.length - 10} more*\n`;
214195
}
196+
} else {
197+
body += ':white_check_mark: **No significant performance regressions detected**\n\n';
215198
}
216199
217200
if (warnings.length > 0) {
@@ -275,9 +258,3 @@ jobs:
275258
pr-results/
276259
src/LightningDB.Benchmarks/BenchmarkDotNet.Artifacts/results/
277260
retention-days: 14
278-
279-
- name: Fail if regressions detected
280-
if: steps.compare.outputs.has_regressions == 'true'
281-
run: |
282-
echo "::error::PR blocked: 5+ benchmarks regressed more than 40%"
283-
exit 1

0 commit comments

Comments
 (0)