Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package buildpacks-cli for openSUSE:Factory checked in at 2026-05-04 12:53:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/buildpacks-cli (Old) and /work/SRC/openSUSE:Factory/.buildpacks-cli.new.30200 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "buildpacks-cli" Mon May 4 12:53:50 2026 rev:17 rq:1350499 version:0.40.4 Changes: -------- --- /work/SRC/openSUSE:Factory/buildpacks-cli/buildpacks-cli.changes 2026-04-23 17:13:27.050498603 +0200 +++ /work/SRC/openSUSE:Factory/.buildpacks-cli.new.30200/buildpacks-cli.changes 2026-05-04 12:57:01.366136566 +0200 @@ -1,0 +2,13 @@ +Sun May 03 06:45:04 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 0.40.4: + * Features + - fix: fetch builder image per platform (#2589 by @ddusht) + * Dependencies + - build(deps): bump uuid and @actions/core (#2583) + - build(deps): bump yaml in + /.github/workflows/actions/release-notes (#2554) + - build(deps): bump github.com/docker/cli in the + go-dependencies group (#2585) + +------------------------------------------------------------------- Old: ---- buildpacks-cli-0.40.3.obscpio New: ---- buildpacks-cli-0.40.4.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ buildpacks-cli.spec ++++++ --- /var/tmp/diff_new_pack.OFiNZn/_old 2026-05-04 12:57:02.882198963 +0200 +++ /var/tmp/diff_new_pack.OFiNZn/_new 2026-05-04 12:57:02.886199127 +0200 @@ -19,7 +19,7 @@ %define executable_name pack Name: buildpacks-cli -Version: 0.40.3 +Version: 0.40.4 Release: 0 Summary: CLI for building apps using Cloud Native Buildpacks License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.OFiNZn/_old 2026-05-04 12:57:02.938201268 +0200 +++ /var/tmp/diff_new_pack.OFiNZn/_new 2026-05-04 12:57:02.942201433 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/buildpacks/pack</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v0.40.3</param> + <param name="revision">v0.40.4</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.OFiNZn/_old 2026-05-04 12:57:02.974202750 +0200 +++ /var/tmp/diff_new_pack.OFiNZn/_new 2026-05-04 12:57:02.978202915 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/buildpacks/pack</param> - <param name="changesrevision">7a70737d0f32ca8db41a6e9b47a5aaa981eb7584</param></service></servicedata> + <param name="changesrevision">3ebbecd20f477a4711d5cd28427956c61f6b13e3</param></service></servicedata> (No newline at EOF) ++++++ buildpacks-cli-0.40.3.obscpio -> buildpacks-cli-0.40.4.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/buildpacks-cli-0.40.3/Dockerfile new/buildpacks-cli-0.40.4/Dockerfile --- old/buildpacks-cli-0.40.3/Dockerfile 2026-04-22 17:41:04.000000000 +0200 +++ new/buildpacks-cli-0.40.4/Dockerfile 2026-05-02 23:59:24.000000000 +0200 @@ -1,3 +1,4 @@ +# syntax=docker/dockerfile:1 ARG base_image=gcr.io/distroless/static FROM golang:1.25 as builder diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/buildpacks-cli-0.40.3/acceptance/testdata/mock_stack/linux/build/Dockerfile new/buildpacks-cli-0.40.4/acceptance/testdata/mock_stack/linux/build/Dockerfile --- old/buildpacks-cli-0.40.3/acceptance/testdata/mock_stack/linux/build/Dockerfile 2026-04-22 17:41:04.000000000 +0200 +++ new/buildpacks-cli-0.40.4/acceptance/testdata/mock_stack/linux/build/Dockerfile 2026-05-02 23:59:24.000000000 +0200 @@ -1,3 +1,4 @@ +# syntax=docker/dockerfile:1 FROM ubuntu:bionic ENV CNB_USER_ID=2222 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/buildpacks-cli-0.40.3/acceptance/testdata/mock_stack/linux/run/Dockerfile new/buildpacks-cli-0.40.4/acceptance/testdata/mock_stack/linux/run/Dockerfile --- old/buildpacks-cli-0.40.3/acceptance/testdata/mock_stack/linux/run/Dockerfile 2026-04-22 17:41:04.000000000 +0200 +++ new/buildpacks-cli-0.40.4/acceptance/testdata/mock_stack/linux/run/Dockerfile 2026-05-02 23:59:24.000000000 +0200 @@ -1,3 +1,4 @@ +# syntax=docker/dockerfile:1 FROM ubuntu:bionic ENV CNB_USER_ID=2222 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/buildpacks-cli-0.40.3/acceptance/testdata/mock_stack/windows/build/Dockerfile new/buildpacks-cli-0.40.4/acceptance/testdata/mock_stack/windows/build/Dockerfile --- old/buildpacks-cli-0.40.3/acceptance/testdata/mock_stack/windows/build/Dockerfile 2026-04-22 17:41:04.000000000 +0200 +++ new/buildpacks-cli-0.40.4/acceptance/testdata/mock_stack/windows/build/Dockerfile 2026-05-02 23:59:24.000000000 +0200 @@ -1,3 +1,4 @@ +# syntax=docker/dockerfile:1 FROM mcr.microsoft.com/windows/nanoserver:1809 # non-zero sets all user-owned directories to BUILTIN\Users diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/buildpacks-cli-0.40.3/acceptance/testdata/mock_stack/windows/run/Dockerfile new/buildpacks-cli-0.40.4/acceptance/testdata/mock_stack/windows/run/Dockerfile --- old/buildpacks-cli-0.40.3/acceptance/testdata/mock_stack/windows/run/Dockerfile 2026-04-22 17:41:04.000000000 +0200 +++ new/buildpacks-cli-0.40.4/acceptance/testdata/mock_stack/windows/run/Dockerfile 2026-05-02 23:59:24.000000000 +0200 @@ -1,3 +1,4 @@ +# syntax=docker/dockerfile:1 FROM golang:1.17-nanoserver-1809 AS gobuild # bake in a simple server util diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/buildpacks-cli-0.40.3/go.mod new/buildpacks-cli-0.40.4/go.mod --- old/buildpacks-cli-0.40.3/go.mod 2026-04-22 17:41:04.000000000 +0200 +++ new/buildpacks-cli-0.40.4/go.mod 2026-05-02 23:59:24.000000000 +0200 @@ -9,7 +9,7 @@ github.com/buildpacks/lifecycle v0.21.0 github.com/chainguard-dev/kaniko v1.25.13 github.com/containerd/errdefs v1.0.0 - github.com/docker/cli v29.4.0+incompatible + github.com/docker/cli v29.4.1+incompatible github.com/docker/docker v28.5.2+incompatible github.com/dustin/go-humanize v1.0.1 github.com/gdamore/tcell/v2 v2.13.9 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/buildpacks-cli-0.40.3/go.sum new/buildpacks-cli-0.40.4/go.sum --- old/buildpacks-cli-0.40.3/go.sum 2026-04-22 17:41:04.000000000 +0200 +++ new/buildpacks-cli-0.40.4/go.sum 2026-05-02 23:59:24.000000000 +0200 @@ -133,8 +133,8 @@ github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v29.4.0+incompatible h1:+IjXULMetlvWJiuSI0Nbor36lcJ5BTcVpUmB21KBoVM= -github.com/docker/cli v29.4.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v29.4.1+incompatible h1:02RT8QqqwtGRn+6SYypv8IUEbD/ltY6sfKCJIoUcGzk= +github.com/docker/cli v29.4.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/buildpacks-cli-0.40.3/internal/build/testdata/fake-lifecycle/Dockerfile new/buildpacks-cli-0.40.4/internal/build/testdata/fake-lifecycle/Dockerfile --- old/buildpacks-cli-0.40.3/internal/build/testdata/fake-lifecycle/Dockerfile 2026-04-22 17:41:04.000000000 +0200 +++ new/buildpacks-cli-0.40.4/internal/build/testdata/fake-lifecycle/Dockerfile 2026-05-02 23:59:24.000000000 +0200 @@ -1,3 +1,4 @@ +# syntax=docker/dockerfile:1 FROM golang:1.23 RUN mkdir /lifecycle diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/buildpacks-cli-0.40.3/internal/fakes/fake_image_fetcher.go new/buildpacks-cli-0.40.4/internal/fakes/fake_image_fetcher.go --- old/buildpacks-cli-0.40.3/internal/fakes/fake_image_fetcher.go 2026-04-22 17:41:04.000000000 +0200 +++ new/buildpacks-cli-0.40.4/internal/fakes/fake_image_fetcher.go 2026-05-02 23:59:24.000000000 +0200 @@ -18,16 +18,18 @@ } type FakeImageFetcher struct { - LocalImages map[string]imgutil.Image - RemoteImages map[string]imgutil.Image - FetchCalls map[string]*FetchArgs + LocalImages map[string]imgutil.Image + RemoteImages map[string]imgutil.Image + FetchCalls map[string]*FetchArgs + FetchForPlatformCalls map[string]*FetchArgs } func NewFakeImageFetcher() *FakeImageFetcher { return &FakeImageFetcher{ - LocalImages: map[string]imgutil.Image{}, - RemoteImages: map[string]imgutil.Image{}, - FetchCalls: map[string]*FetchArgs{}, + LocalImages: map[string]imgutil.Image{}, + RemoteImages: map[string]imgutil.Image{}, + FetchCalls: map[string]*FetchArgs{}, + FetchForPlatformCalls: map[string]*FetchArgs{}, } } @@ -61,8 +63,8 @@ } func (f *FakeImageFetcher) FetchForPlatform(ctx context.Context, name string, options image.FetchOptions) (imgutil.Image, error) { - // For the fake implementation, FetchForPlatform behaves the same as Fetch - // since we don't need to simulate the platform-specific digest resolution + f.FetchForPlatformCalls[name] = &FetchArgs{Daemon: options.Daemon, PullPolicy: options.PullPolicy, Target: options.Target, LayoutOption: options.LayoutOption} + // For the fake, platform-specific digest resolution is a no-op; delegate to Fetch. return f.Fetch(ctx, name, options) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/buildpacks-cli-0.40.3/pkg/client/build.go new/buildpacks-cli-0.40.4/pkg/client/build.go --- old/buildpacks-cli-0.40.3/pkg/client/build.go 2026-04-22 17:41:04.000000000 +0200 +++ new/buildpacks-cli-0.40.4/pkg/client/build.go 2026-05-02 23:59:24.000000000 +0200 @@ -367,7 +367,7 @@ } }() - rawBuilderImage, err := c.imageFetcher.Fetch( + rawBuilderImage, err := c.imageFetcher.FetchForPlatform( ctx, builderRef.Name(), image.FetchOptions{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/buildpacks-cli-0.40.3/pkg/client/build_test.go new/buildpacks-cli-0.40.4/pkg/client/build_test.go --- old/buildpacks-cli-0.40.3/pkg/client/build_test.go 2026-04-22 17:41:04.000000000 +0200 +++ new/buildpacks-cli-0.40.4/pkg/client/build_test.go 2026-05-02 23:59:24.000000000 +0200 @@ -2334,6 +2334,13 @@ h.AssertEq(t, args.PullPolicy, image.PullAlways) h.AssertEq(t, args.Target.ValuesAsPlatform(), "linux/arm64") + // builder must be fetched via FetchForPlatform so that containerd-backed daemons + // return the platform-specific image config (and its labels) instead of the + // manifest list or the host-arch image. + platformArgs := fakeImageFetcher.FetchForPlatformCalls[defaultBuilderName] + h.AssertNotNil(t, platformArgs) + h.AssertEq(t, platformArgs.Target.ValuesAsPlatform(), "linux/arm64") + args = fakeImageFetcher.FetchCalls["default/run"] h.AssertEq(t, args.Daemon, true) h.AssertEq(t, args.PullPolicy, image.PullAlways) @@ -2349,6 +2356,24 @@ h.AssertEq(t, args.PullPolicy, image.PullAlways) h.AssertEq(t, args.Target.ValuesAsPlatform(), "linux/arm64") }) + + it("fetches the builder image via FetchForPlatform to resolve platform-specific labels on containerd daemons", func() { + // Regression test for: pack build --platform linux/arm64 on a containerd-backed + // daemon returning 'missing label io.buildpacks.builder.metadata' because the + // host-arch (amd64) image config was inspected instead of the arm64 one. + h.AssertNil(t, subject.Build(context.TODO(), BuildOptions{ + Image: "some/app", + Builder: defaultBuilderName, + Platform: "linux/arm64", + PullPolicy: image.PullAlways, + })) + + // FetchForPlatform must have been called for the builder (not plain Fetch), + // which ensures the platform-specific digest is resolved before the daemon + // reads the image config. + h.AssertNotNil(t, fakeImageFetcher.FetchForPlatformCalls[defaultBuilderName]) + h.AssertEq(t, fakeImageFetcher.FetchForPlatformCalls[defaultBuilderName].Target.ValuesAsPlatform(), "linux/arm64") + }) }) when("not provided", func() { @@ -2369,6 +2394,9 @@ h.AssertEq(t, args.PullPolicy, image.PullAlways) h.AssertEq(t, args.Target, (*dist.Target)(nil)) + // builder is always fetched via FetchForPlatform regardless of --platform + h.AssertNotNil(t, fakeImageFetcher.FetchForPlatformCalls[defaultBuilderName]) + args = fakeImageFetcher.FetchCalls["default/run"] h.AssertEq(t, args.Daemon, true) h.AssertEq(t, args.PullPolicy, image.PullAlways) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/buildpacks-cli-0.40.3/pkg/image/fetcher.go new/buildpacks-cli-0.40.4/pkg/image/fetcher.go --- old/buildpacks-cli-0.40.3/pkg/image/fetcher.go 2026-04-22 17:41:04.000000000 +0200 +++ new/buildpacks-cli-0.40.4/pkg/image/fetcher.go 2026-05-02 23:59:24.000000000 +0200 @@ -258,12 +258,18 @@ platformStr := options.Target.ValuesAsPlatform() + // Log the pull attempt upfront so it appears in output regardless of whether + // digest resolution succeeds (mirrors the log emitted by Fetch for non-FetchForPlatform paths). + if options.Daemon { + f.logger.Debugf("Pulling image %s with platform %s", style.Symbol(name), style.Symbol(platformStr)) + } + // When PullPolicy is PullNever, skip platform-specific digest resolution as it requires // network access to fetch the manifest list. Instead, use the image as-is from the daemon. // Note: This may cause issues with containerd storage. Users should pre-pull the platform-specific // digest if they encounter errors. if options.Daemon && options.PullPolicy == PullNever { - f.logger.Debugf("Using lifecycle %s with platform %s (skipping digest resolution due to --pull-policy never)", name, platformStr) + f.logger.Debugf("Using image %s with platform %s (skipping digest resolution due to --pull-policy never)", name, platformStr) return f.Fetch(ctx, name, options) } @@ -285,7 +291,7 @@ } // Log the resolution for visibility - f.logger.Debugf("Using lifecycle %s; pulling digest %s for platform %s", name, resolvedName, platformStr) + f.logger.Debugf("Using image %s; pulling digest %s for platform %s", name, resolvedName, platformStr) return f.Fetch(ctx, resolvedName, options) } ++++++ buildpacks-cli.obsinfo ++++++ --- /var/tmp/diff_new_pack.OFiNZn/_old 2026-05-04 12:57:06.654354215 +0200 +++ /var/tmp/diff_new_pack.OFiNZn/_new 2026-05-04 12:57:06.666354709 +0200 @@ -1,5 +1,5 @@ name: buildpacks-cli -version: 0.40.3 -mtime: 1776872464 -commit: 7a70737d0f32ca8db41a6e9b47a5aaa981eb7584 +version: 0.40.4 +mtime: 1777759164 +commit: 3ebbecd20f477a4711d5cd28427956c61f6b13e3 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/buildpacks-cli/vendor.tar.gz /work/SRC/openSUSE:Factory/.buildpacks-cli.new.30200/vendor.tar.gz differ: char 142, line 1
