Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions constants.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package nodeengine

const (
Node = "node"
Npm = "npm"
Node = "node"
Npm = "npm"
Cpython = "cpython"

DepKey = "dependency-sha"
BuildKey = "build"
Expand Down
17 changes: 17 additions & 0 deletions detect.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package nodeengine

import (
"os"
"os/exec"
"path/filepath"

"github.com/paketo-buildpacks/packit/v2"
Expand All @@ -16,6 +17,8 @@ type VersionParser interface {
type BuildPlanMetadata struct {
Version string `toml:"version"`
VersionSource string `toml:"version-source"`
Build bool `toml:"build"`
Launch bool `toml:"launch"`
}

func Detect(nvmrcParser, nodeVersionParser VersionParser) packit.DetectFunc {
Expand Down Expand Up @@ -80,6 +83,20 @@ func Detect(nvmrcParser, nodeVersionParser VersionParser) packit.DetectFunc {
})
}

targetOs := os.Getenv("CNB_TARGET_DISTRO_NAME")
_, pythonNotFound := exec.LookPath("python")

installPython := (targetOs != "rhel" && pythonNotFound != nil)
if installPython {
requirements = append(requirements, packit.BuildPlanRequirement{
Name: Cpython,
Metadata: BuildPlanMetadata{
Build: true,
Launch: false,
},
})
}

return packit.DetectResult{
Plan: packit.BuildPlan{
Provides: []packit.BuildPlanProvision{
Expand Down
6 changes: 4 additions & 2 deletions integration.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
{
"build-plan": "github.com/paketo-community/build-plan",
"builders": [
"index.docker.io/paketobuildpacks/builder-jammy-buildpackless-base:latest"
]
"index.docker.io/paketobuildpacks/builder-jammy-buildpackless-base:latest",
"index.docker.io/paketobuildpacks/ubuntu-noble-builder-buildpackless:latest"
],
"cpython": "github.com/paketo-buildpacks/cpython"
}
14 changes: 14 additions & 0 deletions integration/init_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ var settings struct {
Processes struct {
Online string
}
Cpython struct {
Online string
Offline string
}
}

Buildpack struct {
Expand All @@ -38,6 +42,7 @@ var settings struct {

Config struct {
BuildPlan string `json:"build-plan"`
Cpython string `json:"cpython"`
}
}

Expand Down Expand Up @@ -73,6 +78,15 @@ func TestIntegration(t *testing.T) {
Execute(root)
Expect(err).NotTo(HaveOccurred())

settings.Buildpacks.Cpython.Online, err = buildpackStore.Get.
Execute(settings.Config.Cpython)
Expect(err).ToNot(HaveOccurred())

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

tmpBuildpackDir, err := os.MkdirTemp("", "node-engine-outdated-deps")
Expect(err).NotTo(HaveOccurred())

Expand Down
1 change: 1 addition & 0 deletions integration/inspector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ func testInspector(t *testing.T, context spec.G, it spec.S) {
image, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.Processes.Online,
).
Expand Down
1 change: 1 addition & 0 deletions integration/offline_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ func testOffline(t *testing.T, context spec.G, it spec.S) {
image, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Offline,
settings.Buildpacks.NodeEngine.Offline,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down
2 changes: 2 additions & 0 deletions integration/openssl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ func testOpenSSL(t *testing.T, context spec.G, it spec.S) {

image, logs, err = pack.WithNoColor().Build.
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down Expand Up @@ -106,6 +107,7 @@ func testOpenSSL(t *testing.T, context spec.G, it spec.S) {

image, logs, err = pack.WithNoColor().Build.
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down
1 change: 1 addition & 0 deletions integration/optimize_memory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ func testOptimizeMemory(t *testing.T, context spec.G, it spec.S) {
image, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.Processes.Online,
).
Expand Down
1 change: 1 addition & 0 deletions integration/project_path_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ func testProjectPath(t *testing.T, context spec.G, it spec.S) {
image, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down
1 change: 1 addition & 0 deletions integration/provides_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ func testProvides(t *testing.T, context spec.G, it spec.S) {
image, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down
35 changes: 21 additions & 14 deletions integration/reuse_layer_rebuild_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) {
firstImage, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand All @@ -80,9 +81,11 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) {

imageIDs[firstImage.ID] = struct{}{}

Expect(firstImage.Buildpacks).To(HaveLen(2))
Expect(firstImage.Buildpacks[0].Key).To(Equal(settings.Buildpack.ID))
Expect(firstImage.Buildpacks[0].Layers).To(HaveKey("node"))
//print first image content

Expect(firstImage.Buildpacks).To(HaveLen(3))
Expect(firstImage.Buildpacks[1].Key).To(Equal(settings.Buildpack.ID))
Expect(firstImage.Buildpacks[1].Layers).To(HaveKey("node"))

Expect(logs).To(ContainLines(
fmt.Sprintf("%s 1.2.3", settings.Buildpack.Name),
Expand Down Expand Up @@ -137,6 +140,7 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) {
secondImage, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand All @@ -145,9 +149,9 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) {

imageIDs[secondImage.ID] = struct{}{}

Expect(secondImage.Buildpacks).To(HaveLen(2))
Expect(secondImage.Buildpacks[0].Key).To(Equal(settings.Buildpack.ID))
Expect(secondImage.Buildpacks[0].Layers).To(HaveKey("node"))
Expect(secondImage.Buildpacks).To(HaveLen(3))
Expect(secondImage.Buildpacks[1].Key).To(Equal(settings.Buildpack.ID))
Expect(secondImage.Buildpacks[1].Layers).To(HaveKey("node"))

Expect(logs).To(ContainLines(
fmt.Sprintf("%s 1.2.3", settings.Buildpack.Name),
Expand Down Expand Up @@ -181,7 +185,8 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) {
Expect(err).NotTo(HaveOccurred())
Expect(content).To(ContainSubstring("hello world"))

Expect(secondImage.Buildpacks[0].Layers["node"].SHA).To(Equal(firstImage.Buildpacks[0].Layers["node"].SHA))
Expect(secondImage.Buildpacks[0].Layers["cpython"].SHA).To(Equal(firstImage.Buildpacks[0].Layers["cpython"].SHA))
Expect(secondImage.Buildpacks[1].Layers["node"].SHA).To(Equal(firstImage.Buildpacks[1].Layers["node"].SHA))
})
})

Expand All @@ -203,6 +208,7 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) {
firstImage, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand All @@ -212,9 +218,9 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) {

imageIDs[firstImage.ID] = struct{}{}

Expect(firstImage.Buildpacks).To(HaveLen(2))
Expect(firstImage.Buildpacks[0].Key).To(Equal(settings.Buildpack.ID))
Expect(firstImage.Buildpacks[0].Layers).To(HaveKey("node"))
Expect(firstImage.Buildpacks).To(HaveLen(3))
Expect(firstImage.Buildpacks[1].Key).To(Equal(settings.Buildpack.ID))
Expect(firstImage.Buildpacks[1].Layers).To(HaveKey("node"))

Expect(logs).To(ContainLines(
fmt.Sprintf("%s 1.2.3", settings.Buildpack.Name),
Expand Down Expand Up @@ -270,6 +276,7 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) {
secondImage, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand All @@ -279,9 +286,9 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) {

imageIDs[secondImage.ID] = struct{}{}

Expect(secondImage.Buildpacks).To(HaveLen(2))
Expect(secondImage.Buildpacks[0].Key).To(Equal(settings.Buildpack.ID))
Expect(secondImage.Buildpacks[0].Layers).To(HaveKey("node"))
Expect(secondImage.Buildpacks).To(HaveLen(3))
Expect(secondImage.Buildpacks[1].Key).To(Equal(settings.Buildpack.ID))
Expect(secondImage.Buildpacks[1].Layers).To(HaveKey("node"))

Expect(logs).To(ContainLines(
fmt.Sprintf("%s 1.2.3", settings.Buildpack.Name),
Expand Down Expand Up @@ -341,7 +348,7 @@ func testReusingLayerRebuild(t *testing.T, context spec.G, it spec.S) {
Expect(err).NotTo(HaveOccurred())
Expect(content).To(ContainSubstring("hello world"))

Expect(secondImage.Buildpacks[0].Layers["node"].SHA).NotTo(Equal(firstImage.Buildpacks[0].Layers["node"].SHA))
Expect(secondImage.Buildpacks[1].Layers["node"].SHA).NotTo(Equal(firstImage.Buildpacks[1].Layers["node"].SHA))
})
})
}
6 changes: 6 additions & 0 deletions integration/simple_app_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ func testSimple(t *testing.T, context spec.G, it spec.S) {
image, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down Expand Up @@ -183,6 +184,7 @@ func testSimple(t *testing.T, context spec.G, it spec.S) {
WithPullPolicy("never").
WithEnv(map[string]string{"NODE_ENV": "development", "NODE_VERBOSE": "true"}).
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down Expand Up @@ -248,6 +250,7 @@ func testSimple(t *testing.T, context spec.G, it spec.S) {
image, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down Expand Up @@ -334,6 +337,7 @@ func testSimple(t *testing.T, context spec.G, it spec.S) {
image, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down Expand Up @@ -415,6 +419,7 @@ func testSimple(t *testing.T, context spec.G, it spec.S) {
image, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Deprecated,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down Expand Up @@ -443,6 +448,7 @@ func testSimple(t *testing.T, context spec.G, it spec.S) {
image, logs, err = pack.WithNoColor().Build.
WithPullPolicy("never").
WithBuildpacks(
settings.Buildpacks.Cpython.Online,
settings.Buildpacks.NodeEngine.Online,
settings.Buildpacks.BuildPlan.Online,
).
Expand Down
Loading