PhpVersionManifest
final class PhpVersionManifest (View source)
The single decision made when refreshing tests/cache/php-versions.json: given the patch a minor line's reflection cache was last generated from and the newest patch image currently visible on Docker Hub, what should the manifest record?
Extracted from tests/check-and-update-php-versions.php so the rule can be asserted without a network round trip — the script itself is procedural CI tooling with no seam for a test.
Methods
The recorded patch must never move backwards. run-all-reflection-parsers.sh pins
php:${PHP_PATCH}-alpine from this manifest, so a regressed entry silently rebuilds a cache
from a different PHP patch than the committed one was generated from — surfacing as a large
unexplained Reflection<x.y>.json diff that reads like a legitimate refresh.
True when Docker Hub reported a patch older than the recorded one, which is a condition to warn about rather than treat as "up to date": it routinely happens when older patch tags are rebuilt (their last_updated jumps above the newest tag's, pushing that tag out of the paged search window), but it can equally mean the tag search itself broke.
Details
static string
resolveRecordedPatch(string|null $recorded, string $latest)
The recorded patch must never move backwards. run-all-reflection-parsers.sh pins
php:${PHP_PATCH}-alpine from this manifest, so a regressed entry silently rebuilds a cache
from a different PHP patch than the committed one was generated from — surfacing as a large
unexplained Reflection<x.y>.json diff that reads like a legitimate refresh.
static bool
isRegression(string|null $recorded, string $latest)
True when Docker Hub reported a patch older than the recorded one, which is a condition to warn about rather than treat as "up to date": it routinely happens when older patch tags are rebuilt (their last_updated jumps above the newest tag's, pushing that tag out of the paged search window), but it can equally mean the tag search itself broke.