diff --git a/pkg/buildpack/builder.go b/pkg/buildpack/builder.go index 443f0de32..14006b6b6 100644 --- a/pkg/buildpack/builder.go +++ b/pkg/buildpack/builder.go @@ -330,13 +330,22 @@ func (b *PackageBuilder) validate() error { func (b *PackageBuilder) resolvedStacks() []dist.Stack { stacks := b.buildpack.Descriptor().Stacks() + if len(stacks) == 0 && len(b.buildpack.Descriptor().Order()) == 0 { + // For non-meta-buildpacks using targets, not stacks: assume any stack + stacks = append(stacks, dist.Stack{ID: "*"}) + } for _, bp := range b.AllModules() { bpd := bp.Descriptor() + bpdStacks := bp.Descriptor().Stacks() + if len(bpdStacks) == 0 && len(bpd.Order()) == 0 { + // For non-meta-buildpacks using targets, not stacks: assume any stack + bpdStacks = append(bpdStacks, dist.Stack{ID: "*"}) + } if len(stacks) == 0 { - stacks = bpd.Stacks() - } else if len(bpd.Stacks()) > 0 { // skip over "meta-buildpacks" - stacks = stack.MergeCompatible(stacks, bpd.Stacks()) + stacks = bpdStacks + } else if len(bpdStacks) > 0 { // skip over "meta-buildpacks" + stacks = stack.MergeCompatible(stacks, bpdStacks) } } diff --git a/pkg/buildpack/builder_test.go b/pkg/buildpack/builder_test.go index 5138fcad8..3abdeecb2 100644 --- a/pkg/buildpack/builder_test.go +++ b/pkg/buildpack/builder_test.go @@ -244,6 +244,25 @@ func testPackageBuilder(t *testing.T, when spec.G, it spec.S) { }) when("validate stacks", func() { + when("buildpack does not define stacks", func() { + it("should succeed", func() { + bp, err := ifakes.NewFakeBuildpack(dist.BuildpackDescriptor{ + WithAPI: api.MustParse("0.10"), + WithInfo: dist.ModuleInfo{ + ID: "bp.1.id", + Version: "bp.1.version", + }, + WithStacks: nil, + WithOrder: nil, + }, 0644) + h.AssertNil(t, err) + builder := buildpack.NewBuilder(mockImageFactory(expectedImageOS)) + builder.SetBuildpack(bp) + err = testFn(builder) + h.AssertNil(t, err) + }) + }) + when("buildpack is meta-buildpack", func() { it("should succeed", func() { bp, err := ifakes.NewFakeBuildpack(dist.BuildpackDescriptor{