Skip to content

Commit 97a705e

Browse files
committed
Refine release workflow benchmark handling
1 parent eab98f6 commit 97a705e

1 file changed

Lines changed: 38 additions & 9 deletions

File tree

.github/workflows/release.yml

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ jobs:
148148
rm -f "${benchmark_jar}"
149149
150150
- name: Capture benchmark environment
151+
id: benchmark-environment
152+
continue-on-error: true
151153
run: |
152154
node <<'NODE'
153155
const childProcess = require('child_process');
@@ -192,7 +194,30 @@ jobs:
192194
);
193195
NODE
194196
197+
- name: Create fallback benchmark environment
198+
if: steps.benchmark-environment.outcome == 'failure'
199+
run: |
200+
node <<'NODE'
201+
const fs = require('fs');
202+
203+
const environment = {
204+
version: process.env.BENCHMARK_VERSION,
205+
versionPath: process.env.BENCHMARK_VERSION_PATH,
206+
ref: process.env.BENCHMARK_REF,
207+
commit: process.env.BENCHMARK_COMMIT,
208+
runDate: new Date().toISOString(),
209+
workflowRunUrl: `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`,
210+
benchmarkPattern: process.env.JMH_PATTERN,
211+
jmhArgs: process.env.JMH_ARGS,
212+
environmentCaptureError: true
213+
};
214+
215+
fs.mkdirSync('target/benchmarks', { recursive: true });
216+
fs.writeFileSync('target/benchmarks/environment.json', `${JSON.stringify(environment, null, 2)}\n`);
217+
NODE
218+
195219
- name: Upload benchmark artifacts
220+
continue-on-error: true
196221
uses: actions/upload-artifact@v7
197222
with:
198223
name: benchmarks-${{ env.BENCHMARK_VERSION_PATH }}
@@ -220,7 +245,7 @@ jobs:
220245
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
221246

222247
- name: Release rollback on failure
223-
if: always() && steps.release.outcome != 'success' && hashFiles('release.properties') != ''
248+
if: always() && (failure() || steps.release.outcome != 'success') && hashFiles('release.properties') != ''
224249
run: mvn -B -U -Prelease release:rollback
225250

226251
- name: Create GitHub Release
@@ -266,17 +291,21 @@ jobs:
266291
const indexPath = path.join(siteRoot, 'benchmarks', 'index.json');
267292
268293
function getText(url) {
269-
return new Promise(resolve => {
294+
return new Promise((resolve, reject) => {
270295
const client = url.protocol === 'http:' ? http : https;
271296
const request = client.get(url, response => {
272297
if (response.statusCode >= 300 && response.statusCode < 400 && response.headers.location) {
273298
response.resume();
274-
resolve(getText(new URL(response.headers.location, url)));
299+
getText(new URL(response.headers.location, url)).then(resolve, reject);
275300
return;
276301
}
277302
if (response.statusCode < 200 || response.statusCode >= 300) {
278303
response.resume();
279-
resolve(null);
304+
if (response.statusCode === 404) {
305+
resolve(null);
306+
return;
307+
}
308+
reject(new Error(`HTTP ${response.statusCode} while fetching ${url.href}`));
280309
return;
281310
}
282311
response.setEncoding('utf8');
@@ -286,10 +315,9 @@ jobs:
286315
});
287316
response.on('end', () => resolve(data));
288317
});
289-
request.on('error', () => resolve(null));
318+
request.on('error', reject);
290319
request.setTimeout(15000, () => {
291-
request.destroy();
292-
resolve(null);
320+
request.destroy(new Error(`Timeout while fetching ${url.href}`));
293321
});
294322
});
295323
}
@@ -328,15 +356,16 @@ jobs:
328356
try {
329357
index = JSON.parse(indexText);
330358
} catch (error) {
331-
return;
359+
throw new Error(`Published benchmark index is not valid JSON: ${error.message}`);
332360
}
333361
334362
for (const release of index.releases || []) {
335363
await restoreFile(release.jmh);
336364
await restoreFile(release.environment);
337365
}
338366
})().catch(error => {
339-
console.log(`Benchmark history restore failed: ${error.message}`);
367+
console.error(`Benchmark history restore failed: ${error.message}`);
368+
process.exit(1);
340369
});
341370
NODE
342371

0 commit comments

Comments
 (0)