Skip to content

Commit f94045a

Browse files
joshuatcaseythitch97
authored andcommitted
Use draft.Planner from packit
1 parent 673d0d0 commit f94045a

File tree

4 files changed

+54
-138
lines changed

4 files changed

+54
-138
lines changed

build.go

+5-13
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88

99
"github.com/paketo-buildpacks/packit/v2"
1010
"github.com/paketo-buildpacks/packit/v2/chronos"
11+
"github.com/paketo-buildpacks/packit/v2/draft"
1112
"github.com/paketo-buildpacks/packit/v2/postal"
1213
"github.com/paketo-buildpacks/packit/v2/sbom"
1314
"github.com/paketo-buildpacks/packit/v2/scribe"
@@ -22,15 +23,6 @@ type FileManager interface {
2223
WriteConfig(layerRoot, cnbPath string, data PhpIniConfig) (defaultConfig string, buildpackConfig string, err error)
2324
}
2425

25-
//go:generate faux --interface EntryResolver --output fakes/entry_resolver.go
26-
27-
// EntryResolver defines the interface for picking the most relevant entry from
28-
// the Buildpack Plan entries.
29-
type EntryResolver interface {
30-
Resolve(name string, entries []packit.BuildpackPlanEntry, priorities []interface{}) (packit.BuildpackPlanEntry, []packit.BuildpackPlanEntry)
31-
MergeLayerTypes(name string, entries []packit.BuildpackPlanEntry) (launch, build bool)
32-
}
33-
3426
//go:generate faux --interface DependencyManager --output fakes/dependency_manager.go
3527

3628
// DependencyManager defines the interface for picking the best matching
@@ -61,8 +53,7 @@ type SBOMGenerator interface {
6153
// and generate a Bill-of-Materials. On rebuilds, it reuses the cached
6254
// dependency if the SHA256 of the requested version matches the SHA256 of the
6355
// cached version. Build also sets up a default php.ini configuration.
64-
func Build(entryResolver EntryResolver,
65-
dependencies DependencyManager,
56+
func Build(dependencies DependencyManager,
6657
files FileManager,
6758
environment EnvironmentConfiguration,
6859
sbomGenerator SBOMGenerator,
@@ -74,7 +65,8 @@ func Build(entryResolver EntryResolver,
7465
logger.Title("%s %s", context.BuildpackInfo.Name, context.BuildpackInfo.Version)
7566
logger.Process("Resolving PHP version")
7667

77-
entry, entries := entryResolver.Resolve(PHPDependency, context.Plan.Entries, EntryPriorities)
68+
planner := draft.NewPlanner()
69+
entry, entries := planner.Resolve(PHPDependency, context.Plan.Entries, EntryPriorities)
7870
logger.Candidates(entries)
7971

8072
version, _ := entry.Metadata["version"].(string)
@@ -95,7 +87,7 @@ func Build(entryResolver EntryResolver,
9587
logger.Debug.Break()
9688

9789
legacyBOM := dependencies.GenerateBillOfMaterials(dependency)
98-
launch, build := entryResolver.MergeLayerTypes(PHPDependency, context.Plan.Entries)
90+
launch, build := planner.MergeLayerTypes(PHPDependency, context.Plan.Entries)
9991

10092
phpLayer.Launch, phpLayer.Build, phpLayer.Cache = launch, build, build
10193

build_test.go

+48-57
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
3030
layersDir string
3131
workingDir string
3232
cnbDir string
33-
entryResolver *fakes.EntryResolver
3433
dependencyManager *fakes.DependencyManager
3534
sbomGenerator *fakes.SBOMGenerator
3635
files *fakes.FileManager
@@ -49,18 +48,6 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
4948
cnbDir, err = os.MkdirTemp("", "cnb")
5049
Expect(err).NotTo(HaveOccurred())
5150

52-
entryResolver = &fakes.EntryResolver{}
53-
entryResolver.ResolveCall.Returns.BuildpackPlanEntry = packit.BuildpackPlanEntry{
54-
Name: "php",
55-
Metadata: map[string]interface{}{
56-
"version": "7.2.*",
57-
"version-source": "some-source",
58-
},
59-
}
60-
61-
entryResolver.MergeLayerTypesCall.Returns.Launch = false
62-
entryResolver.MergeLayerTypesCall.Returns.Build = false
63-
6451
dependencyManager = &fakes.DependencyManager{}
6552
dependencyManager.ResolveCall.Returns.Dependency = postal.Dependency{Name: "PHP"}
6653
dependencyManager.GenerateBillOfMaterialsCall.Returns.BOMEntrySlice = []packit.BOMEntry{
@@ -95,7 +82,7 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
9582
buffer = bytes.NewBuffer(nil)
9683
logEmitter := scribe.NewEmitter(buffer)
9784

98-
build = phpdist.Build(entryResolver, dependencyManager, files, environment, sbomGenerator, logEmitter, clock)
85+
build = phpdist.Build(dependencyManager, files, environment, sbomGenerator, logEmitter, clock)
9986
})
10087

10188
it.After(func() {
@@ -147,23 +134,6 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
147134
},
148135
}))
149136

150-
Expect(entryResolver.ResolveCall.Receives.Name).To(Equal(phpdist.PHPDependency))
151-
Expect(entryResolver.ResolveCall.Receives.Entries).To(Equal([]packit.BuildpackPlanEntry{
152-
{
153-
Name: "php",
154-
Metadata: map[string]interface{}{
155-
"version": "7.2.*",
156-
"version-source": "some-source",
157-
},
158-
},
159-
}))
160-
Expect(entryResolver.ResolveCall.Receives.Priorities).To(Equal([]interface{}{
161-
"BP_PHP_VERSION",
162-
"composer.lock",
163-
"composer.json",
164-
"default-versions",
165-
}))
166-
167137
Expect(dependencyManager.ResolveCall.Receives.Path).To(Equal(filepath.Join(cnbDir, "buildpack.toml")))
168138
Expect(dependencyManager.ResolveCall.Receives.Id).To(Equal("php"))
169139
Expect(dependencyManager.ResolveCall.Receives.Version).To(Equal("7.2.*"))
@@ -246,30 +216,6 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
246216
})
247217

