From 88c906723023b0f3f1c5c6d370897d709b48035d Mon Sep 17 00:00:00 2001 From: Daniel Mikusa Date: Mon, 20 May 2024 23:14:36 -0400 Subject: [PATCH] Fix Github 107 A different fix for 107. It swaps Python for the `all` module that way the buildplan doesn't need to change. Signed-off-by: Daniel Mikusa --- dt/build.go | 17 ++++++++++++----- dt/build_test.go | 39 ++++++++++++++++++++++++++++++++++----- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/dt/build.go b/dt/build.go index 7e68858..c850ae1 100644 --- a/dt/build.go +++ b/dt/build.go @@ -57,11 +57,18 @@ func (b Build) Build(context libcnb.BuildContext) (libcnb.BuildResult, error) { uri := fmt.Sprintf("%s/v1/deployment/installer/agent/unix/paas/latest?bitness=64&skipMetadata=true&arch=%s", BaseURI(s), archForDynatrace()) - for _, t := range []string{"apache", "dotnet", "go", "java", "nginx", "nodejs", "php", "all", "sdk", "envoy"} { - if _, ok, err := pr.Resolve(fmt.Sprintf("dynatrace-%s", t)); err != nil { - return libcnb.BuildResult{}, fmt.Errorf("unable to resolve dynatrace-%s plan entry\n%w", t, err) - } else if ok { - uri = fmt.Sprintf("%s&include=%s", uri, t) + // not presently a specific python module, but we include "all" then it should work with Python + if _, ok, err := pr.Resolve("dynatrace-python"); err != nil { + return libcnb.BuildResult{}, fmt.Errorf("unable to resolve dynatrace-python plan entry\n%w", err) + } else if ok { + uri = fmt.Sprintf("%s&include=all", uri) + } else { + for _, t := range []string{"apache", "dotnet", "go", "java", "nginx", "nodejs", "php"} { + if _, ok, err := pr.Resolve(fmt.Sprintf("dynatrace-%s", t)); err != nil { + return libcnb.BuildResult{}, fmt.Errorf("unable to resolve dynatrace-%s plan entry\n%w", t, err) + } else if ok { + uri = fmt.Sprintf("%s&include=%s", uri, t) + } } } diff --git a/dt/build_test.go b/dt/build_test.go index 02c775d..4de0733 100644 --- a/dt/build_test.go +++ b/dt/build_test.go @@ -44,6 +44,18 @@ func getExpectedDependency(serverUrl string) libpak.BuildpackDependency { } } +func getExpectedAllDependency(serverUrl string) libpak.BuildpackDependency { + return libpak.BuildpackDependency{ + ID: "dynatrace-oneagent", + Name: "Dynatrace OneAgent", + Version: "test-version", + URI: fmt.Sprintf("%s/v1/deployment/installer/agent/unix/paas/latest?bitness=64&skipMetadata=true&arch=arm&include=all", serverUrl), + Stacks: []string{stackId}, + PURL: "pkg:generic/dynatrace-one-agent@test-version?arch=arm64", + CPEs: []string{"cpe:2.3:a:dynatrace:one-agent:test-version:*:*:*:*:*:*:*"}, + } +} + func verifyBOM(bom *libcnb.BOM) { ExpectWithOffset(1, bom.Entries).To(HaveLen(2)) ExpectWithOffset(1, bom.Entries[0].Name).To(Equal("dynatrace-oneagent")) @@ -55,10 +67,10 @@ func verifyBOM(bom *libcnb.BOM) { } -func verifyLayers(layers []libcnb.LayerContributor, serverUrl string) { +func verifyLayers(layers []libcnb.LayerContributor, serverUrl string, expectation func(string) libpak.BuildpackDependency) { ExpectWithOffset(1, layers).To(HaveLen(2)) ExpectWithOffset(1, layers[0].Name()).To(Equal("dynatrace-oneagent")) - ExpectWithOffset(1, layers[0].(dt.Agent).LayerContributor.Dependency).To(Equal(getExpectedDependency(serverUrl))) + ExpectWithOffset(1, layers[0].(dt.Agent).LayerContributor.Dependency).To(Equal(expectation(serverUrl))) ExpectWithOffset(1, layers[1].Name()).To(Equal("helper")) ExpectWithOffset(1, layers[1].(libpak.HelperLayerContributor).Names).To(Equal([]string{"properties"})) } @@ -113,7 +125,7 @@ func testBuild(t *testing.T, context spec.G, it spec.S) { result, err := dt.Build{}.Build(ctx) Expect(err).NotTo(HaveOccurred()) - verifyLayers(result.Layers, server.URL()) + verifyLayers(result.Layers, server.URL(), getExpectedDependency) verifyBOM(result.BOM) }) @@ -139,7 +151,7 @@ func testBuild(t *testing.T, context spec.G, it spec.S) { result, err := dt.Build{}.Build(ctx) Expect(err).NotTo(HaveOccurred()) - verifyLayers(result.Layers, server.URL()) + verifyLayers(result.Layers, server.URL(), getExpectedDependency) verifyBOM(result.BOM) }) @@ -165,8 +177,25 @@ func testBuild(t *testing.T, context spec.G, it spec.S) { result, err := dt.Build{}.Build(ctx) Expect(err).NotTo(HaveOccurred()) - verifyLayers(result.Layers, server.URL()) + verifyLayers(result.Layers, server.URL(), getExpectedDependency) verifyBOM(result.BOM) }) + context("python", func() { + it.Before(func() { + t.Setenv("BP_ARCH", "arm64") + + ctx.Plan.Entries = append(ctx.Plan.Entries, + libcnb.BuildpackPlanEntry{Name: "dynatrace-java"}, + libcnb.BuildpackPlanEntry{Name: "dynatrace-python"}) + }) + + it("contributes all agent", func() { + result, err := dt.Build{}.Build(ctx) + Expect(err).NotTo(HaveOccurred()) + + verifyLayers(result.Layers, server.URL(), getExpectedAllDependency) + verifyBOM(result.BOM) + }) + }) }