Skip to content
59 changes: 45 additions & 14 deletions build.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,19 @@ import (
type PackagerParameters interface {
}

func validateResult(result packit.BuildResult, err error) (packit.BuildResult, error) {
if err != nil {
return packit.BuildResult{}, err
}

return result, err
}

func Build(
logger scribe.Emitter,
commonBuildParameters pythoninstallers.CommonBuildParameters,
buildParameters map[string]PackagerParameters,
) packit.BuildFunc {
return func(context packit.BuildContext) (packit.BuildResult, error) {

if len(context.Plan.Entries) == 0 {
return packit.BuildResult{}, packit.Fail.WithMessage("empty plan: %s", context.Plan)
}

var results []packit.BuildResult

for _, entry := range context.Plan.Entries {
logger.Title("Handling %s", entry.Name)
parameters, ok := buildParameters[entry.Name]
Expand All @@ -50,45 +49,77 @@ func Build(
commonBuildParameters,
)(context)

return validateResult(result, err)
if err != nil {
return packit.BuildResult{}, err
}
results = append(results, result)

case pipenv.Pipenv:
result, err := pipenv.Build(
parameters.(pipenv.PipEnvBuildParameters),
commonBuildParameters,
)(context)

return validateResult(result, err)
if err != nil {
return packit.BuildResult{}, err
}
results = append(results, result)

case miniconda.Conda:
result, err := miniconda.Build(
parameters.(miniconda.CondaBuildParameters),
commonBuildParameters,
)(context)

return validateResult(result, err)
if err != nil {
return packit.BuildResult{}, err
}
results = append(results, result)

case poetry.PoetryDependency:
result, err := poetry.Build(
parameters.(poetry.PoetryBuildParameters),
commonBuildParameters,
)(context)

return validateResult(result, err)
if err != nil {
return packit.BuildResult{}, err
}
results = append(results, result)

case uv.Uv:
result, err := uv.Build(
parameters.(uv.UvBuildParameters),
commonBuildParameters,
)(context)

return validateResult(result, err)
if err != nil {
return packit.BuildResult{}, err
}
results = append(results, result)

default:
return packit.BuildResult{}, packit.Fail.WithMessage("unknown plan: %s", entry.Name)
}
}

return packit.BuildResult{}, packit.Fail.WithMessage("empty plan: %s", context.Plan)
return combineResults(results...), nil
}
}

