Repository navigation
feat: run summary in the workflow, and keep raw results when the agent fails - #17
Merged
Merged
Conversation
…the agent fails collect now downloads the raw directory of every benchmark it has not downloaded yet before it exits on an agent failure (and before it tears down a cancelled run), so the workflow's raw artifact keeps them. The cleanup job of run.yaml now needs every job before it.
perfkit summary --report <file> prints a report.json as GitHub Markdown: the run, each benchmark's verdict and reason, the capacity limit and steps, and the soak rules and p99 by hour. run.yaml appends it to $GITHUB_STEP_SUMMARY, or a note naming the raw artifact when no report was written.
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two changes for calibration runs, which will be read in the workflow run instead of on the website.
Results in the GitHub run summary
perfkit summary --report <report.json>prints the report as GitHub Markdown. It covers the run id, the target version and commit, the overall verdict and each benchmark's verdict, with the reason when a benchmark is inconclusive, aborted or not run.okor the stop reason.run.yaml:finishappendsperfkit summaryto$GITHUB_STEP_SUMMARYwhenreport.jsonexists. Otherwise it writes a note that names the artifact holding the raw results. A failedwait-*job writes the same kind of note.src/summary/folder.src/renderis unchanged; the summary does its own Markdown and number formatting.Keep raw results when the agent fails
In Routr's run 41898433488 the agent failed near the end (
Maximum call stack size exceeded, exit 3). The soak had nodonemarker, socollectnever downloaded its raw results. The upload found noraw/directory, and the cleanup job then deleted the droplets: 6.5 h of raw data was lost.collectnow downloads the raw directory of every benchmark it has not downloaded yet, as it is, before it exits on an agent failure. This works with--wait(nothing is deleted) and without it (before teardown). It does the same before it tears down a cancelled run. Each one prints[<id>] downloaded the partial raw results to <dir>.donemarker, so it never counts as finished and the report's verdicts don't change.src/orchestrate/downloadPartialRaw.ts. It lists the load generator'sraw/directory and keeps only names that are valid benchmark ids.run.yaml: eachwait-*job already uploadedperfkit-raw-<id>withif: always(), inside the job and beforecleanup.cleanupnow listsneeds: [start, wait-1, wait-2, finish]explicitly, so it can only start after every upload.Compatibility
Tests
npm test: 478 passing. This adds tests for every summary function (including the validation failure), forperfkit summaryinrunCli, fordownloadPartialRaw, and threecreateCollecttests for the agent-failed path:--wait: the soak's partial raw results are downloaded, nothing is deleted, exit 3;--wait: the raw results are on disk when teardown runs;createCollectdownload tests fail without the fix.npm run typecheckandnpm run lintare clean.🤖 Generated with Claude Code