mirror of
https://github.com/Comfy-Org/comfyci-runpod-worker.git
synced 2026-11-04 23:47:32 +00:00
[PR #2] [MERGED] Shrink the results checkout and make comparison figures deduplicate #1
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Comfy-Org/comfyci-runpod-worker#1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/Comfy-Org/comfyci-runpod-worker/pull/2
Author: @marawan206
Created: 10/5/2026
Status: ✅ Merged
Merged: 10/8/2026
Merged by: @alexisrolland
Base:
main← Head:storage-hygiene📝 Commits (3)
b40f424Use a blobless sparse checkout for the results branch and regenerate derived files on push retry0d98b28Make comparison figures content-addressable and skip them for inherited failuresdad058fKeep worker error details and fix delay units in run records📊 Changes
14 files changed (+626 additions, -42 deletions)
View changed files
📝
.github/workflows/regression.yml(+1 -1)➕
.github/workflows/scripts-tests.yml(+22 -0)📝
.gitignore(+1 -0)📝
README.md(+19 -0)📝
scripts/compare.py(+16 -5)📝
scripts/gcs_publish.py(+5 -0)📝
scripts/run_regression.py(+71 -17)📝
scripts/storage.py(+163 -16)📝
scripts/submit_and_poll.py(+30 -3)➕
scripts/tests/conftest.py(+5 -0)➕
scripts/tests/test_compare.py(+55 -0)➕
scripts/tests/test_run_regression.py(+42 -0)➕
scripts/tests/test_storage.py(+128 -0)➕
scripts/tests/test_submit_and_poll.py(+68 -0)📄 Description
Why
Three things were growing or fragile on the results branch:
GitHubStorage.finalizerecovered from a rejected push by byte-restoring the files it had written, which would silently clobber any shared aggregate file (needed for the upcoming run index).What
storage.py: blobless partial clone + cone sparse-checkout of the small aggregate directories; run directories are materialised on first use, behind a lock (the orchestrator reads and writes from worker threads). Derived writers (register_derived) regenerate aggregate files from the newest remote tree inside the push retry loop (8 attempts, jittered); a failing writer is a warning and its partial output is discarded, primary results always land. A fetch failure other than "branch does not exist" is fatal instead of publishing against an empty tree; staging uses--sparse.list_json/read_blob_jsonread committed files through git without checking them out; the GCS backend gets the matching list helper.compare.py: stable figure titles (golden <tag>/previousvscandidate), no matplotlib Software metadata, reuse of precomputed metrics,figures=Falseswitch.run_regression.py: compares against the previous tested run first and classifies a failure vs golden asnew_drift(outputs changed at this commit) orinherited(bit-identical to a previous run that already failed against the same golden); inherited failures skip the golden figures and say so (figures: false). Summaries gainschema_version: 2,has_infra_error, and per-workflowdetail,previous_verdict,figures,output_sha256.run.jsonno longer leaks the runner-localoutputs_dir.submit_and_poll.py: keeps the handler's error detail (the RunPod SDK lifts it to the job level as a JSON string; publishedrun.jsonfiles showederror: null), recordsdelay_msand a converteddelay_s, classifiesbad_requestas infrastructure without retrying it.regression.yml: the skip check fetches blobless too.scripts/tests(pytest, 16 tests) and aScript testsworkflow (read-only token).All new fields are additive; the 230 existing runs and both goldens are untouched.
Verification
python -m pytest scripts/tests -q: storage backend against a local bare repo (sparse materialisation, two concurrent publishers both landing their derived files, failing derived writer never blocks primary results, fatal fetch errors, first publish to a missing branch), figure byte-identity for identical candidates, drift classification, error decoding / delay units / no retry forbad_request.figures/for the inherited FLUX failure, and the runner log should show a sub-second checkout instead of a ~775 MB one.Stacked: this PR, then #3, then #4.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.