func combineResults(results ...packit.BuildResult) packit.BuildResult {
if len(results) < 1 {
return packit.BuildResult{}
}
combinedResults := results[0]

for i := range results {
if i == 0 {
continue
}
combinedResults.Layers = append(combinedResults.Layers, results[i].Layers...)
combinedResults.Launch.BOM = append(combinedResults.Launch.BOM, results[i].Launch.BOM...)
combinedResults.Build.BOM = append(combinedResults.Build.BOM, results[i].Build.BOM...)
}
return combinedResults
}
30 changes: 17 additions & 13 deletions detect_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ import (

"github.com/paketo-buildpacks/packit/v2"
"github.com/paketo-buildpacks/packit/v2/scribe"

pythoninstallers "github.com/paketo-buildpacks/python-installers"
common "github.com/paketo-buildpacks/python-installers/pkg/installers/common"

miniconda "github.com/paketo-buildpacks/python-installers/pkg/installers/miniconda"
pip "github.com/paketo-buildpacks/python-installers/pkg/installers/pip"
Expand Down Expand Up @@ -61,7 +63,7 @@ func testDetect(t *testing.T, context spec.G, it spec.S) {
Requires: []packit.BuildPlanRequirement{
{
Name: pip.CPython,
Metadata: pip.BuildPlanMetadata{
Metadata: common.BuildPlanMetadata{
Build: true,
},
},
Expand All @@ -78,19 +80,20 @@ func testDetect(t *testing.T, context spec.G, it spec.S) {

plans = append(plans, packit.BuildPlan{
Provides: []packit.BuildPlanProvision{
{Name: pipenv.Pip},
{Name: pipenv.Pipenv},
},
Requires: []packit.BuildPlanRequirement{
{
Name: pipenv.Pip,
Metadata: pipenv.BuildPlanMetadata{
Name: pipenv.CPython,
Metadata: common.BuildPlanMetadata{
Build: true,
Launch: false,
},
},
{
Name: pipenv.CPython,
Metadata: pipenv.BuildPlanMetadata{
Name: pipenv.Pip,
Metadata: common.BuildPlanMetadata{
Build: true,
Launch: false,
},
Expand Down Expand Up @@ -130,23 +133,24 @@ func testDetect(t *testing.T, context spec.G, it spec.S) {
withPoetry := append(plans,
packit.BuildPlan{
Provides: []packit.BuildPlanProvision{
{Name: "poetry"},
{Name: poetry.Pip},
{Name: poetry.PoetryDependency},
},
Requires: []packit.BuildPlanRequirement{
{
Name: poetry.Pip,
Metadata: poetry.BuildPlanMetadata{
Build: true,
},
},
{
Name: poetry.CPython,
Metadata: poetry.BuildPlanMetadata{
Metadata: common.BuildPlanMetadata{
Build: true,
Version: "1.2.3",
VersionSource: "pyproject.toml",
},
},
{
Name: poetry.Pip,
Metadata: common.BuildPlanMetadata{
Build: true,
},
},
},
},
)
Expand Down
3 changes: 1 addition & 2 deletions integration.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,5 @@
],

"build-plan": "index.docker.io/paketocommunity/build-plan",
"cpython": "index.docker.io/paketobuildpacks/cpython",
"pip": "index.docker.io/paketobuildpacks/pip"
"cpython": "index.docker.io/paketobuildpacks/cpython"
}
5 changes: 0 additions & 5 deletions integration/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,6 @@ type TestSettings struct {
Online string
Offline string
}
Pip struct {
Online string
Offline string
}
BuildPlan struct {
Online string
}
Expand All @@ -47,7 +43,6 @@ type TestSettings struct {

Config struct {
CPython string `json:"cpython"`
Pip string `json:"pip"`
BuildPlan string `json:"build-plan"`
}
}
Expand Down
9 changes: 0 additions & 9 deletions integration/installers/init_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,15 +69,6 @@ func TestIntegration(t *testing.T) {
Execute(settings.Config.CPython)
Expect(err).NotTo(HaveOccurred())

settings.Buildpacks.Pip.Online, err = buildpackStore.Get.
Execute(settings.Config.Pip)
Expect(err).NotTo(HaveOccurred())

settings.Buildpacks.Pip.Offline, err = buildpackStore.Get.
WithOfflineDependencies().
Execute(settings.Config.Pip)
Expect(err).NotTo(HaveOccurred())

settings.Buildpacks.PythonInstallers.Online, err = buildpackStore.Get.
WithVersion("1.2.3").
Execute(root)
Expand Down
2 changes: 0 additions & 2 deletions integration/installers/pipenv_default_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ func pipenvTestDefault(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down Expand Up @@ -127,7 +126,6 @@ func pipenvTestDefault(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down
12 changes: 4 additions & 8 deletions integration/installers/pipenv_layer_reuse_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ func pipenvTestLayerReuse(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand All @@ -93,7 +92,6 @@ func pipenvTestLayerReuse(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand All @@ -119,8 +117,8 @@ func pipenvTestLayerReuse(t *testing.T, context spec.G, it spec.S) {
return cLogs.String()
}).Should(MatchRegexp(`pipenv, version \d+\.\d+\.\d+`))

Expect(secondImage.Buildpacks[2].Key).To(Equal(buildpackInfo.Buildpack.ID))
Expect(secondImage.Buildpacks[2].Layers["pipenv"].SHA).To(Equal(firstImage.Buildpacks[2].Layers["pipenv"].SHA))
Expect(secondImage.Buildpacks[1].Key).To(Equal(buildpackInfo.Buildpack.ID))
Expect(secondImage.Buildpacks[1].Layers["pipenv"].SHA).To(Equal(firstImage.Buildpacks[1].Layers["pipenv"].SHA))
})
})

Expand All @@ -142,7 +140,6 @@ func pipenvTestLayerReuse(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand All @@ -154,7 +151,6 @@ func pipenvTestLayerReuse(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down Expand Up @@ -200,8 +196,8 @@ func pipenvTestLayerReuse(t *testing.T, context spec.G, it spec.S) {
return cLogs.String()
}).Should(MatchRegexp(`pipenv, version \d+\.\d+\.\d+`))

Expect(secondImage.Buildpacks[2].Key).To(Equal(buildpackInfo.Buildpack.ID))
Expect(secondImage.Buildpacks[2].Layers["pipenv"].SHA).ToNot(Equal(firstImage.Buildpacks[2].Layers["pipenv"].SHA))
Expect(secondImage.Buildpacks[1].Key).To(Equal(buildpackInfo.Buildpack.ID))
Expect(secondImage.Buildpacks[1].Layers["pipenv"].SHA).ToNot(Equal(firstImage.Buildpacks[1].Layers["pipenv"].SHA))
})
})
}
2 changes: 0 additions & 2 deletions integration/installers/pipenv_versions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ func pipenvTestVersions(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down Expand Up @@ -110,7 +109,6 @@ func pipenvTestVersions(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down
5 changes: 0 additions & 5 deletions integration/installers/poetry_default_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ func poetryTestDefault(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down Expand Up @@ -98,7 +97,6 @@ func poetryTestDefault(t *testing.T, context spec.G, it spec.S) {
" Resolving CPython version",
" Candidate version sources (in priority order):",
` pyproject.toml -> "3.13.*"`,
` -> ""`,
` <unknown> -> ""`,
))
Expect(logs).To(ContainLines(
Expand Down Expand Up @@ -128,7 +126,6 @@ func poetryTestDefault(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down Expand Up @@ -161,7 +158,6 @@ func poetryTestDefault(t *testing.T, context spec.G, it spec.S) {
" Resolving CPython version",
" Candidate version sources (in priority order):",
` pyproject.toml -> "3.12.*"`,
` -> ""`,
` <unknown> -> ""`,
))
Expect(logs).To(ContainLines(
Expand Down Expand Up @@ -206,7 +202,6 @@ func poetryTestDefault(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down
4 changes: 1 addition & 3 deletions integration/installers/poetry_layer_reuse_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ func poetryTestLayerReuse(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand All @@ -103,7 +102,6 @@ func poetryTestLayerReuse(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand All @@ -129,7 +127,7 @@ func poetryTestLayerReuse(t *testing.T, context spec.G, it spec.S) {
return cLogs.String()
}).Should(MatchRegexp(`Poetry.*version \d+\.\d+\.\d+`))

Expect(secondImage.Buildpacks[0].Layers["poetry"].SHA).To(Equal(firstImage.Buildpacks[0].Layers["poetry"].SHA))
Expect(secondImage.Buildpacks[1].Layers["poetry"].SHA).To(Equal(firstImage.Buildpacks[1].Layers["poetry"].SHA))
})
})
}
2 changes: 0 additions & 2 deletions integration/installers/poetry_versions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ func poetryTestVersions(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down Expand Up @@ -110,7 +109,6 @@ func poetryTestVersions(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.CPython.Online,
settings.Buildpacks.Pip.Online,
settings.Buildpacks.PythonInstallers.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down
Loading
Loading