248218
context("when the build plan entry includes the build, launch flags", func() {
249-
var workingDir string
250-
251-
it.Before(func() {
252-
var err error
253-
workingDir, err = os.MkdirTemp("", "working-dir")
254-
Expect(err).NotTo(HaveOccurred())
255-
256-
entryResolver.ResolveCall.Returns.BuildpackPlanEntry = packit.BuildpackPlanEntry{
257-
Name: "php",
258-
Metadata: map[string]interface{}{
259-
"version": "7.2.*",
260-
"version-source": "some-source",
261-
"launch": true,
262-
"build": true,
263-
},
264-
}
265-
entryResolver.MergeLayerTypesCall.Returns.Launch = true
266-
entryResolver.MergeLayerTypesCall.Returns.Build = true
267-
})
268-
269-
it.After(func() {
270-
Expect(os.RemoveAll(workingDir)).To(Succeed())
271-
})
272-
273219
it("marks the php layer as build, cache and launch", func() {
274220
result, err := build(packit.BuildContext{
275221
CNBPath: cnbDir,
@@ -329,6 +275,53 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
329275
})
330276
})
331277

278+
context("when the build plan entry includes multiples version-sources", func() {
279+
it("has a priority list", func() {
280+
Expect(phpdist.EntryPriorities).To(Equal([]interface{}{
281+
"BP_PHP_VERSION",
282+
"composer.lock",
283+
"composer.json",
284+
"default-versions",
285+
}))
286+
})
287+
288+
it("prioritizes BP_PHP_VERSION", func() {
289+
_, err := build(packit.BuildContext{
290+
CNBPath: cnbDir,
291+
Stack: "some-stack",
292+
WorkingDir: workingDir,
293+
Plan: packit.BuildpackPlan{
294+
Entries: []packit.BuildpackPlanEntry{
295+
{
296+
Name: "php",
297+
Metadata: map[string]interface{}{
298+
"version": "version-from-composer.lock",
299+
"version-source": "composer.lock",
300+
},
301+
},
302+
{
303+
Name: "php",
304+
Metadata: map[string]interface{}{
305+
"version": "version-from-BP_PHP_VERSION",
306+
"version-source": "BP_PHP_VERSION",
307+
},
308+
},
309+
{
310+
Name: "php",
311+
Metadata: map[string]interface{}{
312+
"version": "version-from-something-else",
313+
"version-source": "something-else",
314+
},
315+
},
316+
},
317+
},
318+
Layers: packit.Layers{Path: layersDir},
319+
})
320+
Expect(err).NotTo(HaveOccurred())
321+
Expect(dependencyManager.ResolveCall.Receives.Version).To(Equal("version-from-BP_PHP_VERSION"))
322+
})
323+
})
324+
332325
context("when there is a dependency cache match", func() {
333326
it.Before(func() {
334327
err := os.WriteFile(filepath.Join(layersDir, "php.toml"), []byte("[metadata]\ndependency-sha = \"some-sha\"\n"), 0644)
@@ -338,8 +331,6 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
338331
Name: "PHP",
339332
SHA256: "some-sha",
340333
}
341-
entryResolver.MergeLayerTypesCall.Returns.Launch = true
342-
entryResolver.MergeLayerTypesCall.Returns.Build = true
343334
})
344335

345336
it("exits build process early", func() {

fakes/entry_resolver.go

-64
This file was deleted.

run/main.go

+1-4
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ package main
33
import (
44
"os"
55

6-
packit "github.com/paketo-buildpacks/packit/v2"
6+
"github.com/paketo-buildpacks/packit/v2"
77
"github.com/paketo-buildpacks/packit/v2/cargo"
88
"github.com/paketo-buildpacks/packit/v2/chronos"
9-
"github.com/paketo-buildpacks/packit/v2/draft"
109
"github.com/paketo-buildpacks/packit/v2/postal"
1110
"github.com/paketo-buildpacks/packit/v2/sbom"
1211
"github.com/paketo-buildpacks/packit/v2/scribe"
@@ -21,15 +20,13 @@ func (f Generator) GenerateFromDependency(dependency postal.Dependency, path str
2120

2221
func main() {
2322
logEmitter := scribe.NewEmitter(os.Stdout).WithLevel(os.Getenv("BP_LOG_LEVEL"))
24-
entryResolver := draft.NewPlanner()
2523
dependencyManager := postal.NewService(cargo.NewTransport())
2624
environment := phpdist.NewEnvironment()
2725
sbomGenerator := Generator{}
2826

2927
packit.Run(
3028
phpdist.Detect(),
3129
phpdist.Build(
32-
entryResolver,
3330
dependencyManager,
3431
phpdist.NewPHPFileManager(),
3532
environment,

0 commit comments

Comments
 (0)