diff --git a/internal/cli/publish_test.go b/internal/cli/publish_test.go index c9b1a0ced..4416100f7 100644 --- a/internal/cli/publish_test.go +++ b/internal/cli/publish_test.go @@ -101,7 +101,7 @@ func TestPublish(t *testing.T) { // This test will fail if we ever make a change in apko that changes the image. // Sometimes, this is intentional, and we need to change this and bump the version. - want := "sha256:1cc2a29f39af74ad432a283ee466dd43130dd9292e49f18baaaa3d890a857347" + want := "sha256:209d938840c9ecea442fc15db054aec5e6677c13393f7389e0069913151536f6" require.Equal(t, want, digest.String()) // Check that the sbomPath is not empty. @@ -177,7 +177,7 @@ func TestPublishLayering(t *testing.T) { // This test will fail if we ever make a change in apko that changes the image. // Sometimes, this is intentional, and we need to change this and bump the version. - want := "sha256:f5dc65ebea1afb5693ec323d6fdfa4b899a0c73af634d776a88bd44852d4216c" + want := "sha256:2c0fb0050fb586711d10d3d0b2b3858e02c45e6c894da5348cf7be87de3a4eb1" require.Equal(t, want, digest.String()) im, err := idx.IndexManifest() diff --git a/internal/cli/testdata/golden/blobs/sha256/124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858 b/internal/cli/testdata/golden/blobs/sha256/124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858 deleted file mode 100644 index 3e131dfbc..000000000 --- a/internal/cli/testdata/golden/blobs/sha256/124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858 +++ /dev/null @@ -1 +0,0 @@ -{"schemaVersion":2,"mediaType":"application/vnd.oci.image.manifest.v1+json","config":{"mediaType":"application/vnd.oci.image.config.v1+json","size":658,"digest":"sha256:fbb854f9d5a601a36c4dc8cc82e5b21e91b11cdd4aab5035340e4f517c5a8eb1"},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar+gzip","size":3079,"digest":"sha256:7e0f9d62f6cab4785e18a55f17d03f20ffb776881f1f46258efd9458f7cdaf08"}],"annotations":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z","org.opencontainers.image.title":"Title","org.opencontainers.image.vendor":"Vendor"}} \ No newline at end of file diff --git a/internal/cli/testdata/golden/blobs/sha256/fbb854f9d5a601a36c4dc8cc82e5b21e91b11cdd4aab5035340e4f517c5a8eb1 b/internal/cli/testdata/golden/blobs/sha256/270f5467dc529c2edaa0d5173f0756da04eccfd12f53e1c5267e3231a4ffbe41 similarity index 80% rename from internal/cli/testdata/golden/blobs/sha256/fbb854f9d5a601a36c4dc8cc82e5b21e91b11cdd4aab5035340e4f517c5a8eb1 rename to internal/cli/testdata/golden/blobs/sha256/270f5467dc529c2edaa0d5173f0756da04eccfd12f53e1c5267e3231a4ffbe41 index cafd71a39..29a4156c9 100644 --- a/internal/cli/testdata/golden/blobs/sha256/fbb854f9d5a601a36c4dc8cc82e5b21e91b11cdd4aab5035340e4f517c5a8eb1 +++ b/internal/cli/testdata/golden/blobs/sha256/270f5467dc529c2edaa0d5173f0756da04eccfd12f53e1c5267e3231a4ffbe41 @@ -1 +1 @@ -{"architecture":"arm64","author":"github.com/chainguard-dev/apko","created":"1970-01-01T00:00:00Z","history":[{"author":"apko","created":"1970-01-01T00:00:00Z","created_by":"apko","comment":"Title by Vendor"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:ca5e16c7c944d764863cb1a4286e668e72d6d87ef9ddd82337b19d87715bae7e"]},"config":{"Entrypoint":["/bin/sh","-l"],"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin","SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt"],"Labels":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z","org.opencontainers.image.title":"Title","org.opencontainers.image.vendor":"Vendor"}}} \ No newline at end of file +{"architecture":"arm64","author":"github.com/chainguard-dev/apko","created":"1970-01-01T00:00:00Z","history":[{"author":"apko","created":"1970-01-01T00:00:00Z","created_by":"apko","comment":"Title by Vendor"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:c11431cd0f01e2f3046c0e43371e8c9abd2dcb2be0152e28484c1af133834bd3"]},"config":{"Entrypoint":["/bin/sh","-l"],"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin","SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt"],"Labels":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z","org.opencontainers.image.title":"Title","org.opencontainers.image.vendor":"Vendor"}}} \ No newline at end of file diff --git a/internal/cli/testdata/golden/blobs/sha256/32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640 b/internal/cli/testdata/golden/blobs/sha256/32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640 new file mode 100644 index 000000000..adb8921ca --- /dev/null +++ b/internal/cli/testdata/golden/blobs/sha256/32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640 @@ -0,0 +1 @@ +{"schemaVersion":2,"mediaType":"application/vnd.oci.image.manifest.v1+json","config":{"mediaType":"application/vnd.oci.image.config.v1+json","size":658,"digest":"sha256:270f5467dc529c2edaa0d5173f0756da04eccfd12f53e1c5267e3231a4ffbe41"},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar+gzip","size":3085,"digest":"sha256:eb39d585629f6f13753cffa93714c16e45aa7c806cf4fa3662d4725d18425fad"}],"annotations":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z","org.opencontainers.image.title":"Title","org.opencontainers.image.vendor":"Vendor"}} \ No newline at end of file diff --git a/internal/cli/testdata/golden/blobs/sha256/36f58cd88d06783d4b3adb510e43d476a75b6985cc11e0bae09b7ddcf887c0ec b/internal/cli/testdata/golden/blobs/sha256/36f58cd88d06783d4b3adb510e43d476a75b6985cc11e0bae09b7ddcf887c0ec new file mode 100644 index 000000000..e4739d60c Binary files /dev/null and b/internal/cli/testdata/golden/blobs/sha256/36f58cd88d06783d4b3adb510e43d476a75b6985cc11e0bae09b7ddcf887c0ec differ diff --git a/internal/cli/testdata/golden/blobs/sha256/69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4 b/internal/cli/testdata/golden/blobs/sha256/69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4 deleted file mode 100644 index b08eaa114..000000000 --- a/internal/cli/testdata/golden/blobs/sha256/69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4 +++ /dev/null @@ -1 +0,0 @@ -{"schemaVersion":2,"mediaType":"application/vnd.oci.image.manifest.v1+json","config":{"mediaType":"application/vnd.oci.image.config.v1+json","size":658,"digest":"sha256:6c815259150f37d000417f9a93f41bddf74dff905c745986069d4b03e954ac1d"},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar+gzip","size":3072,"digest":"sha256:c7557730da0e2d7fb242d8d1ac6dcf7e3a2439732aa5981270b4f3a02454b738"}],"annotations":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z","org.opencontainers.image.title":"Title","org.opencontainers.image.vendor":"Vendor"}} \ No newline at end of file diff --git a/internal/cli/testdata/golden/blobs/sha256/7e0f9d62f6cab4785e18a55f17d03f20ffb776881f1f46258efd9458f7cdaf08 b/internal/cli/testdata/golden/blobs/sha256/7e0f9d62f6cab4785e18a55f17d03f20ffb776881f1f46258efd9458f7cdaf08 deleted file mode 100644 index 493f79b37..000000000 Binary files a/internal/cli/testdata/golden/blobs/sha256/7e0f9d62f6cab4785e18a55f17d03f20ffb776881f1f46258efd9458f7cdaf08 and /dev/null differ diff --git a/internal/cli/testdata/golden/blobs/sha256/c7557730da0e2d7fb242d8d1ac6dcf7e3a2439732aa5981270b4f3a02454b738 b/internal/cli/testdata/golden/blobs/sha256/c7557730da0e2d7fb242d8d1ac6dcf7e3a2439732aa5981270b4f3a02454b738 deleted file mode 100644 index 4d94d7bbb..000000000 Binary files a/internal/cli/testdata/golden/blobs/sha256/c7557730da0e2d7fb242d8d1ac6dcf7e3a2439732aa5981270b4f3a02454b738 and /dev/null differ diff --git a/internal/cli/testdata/golden/blobs/sha256/6c815259150f37d000417f9a93f41bddf74dff905c745986069d4b03e954ac1d b/internal/cli/testdata/golden/blobs/sha256/da5813653efaae5464c67846efcf135aabe7f053efc515434bc65b5d9891fc9c similarity index 80% rename from internal/cli/testdata/golden/blobs/sha256/6c815259150f37d000417f9a93f41bddf74dff905c745986069d4b03e954ac1d rename to internal/cli/testdata/golden/blobs/sha256/da5813653efaae5464c67846efcf135aabe7f053efc515434bc65b5d9891fc9c index e850efd3a..ef0cc67e0 100644 --- a/internal/cli/testdata/golden/blobs/sha256/6c815259150f37d000417f9a93f41bddf74dff905c745986069d4b03e954ac1d +++ b/internal/cli/testdata/golden/blobs/sha256/da5813653efaae5464c67846efcf135aabe7f053efc515434bc65b5d9891fc9c @@ -1 +1 @@ -{"architecture":"amd64","author":"github.com/chainguard-dev/apko","created":"1970-01-01T00:00:00Z","history":[{"author":"apko","created":"1970-01-01T00:00:00Z","created_by":"apko","comment":"Title by Vendor"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:20f698463c2755b6dc42b7d07e959ed7455a06e7367d507e829a315898f21a01"]},"config":{"Entrypoint":["/bin/sh","-l"],"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin","SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt"],"Labels":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z","org.opencontainers.image.title":"Title","org.opencontainers.image.vendor":"Vendor"}}} \ No newline at end of file +{"architecture":"amd64","author":"github.com/chainguard-dev/apko","created":"1970-01-01T00:00:00Z","history":[{"author":"apko","created":"1970-01-01T00:00:00Z","created_by":"apko","comment":"Title by Vendor"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:b1499bfee6eb2f1f4ace628e58ee5dc91d9de4b1fb0e175266b4473e04030c93"]},"config":{"Entrypoint":["/bin/sh","-l"],"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin","SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt"],"Labels":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z","org.opencontainers.image.title":"Title","org.opencontainers.image.vendor":"Vendor"}}} \ No newline at end of file diff --git a/internal/cli/testdata/golden/blobs/sha256/ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58 b/internal/cli/testdata/golden/blobs/sha256/ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58 new file mode 100644 index 000000000..a866838c9 --- /dev/null +++ b/internal/cli/testdata/golden/blobs/sha256/ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58 @@ -0,0 +1 @@ +{"schemaVersion":2,"mediaType":"application/vnd.oci.image.manifest.v1+json","config":{"mediaType":"application/vnd.oci.image.config.v1+json","size":658,"digest":"sha256:da5813653efaae5464c67846efcf135aabe7f053efc515434bc65b5d9891fc9c"},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar+gzip","size":3077,"digest":"sha256:36f58cd88d06783d4b3adb510e43d476a75b6985cc11e0bae09b7ddcf887c0ec"}],"annotations":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z","org.opencontainers.image.title":"Title","org.opencontainers.image.vendor":"Vendor"}} \ No newline at end of file diff --git a/internal/cli/testdata/golden/blobs/sha256/eb39d585629f6f13753cffa93714c16e45aa7c806cf4fa3662d4725d18425fad b/internal/cli/testdata/golden/blobs/sha256/eb39d585629f6f13753cffa93714c16e45aa7c806cf4fa3662d4725d18425fad new file mode 100644 index 000000000..84d76035a Binary files /dev/null and b/internal/cli/testdata/golden/blobs/sha256/eb39d585629f6f13753cffa93714c16e45aa7c806cf4fa3662d4725d18425fad differ diff --git a/internal/cli/testdata/golden/index.json b/internal/cli/testdata/golden/index.json index efc5d8527..e1c0664f2 100755 --- a/internal/cli/testdata/golden/index.json +++ b/internal/cli/testdata/golden/index.json @@ -1 +1 @@ -{"schemaVersion":2,"mediaType":"application/vnd.oci.image.index.v1+json","manifests":[{"mediaType":"application/vnd.oci.image.manifest.v1+json","size":560,"digest":"sha256:69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4","platform":{"architecture":"amd64","os":"linux"},"artifactType":"application/vnd.oci.image.config.v1+json"},{"mediaType":"application/vnd.oci.image.manifest.v1+json","size":560,"digest":"sha256:124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858","platform":{"architecture":"arm64","os":"linux"},"artifactType":"application/vnd.oci.image.config.v1+json"}],"annotations":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z","org.opencontainers.image.title":"Title","org.opencontainers.image.vendor":"Vendor"}} \ No newline at end of file +{"schemaVersion":2,"mediaType":"application/vnd.oci.image.index.v1+json","manifests":[{"mediaType":"application/vnd.oci.image.manifest.v1+json","size":560,"digest":"sha256:ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58","platform":{"architecture":"amd64","os":"linux"},"artifactType":"application/vnd.oci.image.config.v1+json"},{"mediaType":"application/vnd.oci.image.manifest.v1+json","size":560,"digest":"sha256:32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640","platform":{"architecture":"arm64","os":"linux"},"artifactType":"application/vnd.oci.image.config.v1+json"}],"annotations":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z","org.opencontainers.image.title":"Title","org.opencontainers.image.vendor":"Vendor"}} \ No newline at end of file diff --git a/internal/cli/testdata/golden/sboms/sbom-aarch64.spdx.json b/internal/cli/testdata/golden/sboms/sbom-aarch64.spdx.json index 6094eb0cd..f2fee0c37 100644 --- a/internal/cli/testdata/golden/sboms/sbom-aarch64.spdx.json +++ b/internal/cli/testdata/golden/sboms/sbom-aarch64.spdx.json @@ -1,6 +1,6 @@ { "SPDXID": "SPDXRef-DOCUMENT", - "name": "sbom-sha256:7e0f9d62f6cab4785e18a55f17d03f20ffb776881f1f46258efd9458f7cdaf08", + "name": "sbom-sha256:eb39d585629f6f13753cffa93714c16e45aa7c806cf4fa3662d4725d18425fad", "spdxVersion": "SPDX-2.3", "creationInfo": { "created": "1970-01-01T00:00:00Z", @@ -13,13 +13,13 @@ "dataLicense": "CC0-1.0", "documentNamespace": "https://spdx.org/spdxdocs/apko/", "documentDescribes": [ - "SPDXRef-Package-Image-sha256-124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858" + "SPDXRef-Package-Image-sha256-32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640" ], "packages": [ { - "SPDXID": "SPDXRef-Package-Image-sha256-124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858", - "name": "sha256:124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858", - "versionInfo": "sha256:124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858", + "SPDXID": "SPDXRef-Package-Image-sha256-32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640", + "name": "sha256:32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640", + "versionInfo": "sha256:32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640", "filesAnalyzed": false, "description": "apko container image", "downloadLocation": "NOASSERTION", @@ -28,20 +28,20 @@ "checksums": [ { "algorithm": "SHA256", - "checksumValue": "124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858" + "checksumValue": "32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640" } ], "externalRefs": [ { "referenceCategory": "PACKAGE-MANAGER", - "referenceLocator": "pkg:oci/golden@sha256:124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858?arch=arm64\u0026mediaType=application%2Fvnd.oci.image.manifest.v1%2Bjson\u0026os=linux", + "referenceLocator": "pkg:oci/golden@sha256:32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640?arch=arm64\u0026mediaType=application%2Fvnd.oci.image.manifest.v1%2Bjson\u0026os=linux", "referenceType": "purl" } ] }, { - "SPDXID": "SPDXRef-Package-ImageLayer-sha256-7e0f9d62f6cab4785e18a55f17d03f20ffb776881f1f46258efd9458f7cdaf08", - "name": "sha256:7e0f9d62f6cab4785e18a55f17d03f20ffb776881f1f46258efd9458f7cdaf08", + "SPDXID": "SPDXRef-Package-ImageLayer-sha256-eb39d585629f6f13753cffa93714c16e45aa7c806cf4fa3662d4725d18425fad", + "name": "sha256:eb39d585629f6f13753cffa93714c16e45aa7c806cf4fa3662d4725d18425fad", "versionInfo": "1.0.0", "filesAnalyzed": false, "description": "apko operating system layer", @@ -51,7 +51,7 @@ "externalRefs": [ { "referenceCategory": "PACKAGE-MANAGER", - "referenceLocator": "pkg:oci/golden@sha256:7e0f9d62f6cab4785e18a55f17d03f20ffb776881f1f46258efd9458f7cdaf08?arch=arm64\u0026mediaType=application%2Fvnd.oci.image.layer.v1.tar%2Bgzip\u0026os=linux", + "referenceLocator": "pkg:oci/golden@sha256:eb39d585629f6f13753cffa93714c16e45aa7c806cf4fa3662d4725d18425fad?arch=arm64\u0026mediaType=application%2Fvnd.oci.image.layer.v1.tar%2Bgzip\u0026os=linux", "referenceType": "purl" } ] @@ -147,9 +147,9 @@ ], "relationships": [ { - "spdxElementId": "SPDXRef-Package-Image-sha256-124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858", + "spdxElementId": "SPDXRef-Package-Image-sha256-32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640", "relationshipType": "CONTAINS", - "relatedSpdxElement": "SPDXRef-Package-ImageLayer-sha256-7e0f9d62f6cab4785e18a55f17d03f20ffb776881f1f46258efd9458f7cdaf08" + "relatedSpdxElement": "SPDXRef-Package-ImageLayer-sha256-eb39d585629f6f13753cffa93714c16e45aa7c806cf4fa3662d4725d18425fad" }, { "spdxElementId": "SPDXRef-Package-apk-pretend-baselayout-1.0.0-r0", @@ -157,7 +157,7 @@ "relatedSpdxElement": "SPDXRef-Package-Melange-pretend-baselayout.melange.yaml-326e0ed687bdfeadac839dc9b25686e4442c9d04" }, { - "spdxElementId": "SPDXRef-Package-Image-sha256-124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858", + "spdxElementId": "SPDXRef-Package-Image-sha256-32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640", "relationshipType": "CONTAINS", "relatedSpdxElement": "SPDXRef-Package-apk-pretend-baselayout-1.0.0-r0" }, @@ -167,7 +167,7 @@ "relatedSpdxElement": "SPDXRef-Package-Melange-replayout.melange.yaml-326e0ed687bdfeadac839dc9b25686e4442c9d04" }, { - "spdxElementId": "SPDXRef-Package-Image-sha256-124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858", + "spdxElementId": "SPDXRef-Package-Image-sha256-32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640", "relationshipType": "CONTAINS", "relatedSpdxElement": "SPDXRef-Package-apk-replayout-1.0.0-r0" } diff --git a/internal/cli/testdata/golden/sboms/sbom-index.spdx.json b/internal/cli/testdata/golden/sboms/sbom-index.spdx.json index f21e2b934..cdd09d7f2 100644 --- a/internal/cli/testdata/golden/sboms/sbom-index.spdx.json +++ b/internal/cli/testdata/golden/sboms/sbom-index.spdx.json @@ -1,6 +1,6 @@ { "SPDXID": "SPDXRef-DOCUMENT", - "name": "sbom-sha256:b5f05e6fc882c97d61c1daee566954ae6fc09924f8e152293e2b97a06092069f", + "name": "sbom-sha256:1edfc6aaee9fbd0abaa5ee6a44a869955815ddc08b04a202454437b4a0654413", "spdxVersion": "SPDX-2.3", "creationInfo": { "created": "1970-01-01T00:00:00Z", @@ -13,13 +13,13 @@ "dataLicense": "CC0-1.0", "documentNamespace": "https://spdx.org/spdxdocs/apko/", "documentDescribes": [ - "SPDXRef-Package-sha256-b5f05e6fc882c97d61c1daee566954ae6fc09924f8e152293e2b97a06092069f" + "SPDXRef-Package-sha256-1edfc6aaee9fbd0abaa5ee6a44a869955815ddc08b04a202454437b4a0654413" ], "packages": [ { - "SPDXID": "SPDXRef-Package-sha256-b5f05e6fc882c97d61c1daee566954ae6fc09924f8e152293e2b97a06092069f", - "name": "sha256:b5f05e6fc882c97d61c1daee566954ae6fc09924f8e152293e2b97a06092069f", - "versionInfo": "sha256:b5f05e6fc882c97d61c1daee566954ae6fc09924f8e152293e2b97a06092069f", + "SPDXID": "SPDXRef-Package-sha256-1edfc6aaee9fbd0abaa5ee6a44a869955815ddc08b04a202454437b4a0654413", + "name": "sha256:1edfc6aaee9fbd0abaa5ee6a44a869955815ddc08b04a202454437b4a0654413", + "versionInfo": "sha256:1edfc6aaee9fbd0abaa5ee6a44a869955815ddc08b04a202454437b4a0654413", "filesAnalyzed": false, "description": "Multi-arch image index", "downloadLocation": "NOASSERTION", @@ -29,21 +29,21 @@ "checksums": [ { "algorithm": "SHA256", - "checksumValue": "b5f05e6fc882c97d61c1daee566954ae6fc09924f8e152293e2b97a06092069f" + "checksumValue": "1edfc6aaee9fbd0abaa5ee6a44a869955815ddc08b04a202454437b4a0654413" } ], "externalRefs": [ { "referenceCategory": "PACKAGE-MANAGER", - "referenceLocator": "pkg:oci/golden@sha256:b5f05e6fc882c97d61c1daee566954ae6fc09924f8e152293e2b97a06092069f?mediaType=application%2Fvnd.oci.image.index.v1%2Bjson", + "referenceLocator": "pkg:oci/golden@sha256:1edfc6aaee9fbd0abaa5ee6a44a869955815ddc08b04a202454437b4a0654413?mediaType=application%2Fvnd.oci.image.index.v1%2Bjson", "referenceType": "purl" } ] }, { - "SPDXID": "SPDXRef-Package-sha256-69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4", - "name": "sha256:69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4", - "versionInfo": "sha256:69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4", + "SPDXID": "SPDXRef-Package-sha256-ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58", + "name": "sha256:ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58", + "versionInfo": "sha256:ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58", "filesAnalyzed": false, "downloadLocation": "NOASSERTION", "supplier": "Organization: Chainguard, Inc.", @@ -51,21 +51,21 @@ "checksums": [ { "algorithm": "SHA256", - "checksumValue": "69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4" + "checksumValue": "ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58" } ], "externalRefs": [ { "referenceCategory": "PACKAGE-MANAGER", - "referenceLocator": "pkg:oci/golden@sha256:69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4?arch=amd64\u0026mediaType=application%2Fvnd.oci.image.manifest.v1%2Bjson\u0026os=linux", + "referenceLocator": "pkg:oci/golden@sha256:ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58?arch=amd64\u0026mediaType=application%2Fvnd.oci.image.manifest.v1%2Bjson\u0026os=linux", "referenceType": "purl" } ] }, { - "SPDXID": "SPDXRef-Package-sha256-124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858", - "name": "sha256:124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858", - "versionInfo": "sha256:124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858", + "SPDXID": "SPDXRef-Package-sha256-32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640", + "name": "sha256:32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640", + "versionInfo": "sha256:32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640", "filesAnalyzed": false, "downloadLocation": "NOASSERTION", "supplier": "Organization: Chainguard, Inc.", @@ -73,13 +73,13 @@ "checksums": [ { "algorithm": "SHA256", - "checksumValue": "124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858" + "checksumValue": "32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640" } ], "externalRefs": [ { "referenceCategory": "PACKAGE-MANAGER", - "referenceLocator": "pkg:oci/golden@sha256:124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858?arch=arm64\u0026mediaType=application%2Fvnd.oci.image.manifest.v1%2Bjson\u0026os=linux", + "referenceLocator": "pkg:oci/golden@sha256:32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640?arch=arm64\u0026mediaType=application%2Fvnd.oci.image.manifest.v1%2Bjson\u0026os=linux", "referenceType": "purl" } ] @@ -87,14 +87,14 @@ ], "relationships": [ { - "spdxElementId": "SPDXRef-Package-sha256-b5f05e6fc882c97d61c1daee566954ae6fc09924f8e152293e2b97a06092069f", + "spdxElementId": "SPDXRef-Package-sha256-1edfc6aaee9fbd0abaa5ee6a44a869955815ddc08b04a202454437b4a0654413", "relationshipType": "VARIANT_OF", - "relatedSpdxElement": "SPDXRef-Package-sha256-69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4" + "relatedSpdxElement": "SPDXRef-Package-sha256-ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58" }, { - "spdxElementId": "SPDXRef-Package-sha256-b5f05e6fc882c97d61c1daee566954ae6fc09924f8e152293e2b97a06092069f", + "spdxElementId": "SPDXRef-Package-sha256-1edfc6aaee9fbd0abaa5ee6a44a869955815ddc08b04a202454437b4a0654413", "relationshipType": "VARIANT_OF", - "relatedSpdxElement": "SPDXRef-Package-sha256-124c885f834cfaf1329987457a9651a68c4fb9733d4462ae6288b98011277858" + "relatedSpdxElement": "SPDXRef-Package-sha256-32e7835adc3cd8ed7a86746e971100e996fa8bca0fb4482c26911ee00cbfd640" } ] } diff --git a/internal/cli/testdata/golden/sboms/sbom-x86_64.spdx.json b/internal/cli/testdata/golden/sboms/sbom-x86_64.spdx.json index 111e814c9..e7bdbe674 100644 --- a/internal/cli/testdata/golden/sboms/sbom-x86_64.spdx.json +++ b/internal/cli/testdata/golden/sboms/sbom-x86_64.spdx.json @@ -1,6 +1,6 @@ { "SPDXID": "SPDXRef-DOCUMENT", - "name": "sbom-sha256:c7557730da0e2d7fb242d8d1ac6dcf7e3a2439732aa5981270b4f3a02454b738", + "name": "sbom-sha256:36f58cd88d06783d4b3adb510e43d476a75b6985cc11e0bae09b7ddcf887c0ec", "spdxVersion": "SPDX-2.3", "creationInfo": { "created": "1970-01-01T00:00:00Z", @@ -13,13 +13,13 @@ "dataLicense": "CC0-1.0", "documentNamespace": "https://spdx.org/spdxdocs/apko/", "documentDescribes": [ - "SPDXRef-Package-Image-sha256-69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4" + "SPDXRef-Package-Image-sha256-ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58" ], "packages": [ { - "SPDXID": "SPDXRef-Package-Image-sha256-69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4", - "name": "sha256:69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4", - "versionInfo": "sha256:69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4", + "SPDXID": "SPDXRef-Package-Image-sha256-ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58", + "name": "sha256:ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58", + "versionInfo": "sha256:ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58", "filesAnalyzed": false, "description": "apko container image", "downloadLocation": "NOASSERTION", @@ -28,20 +28,20 @@ "checksums": [ { "algorithm": "SHA256", - "checksumValue": "69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4" + "checksumValue": "ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58" } ], "externalRefs": [ { "referenceCategory": "PACKAGE-MANAGER", - "referenceLocator": "pkg:oci/golden@sha256:69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4?arch=amd64\u0026mediaType=application%2Fvnd.oci.image.manifest.v1%2Bjson\u0026os=linux", + "referenceLocator": "pkg:oci/golden@sha256:ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58?arch=amd64\u0026mediaType=application%2Fvnd.oci.image.manifest.v1%2Bjson\u0026os=linux", "referenceType": "purl" } ] }, { - "SPDXID": "SPDXRef-Package-ImageLayer-sha256-c7557730da0e2d7fb242d8d1ac6dcf7e3a2439732aa5981270b4f3a02454b738", - "name": "sha256:c7557730da0e2d7fb242d8d1ac6dcf7e3a2439732aa5981270b4f3a02454b738", + "SPDXID": "SPDXRef-Package-ImageLayer-sha256-36f58cd88d06783d4b3adb510e43d476a75b6985cc11e0bae09b7ddcf887c0ec", + "name": "sha256:36f58cd88d06783d4b3adb510e43d476a75b6985cc11e0bae09b7ddcf887c0ec", "versionInfo": "1.0.0", "filesAnalyzed": false, "description": "apko operating system layer", @@ -51,7 +51,7 @@ "externalRefs": [ { "referenceCategory": "PACKAGE-MANAGER", - "referenceLocator": "pkg:oci/golden@sha256:c7557730da0e2d7fb242d8d1ac6dcf7e3a2439732aa5981270b4f3a02454b738?arch=amd64\u0026mediaType=application%2Fvnd.oci.image.layer.v1.tar%2Bgzip\u0026os=linux", + "referenceLocator": "pkg:oci/golden@sha256:36f58cd88d06783d4b3adb510e43d476a75b6985cc11e0bae09b7ddcf887c0ec?arch=amd64\u0026mediaType=application%2Fvnd.oci.image.layer.v1.tar%2Bgzip\u0026os=linux", "referenceType": "purl" } ] @@ -147,9 +147,9 @@ ], "relationships": [ { - "spdxElementId": "SPDXRef-Package-Image-sha256-69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4", + "spdxElementId": "SPDXRef-Package-Image-sha256-ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58", "relationshipType": "CONTAINS", - "relatedSpdxElement": "SPDXRef-Package-ImageLayer-sha256-c7557730da0e2d7fb242d8d1ac6dcf7e3a2439732aa5981270b4f3a02454b738" + "relatedSpdxElement": "SPDXRef-Package-ImageLayer-sha256-36f58cd88d06783d4b3adb510e43d476a75b6985cc11e0bae09b7ddcf887c0ec" }, { "spdxElementId": "SPDXRef-Package-apk-pretend-baselayout-1.0.0-r0", @@ -157,7 +157,7 @@ "relatedSpdxElement": "SPDXRef-Package-Melange-pretend-baselayout.melange.yaml-326e0ed687bdfeadac839dc9b25686e4442c9d04" }, { - "spdxElementId": "SPDXRef-Package-Image-sha256-69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4", + "spdxElementId": "SPDXRef-Package-Image-sha256-ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58", "relationshipType": "CONTAINS", "relatedSpdxElement": "SPDXRef-Package-apk-pretend-baselayout-1.0.0-r0" }, @@ -167,7 +167,7 @@ "relatedSpdxElement": "SPDXRef-Package-Melange-replayout.melange.yaml-326e0ed687bdfeadac839dc9b25686e4442c9d04" }, { - "spdxElementId": "SPDXRef-Package-Image-sha256-69f0237c7f8cf0b8a329d1bf1d6870c870c4ec323e39d3a6da59596632d0f2f4", + "spdxElementId": "SPDXRef-Package-Image-sha256-ea8cf97bc59cac73cfb94539c5c59a6b651f44fc083ae91b4cca8586b7374e58", "relationshipType": "CONTAINS", "relatedSpdxElement": "SPDXRef-Package-apk-replayout-1.0.0-r0" } diff --git a/internal/cli/testdata/top_image/blobs/sha256/015f772c76385839f8c653e158a2ab71f52ac10a00424d9822adf985ee1cb643 b/internal/cli/testdata/top_image/blobs/sha256/015f772c76385839f8c653e158a2ab71f52ac10a00424d9822adf985ee1cb643 new file mode 100644 index 000000000..782fb697c Binary files /dev/null and b/internal/cli/testdata/top_image/blobs/sha256/015f772c76385839f8c653e158a2ab71f52ac10a00424d9822adf985ee1cb643 differ diff --git a/internal/cli/testdata/top_image/blobs/sha256/9743477d70b66d27d627eb7dc1a548dee98ad742b195e24545b73a1c7113aea8 b/internal/cli/testdata/top_image/blobs/sha256/01966bcd4c12b0984abfbab60533dd8de171620c83ed8b917970e95c23fcadb7 similarity index 59% rename from internal/cli/testdata/top_image/blobs/sha256/9743477d70b66d27d627eb7dc1a548dee98ad742b195e24545b73a1c7113aea8 rename to internal/cli/testdata/top_image/blobs/sha256/01966bcd4c12b0984abfbab60533dd8de171620c83ed8b917970e95c23fcadb7 index 0aeed9297..8442d97ea 100644 --- a/internal/cli/testdata/top_image/blobs/sha256/9743477d70b66d27d627eb7dc1a548dee98ad742b195e24545b73a1c7113aea8 +++ b/internal/cli/testdata/top_image/blobs/sha256/01966bcd4c12b0984abfbab60533dd8de171620c83ed8b917970e95c23fcadb7 @@ -1 +1 @@ -{"schemaVersion":2,"mediaType":"application/vnd.oci.image.manifest.v1+json","config":{"mediaType":"application/vnd.oci.image.config.v1+json","size":785,"digest":"sha256:52a254489d2b6d123a52b293b7032cca79834ce9f0176151c52754a0c7b1d1ea"},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar+gzip","size":4123,"digest":"sha256:583625b6164fff3b017f62b9fcd60cb53fff18a7e89ee538212134a13fc29fb1"},{"mediaType":"application/vnd.oci.image.layer.v1.tar+gzip","size":2945,"digest":"sha256:ff58773a945b386b75663553a7f451c4f6116ec6fac9c22ef41ebaf27704a566"}],"annotations":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z"}} \ No newline at end of file +{"schemaVersion":2,"mediaType":"application/vnd.oci.image.manifest.v1+json","config":{"mediaType":"application/vnd.oci.image.config.v1+json","size":785,"digest":"sha256:b499426d6dc90675e0b6629706d3d45ccc6ea532cdac5289e84ddfa399d56e97"},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar+gzip","size":4123,"digest":"sha256:583625b6164fff3b017f62b9fcd60cb53fff18a7e89ee538212134a13fc29fb1"},{"mediaType":"application/vnd.oci.image.layer.v1.tar+gzip","size":2952,"digest":"sha256:3887ee57051bb0dea45b02d75acb8dec66012cf2d044a457f4d4243128a60464"}],"annotations":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z"}} \ No newline at end of file diff --git a/internal/cli/testdata/top_image/blobs/sha256/3887ee57051bb0dea45b02d75acb8dec66012cf2d044a457f4d4243128a60464 b/internal/cli/testdata/top_image/blobs/sha256/3887ee57051bb0dea45b02d75acb8dec66012cf2d044a457f4d4243128a60464 new file mode 100644 index 000000000..0c05b1bd1 Binary files /dev/null and b/internal/cli/testdata/top_image/blobs/sha256/3887ee57051bb0dea45b02d75acb8dec66012cf2d044a457f4d4243128a60464 differ diff --git a/internal/cli/testdata/top_image/blobs/sha256/3c6b4bb5b39be26700e6baff9d83a53bba4a0d994e22638d11a4c104bc9e39c9 b/internal/cli/testdata/top_image/blobs/sha256/4b8ece5ce1b8f904e7799114e0d7cd95e09d575793ff017e2a9fe6f800cb7091 similarity index 59% rename from internal/cli/testdata/top_image/blobs/sha256/3c6b4bb5b39be26700e6baff9d83a53bba4a0d994e22638d11a4c104bc9e39c9 rename to internal/cli/testdata/top_image/blobs/sha256/4b8ece5ce1b8f904e7799114e0d7cd95e09d575793ff017e2a9fe6f800cb7091 index 0ede92a2a..d1fbf3361 100644 --- a/internal/cli/testdata/top_image/blobs/sha256/3c6b4bb5b39be26700e6baff9d83a53bba4a0d994e22638d11a4c104bc9e39c9 +++ b/internal/cli/testdata/top_image/blobs/sha256/4b8ece5ce1b8f904e7799114e0d7cd95e09d575793ff017e2a9fe6f800cb7091 @@ -1 +1 @@ -{"schemaVersion":2,"mediaType":"application/vnd.oci.image.manifest.v1+json","config":{"mediaType":"application/vnd.oci.image.config.v1+json","size":785,"digest":"sha256:e83f38a3553148f2189193b4908cce3576907dacddc14617d0e8d22370c80cce"},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar+gzip","size":4126,"digest":"sha256:bf74ddaf55d32ec9672a0a40efc6cb1bf0a167763c18fc22586c8a301167822f"},{"mediaType":"application/vnd.oci.image.layer.v1.tar+gzip","size":2955,"digest":"sha256:7bd766d91d366d79c001436814bdfd629ef6da668805945c414cb074ddb7f0ed"}],"annotations":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z"}} \ No newline at end of file +{"schemaVersion":2,"mediaType":"application/vnd.oci.image.manifest.v1+json","config":{"mediaType":"application/vnd.oci.image.config.v1+json","size":785,"digest":"sha256:6f80449398e607e42aae9bef59afc38a82175a70e02a10b26ffe3fcfdf8af2e0"},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar+gzip","size":4126,"digest":"sha256:bf74ddaf55d32ec9672a0a40efc6cb1bf0a167763c18fc22586c8a301167822f"},{"mediaType":"application/vnd.oci.image.layer.v1.tar+gzip","size":2961,"digest":"sha256:015f772c76385839f8c653e158a2ab71f52ac10a00424d9822adf985ee1cb643"}],"annotations":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z"}} \ No newline at end of file diff --git a/internal/cli/testdata/top_image/blobs/sha256/e83f38a3553148f2189193b4908cce3576907dacddc14617d0e8d22370c80cce b/internal/cli/testdata/top_image/blobs/sha256/6f80449398e607e42aae9bef59afc38a82175a70e02a10b26ffe3fcfdf8af2e0 similarity index 83% rename from internal/cli/testdata/top_image/blobs/sha256/e83f38a3553148f2189193b4908cce3576907dacddc14617d0e8d22370c80cce rename to internal/cli/testdata/top_image/blobs/sha256/6f80449398e607e42aae9bef59afc38a82175a70e02a10b26ffe3fcfdf8af2e0 index 10db8f89b..71f5091d8 100644 --- a/internal/cli/testdata/top_image/blobs/sha256/e83f38a3553148f2189193b4908cce3576907dacddc14617d0e8d22370c80cce +++ b/internal/cli/testdata/top_image/blobs/sha256/6f80449398e607e42aae9bef59afc38a82175a70e02a10b26ffe3fcfdf8af2e0 @@ -1 +1 @@ -{"architecture":"amd64","author":"github.com/chainguard-dev/apko","created":"1970-01-01T00:00:00Z","history":[{"author":"apko","created":"1970-01-01T00:00:00Z","created_by":"apko","comment":"This is an apko single-layer image"},{"author":"apko","created":"1970-01-01T00:00:00Z","created_by":"apko","comment":"This is an apko single-layer image"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:783b8b05724ae7998917558527ef930f1442af2f071850913fc406992e44606c","sha256:79551ed211a0ca334ac3206473ff5f46a095fb4baf5ee4d13b804d8acca517bf"]},"config":{"Entrypoint":["/bin/sh","-l"],"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin","SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt"],"Labels":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z"}}} \ No newline at end of file +{"architecture":"amd64","author":"github.com/chainguard-dev/apko","created":"1970-01-01T00:00:00Z","history":[{"author":"apko","created":"1970-01-01T00:00:00Z","created_by":"apko","comment":"This is an apko single-layer image"},{"author":"apko","created":"1970-01-01T00:00:00Z","created_by":"apko","comment":"This is an apko single-layer image"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:783b8b05724ae7998917558527ef930f1442af2f071850913fc406992e44606c","sha256:959a9d8c7ff73885cc696d9364b69c11fa555d3d6309937fc407c86461b0dbc5"]},"config":{"Entrypoint":["/bin/sh","-l"],"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin","SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt"],"Labels":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z"}}} \ No newline at end of file diff --git a/internal/cli/testdata/top_image/blobs/sha256/7bd766d91d366d79c001436814bdfd629ef6da668805945c414cb074ddb7f0ed b/internal/cli/testdata/top_image/blobs/sha256/7bd766d91d366d79c001436814bdfd629ef6da668805945c414cb074ddb7f0ed deleted file mode 100644 index 0e8b2d71b..000000000 Binary files a/internal/cli/testdata/top_image/blobs/sha256/7bd766d91d366d79c001436814bdfd629ef6da668805945c414cb074ddb7f0ed and /dev/null differ diff --git a/internal/cli/testdata/top_image/blobs/sha256/52a254489d2b6d123a52b293b7032cca79834ce9f0176151c52754a0c7b1d1ea b/internal/cli/testdata/top_image/blobs/sha256/b499426d6dc90675e0b6629706d3d45ccc6ea532cdac5289e84ddfa399d56e97 similarity index 83% rename from internal/cli/testdata/top_image/blobs/sha256/52a254489d2b6d123a52b293b7032cca79834ce9f0176151c52754a0c7b1d1ea rename to internal/cli/testdata/top_image/blobs/sha256/b499426d6dc90675e0b6629706d3d45ccc6ea532cdac5289e84ddfa399d56e97 index edcba1609..9b66b47be 100644 --- a/internal/cli/testdata/top_image/blobs/sha256/52a254489d2b6d123a52b293b7032cca79834ce9f0176151c52754a0c7b1d1ea +++ b/internal/cli/testdata/top_image/blobs/sha256/b499426d6dc90675e0b6629706d3d45ccc6ea532cdac5289e84ddfa399d56e97 @@ -1 +1 @@ -{"architecture":"arm64","author":"github.com/chainguard-dev/apko","created":"1970-01-01T00:00:00Z","history":[{"author":"apko","created":"1970-01-01T00:00:00Z","created_by":"apko","comment":"This is an apko single-layer image"},{"author":"apko","created":"1970-01-01T00:00:00Z","created_by":"apko","comment":"This is an apko single-layer image"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:2888aac57b90cf66093aa48092bf1f1f1b1bdb85bde8601a5f8cf0f06c814763","sha256:833080c5930b626e29628105bd42d7390dfdbc753f761d111d3ac92256bae9c3"]},"config":{"Entrypoint":["/bin/sh","-l"],"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin","SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt"],"Labels":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z"}}} \ No newline at end of file +{"architecture":"arm64","author":"github.com/chainguard-dev/apko","created":"1970-01-01T00:00:00Z","history":[{"author":"apko","created":"1970-01-01T00:00:00Z","created_by":"apko","comment":"This is an apko single-layer image"},{"author":"apko","created":"1970-01-01T00:00:00Z","created_by":"apko","comment":"This is an apko single-layer image"}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:2888aac57b90cf66093aa48092bf1f1f1b1bdb85bde8601a5f8cf0f06c814763","sha256:9b9e0d55d57bb37665ec46a2f4ed9e69dce98919466c4433dbd0a0e9b0eb8262"]},"config":{"Entrypoint":["/bin/sh","-l"],"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin","SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt"],"Labels":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z"}}} \ No newline at end of file diff --git a/internal/cli/testdata/top_image/blobs/sha256/ff58773a945b386b75663553a7f451c4f6116ec6fac9c22ef41ebaf27704a566 b/internal/cli/testdata/top_image/blobs/sha256/ff58773a945b386b75663553a7f451c4f6116ec6fac9c22ef41ebaf27704a566 deleted file mode 100644 index c8ca33564..000000000 Binary files a/internal/cli/testdata/top_image/blobs/sha256/ff58773a945b386b75663553a7f451c4f6116ec6fac9c22ef41ebaf27704a566 and /dev/null differ diff --git a/internal/cli/testdata/top_image/index.json b/internal/cli/testdata/top_image/index.json index c9f45c7f5..5e76fa5ac 100755 --- a/internal/cli/testdata/top_image/index.json +++ b/internal/cli/testdata/top_image/index.json @@ -1 +1 @@ -{"schemaVersion":2,"mediaType":"application/vnd.oci.image.index.v1+json","manifests":[{"mediaType":"application/vnd.oci.image.manifest.v1+json","size":631,"digest":"sha256:3c6b4bb5b39be26700e6baff9d83a53bba4a0d994e22638d11a4c104bc9e39c9","platform":{"architecture":"amd64","os":"linux"},"artifactType":"application/vnd.oci.image.config.v1+json"},{"mediaType":"application/vnd.oci.image.manifest.v1+json","size":631,"digest":"sha256:9743477d70b66d27d627eb7dc1a548dee98ad742b195e24545b73a1c7113aea8","platform":{"architecture":"arm64","os":"linux"},"artifactType":"application/vnd.oci.image.config.v1+json"}],"annotations":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z"}} \ No newline at end of file +{"schemaVersion":2,"mediaType":"application/vnd.oci.image.index.v1+json","manifests":[{"mediaType":"application/vnd.oci.image.manifest.v1+json","size":631,"digest":"sha256:4b8ece5ce1b8f904e7799114e0d7cd95e09d575793ff017e2a9fe6f800cb7091","platform":{"architecture":"amd64","os":"linux"},"artifactType":"application/vnd.oci.image.config.v1+json"},{"mediaType":"application/vnd.oci.image.manifest.v1+json","size":631,"digest":"sha256:01966bcd4c12b0984abfbab60533dd8de171620c83ed8b917970e95c23fcadb7","platform":{"architecture":"arm64","os":"linux"},"artifactType":"application/vnd.oci.image.config.v1+json"}],"annotations":{"org.opencontainers.image.created":"1970-01-01T00:00:00Z"}} \ No newline at end of file diff --git a/pkg/tarfs/fs.go b/pkg/tarfs/fs.go index c37756b54..b27afdf94 100644 --- a/pkg/tarfs/fs.go +++ b/pkg/tarfs/fs.go @@ -116,9 +116,27 @@ func (m *memFS) WriteHeader(hdr tar.Header, tfs fs.FS, pkg *apk.Package) (bool, } } } - if err := m.MkdirAll(hdr.Name, hdr.FileInfo().Mode().Perm()); err != nil { + // Whether the directory is already here decides if we get to set its + // metadata below, so check before MkdirAll makes it exist. + _, statErr := m.getNode(hdr.Name) + created := statErr != nil + + mode := hdr.FileInfo().Mode() + if err := m.MkdirAll(hdr.Name, mode.Perm()); err != nil { return false, fmt.Errorf("error creating directory %s: %w", hdr.Name, err) } + if created { + // MkdirAll carries only permission bits, so setuid/setgid/sticky + // need a separate Chmod. Restrict both of these to directories we + // just created: InitDB creates /tmp as 1777 before any package + // installs, and packages ship a tmp header without the sticky bit. + if err := m.Chmod(hdr.Name, mode&^os.ModeType); err != nil { + return false, fmt.Errorf("error setting mode on directory %s: %w", hdr.Name, err) + } + if err := m.Chown(hdr.Name, hdr.Uid, hdr.Gid); err != nil { + return false, fmt.Errorf("error setting owner on directory %s: %w", hdr.Name, err) + } + } if err := m.Chtimes(hdr.Name, hdr.AccessTime, hdr.ModTime); err != nil { return false, fmt.Errorf("error chtime on directory %s: %w", hdr.Name, err) } @@ -456,6 +474,8 @@ func (m *memFS) writeHeader(name string, te tarEntry) (bool, error) { anode := &node{ name: base, mode: te.header.FileInfo().Mode(), + uid: te.header.Uid, + gid: te.header.Gid, dir: false, modTime: te.header.ModTime, linkTarget: te.header.Linkname, @@ -518,6 +538,8 @@ func (m *memFS) writeHeader(name string, te tarEntry) (bool, error) { anode := &node{ name: base, mode: te.header.FileInfo().Mode(), + uid: te.header.Uid, + gid: te.header.Gid, dir: false, modTime: te.header.ModTime, linkTarget: te.header.Linkname, diff --git a/pkg/tarfs/fs_test.go b/pkg/tarfs/fs_test.go index 5e3403676..b31eaf9fb 100644 --- a/pkg/tarfs/fs_test.go +++ b/pkg/tarfs/fs_test.go @@ -20,6 +20,7 @@ import ( "crypto/sha1" "encoding/hex" "io/fs" + "path" "path/filepath" "testing" @@ -172,3 +173,183 @@ func TestTarFSCreate(t *testing.T) { require.NoError(t, err) require.Equal(t, fileInfo.Mode(), fs.FileMode(0o644)) } + +// dirReader is implemented by the (unexported) tarfs type returned by New(). +type dirReader interface { + ReadDir(string) ([]fs.DirEntry, error) + Readlink(string) (string, error) +} + +// outHeader returns the tar.Header that pkg/build/tarball.go would write for +// name. It reaches the entry the way that writer does -- a directory walk, +// then tar.FileInfoHeader -- because that is how a node's metadata reaches +// both the tar and the erofs writer. +func outHeader(t *testing.T, tfs dirReader, name string) *tar.Header { + t.Helper() + entries, err := tfs.ReadDir(path.Dir(name)) + require.NoError(t, err) + for _, d := range entries { + if d.Name() != path.Base(name) { + continue + } + info, err := d.Info() + require.NoError(t, err) + var link string + if info.Mode()&fs.ModeSymlink != 0 { + // tarball.go passes the link target for symlinks. + link, err = tfs.Readlink(name) + require.NoError(t, err) + } + hdr, err := tar.FileInfoHeader(info, link) + require.NoError(t, err) + return hdr + } + t.Fatalf("no entry for %q", name) + return nil +} + +// regHeader builds a TypeReg header for body, including the checksum PAX +// record that WriteHeader requires. +func regHeader(name string, mode int64, uid, gid int, body []byte) tar.Header { + sum := sha1.Sum(body) //nolint:gosec // this is what apk tools is using + return tar.Header{ + Typeflag: tar.TypeReg, + Name: name, + Mode: mode, + Uid: uid, + Gid: gid, + Size: int64(len(body)), + PAXRecords: map[string]string{ + "APK-TOOLS.checksum.SHA1": hex.EncodeToString(sum[:]), + }, + } +} + +// TestWriteHeaderDirMetadata covers a directory header's setuid/setgid/sticky +// bits and ownership, which MkdirAll alone does not carry. +func TestWriteHeaderDirMetadata(t *testing.T) { + tfs := tarfs.New() + pkg := &apk.Package{Name: "postfix", Origin: "postfix"} + + // Mode as apk-tools would record 2755 with the sticky bit also set. + dir := tar.Header{ + Typeflag: tar.TypeDir, + Name: "var/spool/postfix/maildrop", + Mode: 0o2755 | 0o1000, + Uid: 100, + Gid: 101, + } + if _, err := tfs.WriteHeader(dir, tfs, pkg); err != nil { + t.Fatal(err) + } + + fi, err := tfs.Lstat(dir.Name) + require.NoError(t, err) + require.Equal(t, fs.ModeDir|fs.ModeSetgid|fs.ModeSticky|0o755, fi.Mode()) + + hdr := outHeader(t, tfs, dir.Name) + require.Equal(t, dir.Mode, hdr.Mode) + require.Equal(t, 100, hdr.Uid) + require.Equal(t, 101, hdr.Gid) + + // Ancestors MkdirAll had to invent are not owned by the header, so they + // must not pick up its ownership. + for _, ancestor := range []string{"var", "var/spool", "var/spool/postfix"} { + hdr := outHeader(t, tfs, ancestor) + require.Zerof(t, hdr.Uid, "uid of implicit ancestor %q", ancestor) + require.Zerof(t, hdr.Gid, "gid of implicit ancestor %q", ancestor) + } +} + +// TestWriteHeaderDirExisting guards the /tmp case: apk's InitDB creates /tmp +// as 1777 before any package installs, and packages ship a tmp header with no +// sticky bit, so a header for a directory that is already there must not +// downgrade it. +func TestWriteHeaderDirExisting(t *testing.T) { + tfs := tarfs.New() + pkg := &apk.Package{Name: "wolfi-baselayout", Origin: "wolfi-baselayout"} + + require.NoError(t, tfs.Mkdir("tmp", fs.ModeSticky|0o777)) + + dir := tar.Header{ + Typeflag: tar.TypeDir, + Name: "tmp", + Mode: 0o777, + Uid: 100, + Gid: 100, + } + if _, err := tfs.WriteHeader(dir, tfs, pkg); err != nil { + t.Fatal(err) + } + + fi, err := tfs.Lstat("tmp") + require.NoError(t, err) + require.Equal(t, fs.ModeDir|fs.ModeSticky|0o777, fi.Mode()) + + hdr := outHeader(t, tfs, "tmp") + require.Equal(t, int64(0o1777), hdr.Mode) + require.Zero(t, hdr.Uid) + require.Zero(t, hdr.Gid) +} + +// TestWriteHeaderFileOwnership covers ownership of regular files and symlinks. +// A setgid binary is the case that matters most: dropping its gid makes it +// setgid to root rather than to an unprivileged group. +func TestWriteHeaderFileOwnership(t *testing.T) { + tfs := tarfs.New() + pkg := &apk.Package{Name: "postfix", Origin: "postfix"} + + require.NoError(t, tfs.MkdirAll("usr/bin", 0o755)) + + // setgid to gid 101 (postfix's "postdrop" group), not to root. + reg := regHeader("usr/bin/postdrop", 0o2755, 0, 101, []byte("ELF")) + if _, err := tfs.WriteHeader(reg, tfs, pkg); err != nil { + t.Fatal(err) + } + + hdr := outHeader(t, tfs, reg.Name) + require.Equal(t, int64(0o2755), hdr.Mode) + require.Zero(t, hdr.Uid) + require.Equal(t, 101, hdr.Gid) + + link := tar.Header{ + Typeflag: tar.TypeSymlink, + Name: "usr/bin/sendmail", + Linkname: "postdrop", + Mode: 0o777, + Uid: 100, + Gid: 101, + } + linkDigest := sha1.Sum([]byte(link.Linkname)) //nolint:gosec + link.PAXRecords = map[string]string{ + "APK-TOOLS.checksum.SHA1": hex.EncodeToString(linkDigest[:]), + } + if _, err := tfs.WriteHeader(link, tfs, pkg); err != nil { + t.Fatal(err) + } + + hdr = outHeader(t, tfs, link.Name) + require.Equal(t, 100, hdr.Uid) + require.Equal(t, 101, hdr.Gid) +} + +// TestWriteHeaderFileOwnershipReplaced checks that a file installed over +// another package's copy also gets its own ownership. +func TestWriteHeaderFileOwnershipReplaced(t *testing.T) { + tfs := tarfs.New() + first := &apk.Package{Name: "first", Origin: "shared"} + second := &apk.Package{Name: "second", Origin: "shared"} + + require.NoError(t, tfs.MkdirAll("etc", 0o755)) + + if _, err := tfs.WriteHeader(regHeader("etc/conf", 0o644, 1, 1, []byte("a")), tfs, first); err != nil { + t.Fatal(err) + } + if _, err := tfs.WriteHeader(regHeader("etc/conf", 0o644, 100, 101, []byte("b")), tfs, second); err != nil { + t.Fatal(err) + } + + hdr := outHeader(t, tfs, "etc/conf") + require.Equal(t, 100, hdr.Uid) + require.Equal(t, 101, hdr.Gid) +}