Repository navigation
Run the Regression Harness on a Local Branch Image - #1200
Conversation
A tag holding a colon names a local image, which the harness runs without a pull, so a branch gets a regression run before any published image carries it. The harness refuses a local image still carrying the default version label, and records the run under a local channel so no develop run picker selects it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 42 minutes. View limit details
No actionable comments were generated in the recent review. Walkthrough
Merge Risk:
|
|
A recorded local strict-review pass covers head |
PR Summary by QodoRun regression tests against locally built branch images
AI Description
Diagram
High-Level Assessment
Files changed (3)
|
Code Review by Qodo
1.
|
There was a problem hiding this comment.
🟡 Changes recommended
A moderate active finding shows digest-pinned published repository references are misclassified as local images, causing the regression harness to skip required pull and plugin-build checks.
1 open issue
What changed in this PR
This pull request enables the regression harness to run locally built branch images before publication while preserving published-image behavior and result tracking.
Changes:
- Supports local image references without pulling them.
- Records local-run metadata, validates version labels, and skips plugin builds for local images.
- Refactors internal functions to use a complete image reference.
- Updates the regression README and operations runbook.
- Outstanding issues remain around digest-pinned references, the valid published
localtag, and tag-only README wording.
| File | Review summary |
|---|---|
RegressionTests/regression-test.sh |
Adds local-image handling and image-reference normalization. Two moderate P1 issues remain: digest-pinned published references can be misclassified as local, and the published local tag conflicts with the local-image sentinel. |
RegressionTests/README.md |
Documents local image usage, labels, channels, and result directories. A P2 documentation issue remains because some sections still describe inputs only as Docker tags. |
OPERATIONS.md |
Updates the regression-testing runbook for published and locally built images. |
This pull request requires changes.
Review effort: Lite
…abel Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
A recorded local strict-review pass covers head |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
A recorded local strict-review pass covers head |

The regression harness always ran
docker pull docker.io/ptr727/plexcleaner:<tag>. So a branch could only get a regression run after it merged and a develop build published it. #1192 and #1193 each need a run before they merge, so this lets the harness run a locally built branch image.tagholding a colon names a local image reference, such asplexcleaner:local, because no Docker tag can contain a colon. It runs without a pull, records"Channel": "local"inbuildinfo.json, and skips the plugin builds. A plugin builds from the release tag its image version names, and a branch build has no release tag.find_runmatchesChannelexactly, so a tool picking the newestdeveloprun never picks a local one.docker.io/ptr727/plexcleaner:Xandptr727/plexcleaner:Xrun as the tagX, so they keep their channel and results directory. A digest reference,[docker.io/]ptr727/plexcleaner@sha256:<digest>, runs as published and pulls by digest.mkdir,cp, andchown -R, so it must be a plain name,^[0-9A-Za-z][0-9A-Za-z._+-]*$. That also keeps a quote out of thebuildinfo.jsonheredoc. A local image's label must also be a commit hash,^[0-9a-f]{7,40}$. That refuses the Dockerfile default1.0.0.0, which every unlabelled build would share, and any published version, which always holds a dot. So a local run never lands in a published build's results directory. The README has you commit first, then build with--build-arg LABEL_VERSION=$(git rev-parse --short=10 HEAD). The results directory is then the commit, andgit rev-parse <version>^{commit}resolves it the same way it resolves a published run's tag.Tagparameter in favor of oneImageRef, and their signature comments change to match. The PR carries thecommentslabel for that reason.Verification:
shellcheckandshfmt -dare clean, and so areprose_lint.py --diff origin/develop --allow-commentsandmarkdownlint-cli2.--helpand the unknown-argument refusal are unchanged.docker,zfs,git,dotnet,id, and filesystem writes, withHostConfigredirected to a scratch directory. A local image skips the pull and the plugins, and recordsChannel: localand its own reference. Both published reference spellings pulldocker.io/ptr727/plexcleaner:<tag>and record the tag as their channel. A digest reference pulls by digest. A missing local image, a local image labelled with the default or a published version, and a label such as../..each exit 1.Findings from the local review
introduced, fixed in e63ca3b: a digest-pinned published reference ran as local. Copilot and Qodo raised it too.pre-existing, declined: an image the harness runs can plant a symlink in a results directory through the existing read-write--volume "$HostConfig:$ConfigPath:rw"mount. A later rootcpor redirect then writes through it. The mount, thecp, and the redirect all predate this change. Running an image already trusts its code with read-write media and results mounts, so a malicious image is outside the harness's threat model, perGOVERNANCE.md"Trust Boundaries and Hardening Effort".WriteBuildInfoand thedocker runcalls. That would need the maintainer to retag an image on his own host mid-run, which the same section rules out guarding.Local review: 5
agent-skillpasses at thefrontiertier, the last over content digest021d935ac4c5.🤖 Generated with Claude Code