fix(oci): render arm64 platform description without redundant v8 - #783
fix(oci): render arm64 platform description without redundant v8#783Halvanhelv wants to merge 1 commit into
Conversation
1e8f0c7 to
7eb0c7d
Compare
|
Thanks for the change! Can you please rebase the change before we merge |
7eb0c7d to
05af1ac
Compare
Done |
adityaramani
left a comment
There was a problem hiding this comment.
LGTM! Only nit I have is do we need to remove the references to the issues in the code. Will wait for another maintainer to weigh in
Great, I'll try to delete it quickly if that's the decision |
|
@Halvanhelv Yep, go ahead and take the issue reference in the test comment and we'll build, approve, and merge. Thank you! |
jglogan
left a comment
There was a problem hiding this comment.
Just the issue comment, otherwise looks good.
05af1ac to
20816d0
Compare
`Platform.description` rendered the same arm64 platform two different ways depending on how the value was constructed: `linux/arm64` when the variant was `nil`, and `linux/arm64/v8` when the variant was set to `"v8"`. These are the same platform — `==`, `hash`, and Set membership already treat an arm64 `nil` variant as equivalent to `"v8"` — so two equal values produced different descriptions and drifted between `arm64` and `arm64/v8` across stages of a single build (apple/container#1542). Omit the redundant `v8` variant for arm64 so equal platforms always describe as `linux/arm64`, matching how Docker and containerd display it. Only the rendered description changes; the stored variant and Codable encoding are untouched, so OCI content digests remain stable.
59f2d1e to
ac63cf2
Compare
done |
Summary
Platform.descriptionrenders the same arm64 platform two different waysdepending on how the value was constructed:
These are the same platform —
==,hash(into:), andSetmembershipalready treat an arm64
nilvariant as equivalent to"v8"— yet theyserialize differently, so a single platform drifts between
linux/arm64andlinux/arm64/v8across stages of one build (apple/container#1542).Relation to #764
#764 fixed the
Hashableside of this: it stoppedhash(into:)from usingdescriptionand canonicalized arm64nil→v8in the hash. That workedaround the inconsistent
descriptionbut did not fix it — its own summarynames
description(linux/arm64vslinux/arm64/v8) as the root cause.This PR fixes that remaining gap at the source.
Change
Omit the redundant
v8variant for arm64 when renderingdescription, soequal arm64 platforms always describe as
linux/arm64— matching how Dockerand containerd display the platform. Other variants (
arm/v7) andarchitectures (
amd64) are unaffected.Only the rendered
descriptionchanges. The storedvariantand theCodableencoding are untouched, so OCI content digests remain stable.Testing
Added
OCIPlatformTestscases for description consistency (equal arm64platforms describe identically;
arm64/v8renders aslinux/arm64;arm/v7andamd64preserved).swift test --filter ContainerizationOCITestspasses (55 tests);
swift format lint --strictclean.Closes apple/container#1542 (normalization-consistency aspect).