Repository navigation
Enforce a Minimum Version for Every Media Tool Family - #1118
Conversation
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 28 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
|
A recorded local strict-review pass covers head |
PR Summary by QodoEnforce minimum versions for every media tool family
AI Description
Diagram
High-Level Assessment
Files changed (10)
|
Code Review by Qodo🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)
Great, no issues found!Qodo reviewed your code and found no material issues that require reviewTip of the day💡 Did you know, you can keep summaries lean with Findings visible per group, which tucks the rest behind a View link |
There was a problem hiding this comment.
🟡 Changes recommended
A critical test issue remains because non-serializable MediaTool theory arguments trigger xUnit1045 under the repository’s zero-warning build.
1 open issue
What changed in this PR
This pull request extends startup version enforcement from FFmpeg to every supported media-tool family while preserving support for unparsable nightly and development builds.
Changes:
- Adds minimum versions for HandBrake, MediaInfo, MKVToolNix, and 7-Zip.
- Adds version-gate and parser tests, updates related assertions, and logs warnings for unparsable versions.
- Replaces
p7zip-fullwith7zipin Docker and documents requirements in the README. - Review findings remain for non-serializable xUnit theory arguments, incomplete warning coverage, and the fallback for unknown tool families.
This pull request requires changes.
| File | Description |
|---|---|
README.md |
Documents minimum versions and unparsable-version handling. |
PlexCleanerTests/MinimumVersionTests.cs |
Adds minimum-version, parser, and compatibility tests. |
PlexCleaner/Tools.cs |
Logs warnings for unparsable versions during startup validation. |
PlexCleaner/SevenZipTool.cs |
Relaxes version assertions to support non-standard version strings. |
PlexCleaner/MkvMergeTool.cs |
Relaxes version assertions to validate matching patterns. |
PlexCleaner/MediaTool.cs |
Defines minimum versions for each media-tool family. |
PlexCleaner/MediaInfoTool.cs |
Relaxes version assertions for non-comparable versions. |
PlexCleaner/HandBrakeTool.cs |
Supports unparsable HandBrake nightly versions. |
PlexCleaner/FfMpegTool.cs |
Relaxes the version assertion for updated gate behavior. |
Docker/Dockerfile |
Installs the available 7zip package and updates package references. |
Review effort: Lite
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>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
A recorded local strict-review pass covers head |

Summary
Every media tool family now has a minimum version in
MediaTool.MinimumVersion, enforced by the existing startup gate inTools.VerifyToolVersions(). Per the maintainer decision on the issue, each minimum is the tool's release from around FFmpeg 8.0's release (2025-08-22), not a per-option audit.Each pick is the newest release of its tool at or before FFmpeg 8.0's release date. Apt versions were read from the Launchpad archive API and
apt-cache policyinubuntu:rolling.MediaTool.CheckVersionreturns Supported, Unsupported, or Unknown. A release version, or a release prefix such as93.0-12-g1a2b3c4, compares directly. A HandBrake nightly such as20230223192356-5c2b5d2d0-1.6.xcompares by its branch (1.6, so it is refused), and a build timestamp or a leadingyyyy-MM-ddbuild date (a gyan.dev FFmpeg git build) compares to the floor's release date. Anything else (an FFmpegN-121061-g...build) is Unknown, passes, andVerifyToolVersionslogs a warning. Ubuntu's HandBrakeCLI prints a cleanHandBrake 1.11.2(the+ds1is only in the package version).MediaTool.GetMinimum(), so each family still has one minimum entry.FfMpegTool.GetVersionkeeps the whole build string for a git build instead of recording an empty version, soSidecarUpdateOnToolChangesees a tool version change once for a git-build user after upgrading, and on each new nightly.Debug.Assertnow asserts only that the regex matched, so a nightly build no longer aborts a Debug run.Docker/Dockerfile:p7zip-fullhas no candidate onubuntu:rolling, so the image could not install a 7-Zip at all. It now installs7zip, which ships7zand meets the minimum.MinimumVersionTestscovers every tool, a refused older version and an accepted minimum per family through each family's real version parser, and the development build and Unknown cases.Review notes
ToolFamily.Nonehas no minimum by design, andMinimumVersion_EveryTool_HasMinimumfails if any listed tool lacks one.Distribution packages dropped by the raise: none on
ubuntu:rolling. Older distributions with HandBrake before 1.10, MediaInfo before 25.07, MKVToolNix before 94, or 7-Zip before 25.01 now fail the startup gate.ARCHITECTURE.mdandHISTORY.mdare not edited here by the maintainer's choice. Every doc update, HISTORY lines included, is deferred to one final docs pull request, so review findings asking for those edits are declined for that reason.Closes on promotion: #1104
🤖 Generated with Claude Code