From ac0e47458edd971b17073d2464b3b703e9ef659b Mon Sep 17 00:00:00 2001 From: Nachiket Roy Date: Mon, 15 Jun 2026 17:03:58 +0530 Subject: [PATCH] feat: add s390x and ppc64le support --- buildpack_integration_test.go | 8 +++++++ images.json | 2 +- metadata_test.go | 40 +++++++++++++++++++++++++++++------ stack/stack.toml | 38 ++++++++++++++++++++++++++++++++- 4 files changed, 79 insertions(+), 9 deletions(-) diff --git a/buildpack_integration_test.go b/buildpack_integration_test.go index fd1eb320..c18d73d6 100644 --- a/buildpack_integration_test.go +++ b/buildpack_integration_test.go @@ -91,6 +91,14 @@ func testBuildpackIntegration(t *testing.T, context spec.G, it spec.S) { [[targets]] arch = "arm64" os = "linux" + +[[targets]] + arch = "s390x" + os = "linux" + +[[targets]] + arch = "ppc64le" + os = "linux" `, stack.BuildImageID, stack.RunImageID, diff --git a/images.json b/images.json index 5064300f..3d4f3e4c 100644 --- a/images.json +++ b/images.json @@ -1,7 +1,7 @@ { "support_usns": true, "receipts_show_limit": 16, - "platforms": ["linux/amd64", "linux/arm64"], + "platforms": ["linux/amd64", "linux/arm64", "linux/s390x", "linux/ppc64le"], "os_name": "ubuntu", "os_codename": "jammy", "repo_type": "stack", diff --git a/metadata_test.go b/metadata_test.go index a1ccf5b8..3ed7c660 100644 --- a/metadata_test.go +++ b/metadata_test.go @@ -57,7 +57,7 @@ func testMetadata(t *testing.T, context spec.G, it spec.S) { indexManifest, err := index.IndexManifest() Expect(err).NotTo(HaveOccurred()) - Expect(indexManifest.Manifests).To(HaveLen(2)) + Expect(indexManifest.Manifests).To(HaveLen(4)) platforms := []v1.Platform{} for _, manifest := range indexManifest.Manifests { @@ -74,6 +74,14 @@ func testMetadata(t *testing.T, context spec.G, it spec.S) { OS: "linux", Architecture: "arm64", })) + Expect(platforms).To(ContainElement(v1.Platform{ + OS: "linux", + Architecture: "s390x", + })) + Expect(platforms).To(ContainElement(v1.Platform{ + OS: "linux", + Architecture: "ppc64le", + })) image, err := index.Image(indexManifest.Manifests[0].Digest) Expect(err).NotTo(HaveOccurred()) @@ -155,7 +163,7 @@ func testMetadata(t *testing.T, context spec.G, it spec.S) { indexManifest, err := index.IndexManifest() Expect(err).NotTo(HaveOccurred()) - Expect(indexManifest.Manifests).To(HaveLen(2)) + Expect(indexManifest.Manifests).To(HaveLen(4)) platforms := []v1.Platform{} for _, manifest := range indexManifest.Manifests { platforms = append(platforms, v1.Platform{ @@ -171,6 +179,14 @@ func testMetadata(t *testing.T, context spec.G, it spec.S) { OS: "linux", Architecture: "arm64", })) + Expect(platforms).To(ContainElement(v1.Platform{ + OS: "linux", + Architecture: "s390x", + })) + Expect(platforms).To(ContainElement(v1.Platform{ + OS: "linux", + Architecture: "ppc64le", + })) image, err := index.Image(indexManifest.Manifests[0].Digest) Expect(err).NotTo(HaveOccurred()) @@ -214,7 +230,9 @@ func testMetadata(t *testing.T, context spec.G, it spec.S) { MatchRegexp("Version: [0-9]+ubuntu[0-9\\.]+"), SatisfyAny( ContainSubstring("Architecture: amd64"), - ContainSubstring("Architecture: arm64")), + ContainSubstring("Architecture: arm64"), + ContainSubstring("Architecture: s390x"), + ContainSubstring("Architecture: ppc64le")), ))) Expect(image).To(HaveFileWithContent("/var/lib/dpkg/info/base-files.list", SatisfyAll( @@ -240,7 +258,9 @@ func testMetadata(t *testing.T, context spec.G, it spec.S) { MatchRegexp("Version: [0-9\\.\\-]+ubuntu[0-9\\.]+"), SatisfyAny( ContainSubstring("Architecture: amd64"), - ContainSubstring("Architecture: arm64")), + ContainSubstring("Architecture: arm64"), + ContainSubstring("Architecture: s390x"), + ContainSubstring("Architecture: ppc64le")), ))) Expect(image).To(HaveFileWithContent("/var/lib/dpkg/info/libc6.list", SatisfyAll( @@ -254,7 +274,9 @@ func testMetadata(t *testing.T, context spec.G, it spec.S) { MatchRegexp("Version: [0-9\\.\\-]+ubuntu[0-9\\.]+"), SatisfyAny( ContainSubstring("Architecture: amd64"), - ContainSubstring("Architecture: arm64")), + ContainSubstring("Architecture: arm64"), + ContainSubstring("Architecture: s390x"), + ContainSubstring("Architecture: ppc64le")), ))) Expect(image).To(HaveFileWithContent("/var/lib/dpkg/info/libssl3.list", SatisfyAll( @@ -280,7 +302,9 @@ func testMetadata(t *testing.T, context spec.G, it spec.S) { MatchRegexp("Version: [0-9\\.\\-]+ubuntu[0-9\\.]+"), SatisfyAny( ContainSubstring("Architecture: amd64"), - ContainSubstring("Architecture: arm64")), + ContainSubstring("Architecture: arm64"), + ContainSubstring("Architecture: s390x"), + ContainSubstring("Architecture: ppc64le")), ))) Expect(image).To(HaveFileWithContent("/var/lib/dpkg/info/openssl.list", SatisfyAll( @@ -306,7 +330,9 @@ func testMetadata(t *testing.T, context spec.G, it spec.S) { MatchRegexp("Version: [a-z0-9\\.\\-\\:]+ubuntu[0-9\\.]+"), SatisfyAny( ContainSubstring("Architecture: amd64"), - ContainSubstring("Architecture: arm64")), + ContainSubstring("Architecture: arm64"), + ContainSubstring("Architecture: s390x"), + ContainSubstring("Architecture: ppc64le")), ))) Expect(image).To(HaveFileWithContent("/var/lib/dpkg/info/zlib1g.list", SatisfyAll( diff --git a/stack/stack.toml b/stack/stack.toml index d3a4c4d1..c534c9d9 100644 --- a/stack/stack.toml +++ b/stack/stack.toml @@ -2,7 +2,7 @@ id = "io.buildpacks.stacks.jammy.tiny" homepage = "https://github.com/paketo-buildpacks/jammy-tiny-stack" maintainer = "Paketo Buildpacks" -platforms = ["linux/amd64", "linux/arm64"] +platforms = ["linux/amd64", "linux/arm64", "linux/s390x", "linux/ppc64le"] [build] description = "ubuntu:jammy with compilers and shell utilities" @@ -47,6 +47,24 @@ platforms = ["linux/amd64", "linux/arm64"] deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main universe multiverse """ + [build.platforms."linux/s390x".args] + architecture = "s390x" + + sources = """ + deb http://ports.ubuntu.com/ubuntu-ports/ jammy main universe multiverse + deb http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main universe multiverse + deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main universe multiverse + """ + + [build.platforms."linux/ppc64le".args] + architecture = "ppc64le" + + sources = """ + deb http://ports.ubuntu.com/ubuntu-ports/ jammy main universe multiverse + deb http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main universe multiverse + deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main universe multiverse + """ + [run] description = "distroless-like jammy" dockerfile = "./run/run.Dockerfile" @@ -78,3 +96,21 @@ platforms = ["linux/amd64", "linux/arm64"] deb http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main universe multiverse deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main universe multiverse """ + + [run.platforms."linux/s390x".args] + architecture = "s390x" + + sources = """ + deb http://ports.ubuntu.com/ubuntu-ports/ jammy main universe multiverse + deb http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main universe multiverse + deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main universe multiverse + """ + + [run.platforms."linux/ppc64le".args] + architecture = "ppc64le" + + sources = """ + deb http://ports.ubuntu.com/ubuntu-ports/ jammy main universe multiverse + deb http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main universe multiverse + deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main universe multiverse + """