diff --git a/integration.json b/integration.json index fe4aabc2..ce464e62 100644 --- a/integration.json +++ b/integration.json @@ -1,5 +1,10 @@ { - "builders": ["paketobuildpacks/builder:buildpackless-base", "paketobuildpacks/builder-jammy-buildpackless-base"], + "builders": [ + "paketocommunity/builder-ubi-buildpackless-base", + "paketobuildpacks/builder:buildpackless-base", + "paketobuildpacks/builder-jammy-buildpackless-base" + ], + "ubi-nodejs-extension": "github.com/paketo-community/ubi-nodejs-extension", "node-engine": "github.com/paketo-buildpacks/node-engine", "npm-install": "github.com/paketo-buildpacks/npm-install", "yarn": "github.com/paketo-buildpacks/yarn", diff --git a/integration/init_test.go b/integration/init_test.go index 31e20d80..8d4f7555 100644 --- a/integration/init_test.go +++ b/integration/init_test.go @@ -38,15 +38,21 @@ var settings struct { Online string } } + Extensions struct { + UbiNodejsExtension struct { + Online string + } + } Buildpack struct { ID string Name string } Config struct { - NodeEngine string `json:"node-engine"` - NPMInstall string `json:"npm-install"` - Yarn string `json:"yarn"` - YarnInstall string `json:"yarn-install"` + NodeEngine string `json:"node-engine"` + NPMInstall string `json:"npm-install"` + Yarn string `json:"yarn"` + YarnInstall string `json:"yarn-install"` + UbiNodejsExtension string `json:"ubi-nodejs-extension"` } } @@ -64,7 +70,7 @@ func TestIntegration(t *testing.T) { file, err = os.Open("../buildpack.toml") Expect(err).NotTo(HaveOccurred()) - _, err = toml.NewDecoder(file).Decode(&settings.Buildpack) + _, err = toml.NewDecoder(file).Decode(&settings) Expect(err).NotTo(HaveOccurred()) root, err := filepath.Abs("./..") @@ -72,6 +78,17 @@ func TestIntegration(t *testing.T) { buildpackStore := occam.NewBuildpackStore() + pack := occam.NewPack() + + builder, err := pack.Builder.Inspect.Execute() + Expect(err).NotTo(HaveOccurred()) + + settings.Extensions.UbiNodejsExtension.Online, err = buildpackStore.Get. + Execute(settings.Config.UbiNodejsExtension) + Expect(err).ToNot(HaveOccurred()) + if builder.BuilderName == "paketocommunity/builder-ubi-buildpackless-base" { + } + settings.Buildpacks.NodeRunScript.Online, err = buildpackStore.Get. WithVersion("1.2.3"). Execute(root) @@ -93,13 +110,12 @@ func TestIntegration(t *testing.T) { Execute(settings.Config.YarnInstall) Expect(err).NotTo(HaveOccurred()) - pack := occam.NewPack() docker := occam.NewDocker() suite := spec.New("Integration", spec.Report(report.Terminal{}), spec.Parallel()) - suite("SimpleYarnApp", testSimpleYarnApp(pack, docker)) - suite("SimpleNPMApp", testSimpleNPMApp(pack, docker)) suite("ProjectPathApp", testProjectPathApp(pack, docker)) + suite("SimpleNPMApp", testSimpleNPMApp(pack, docker)) + suite("SimpleYarnApp", testSimpleYarnApp(pack, docker)) suite("VueNPMApp", testVueNPMApp(pack, docker)) suite("VueYarnApp", testVueYarnApp(pack, docker)) suite.Run(t) diff --git a/integration/project_path_test.go b/integration/project_path_test.go index 7602c4fa..f60b5754 100644 --- a/integration/project_path_test.go +++ b/integration/project_path_test.go @@ -18,6 +18,10 @@ func testProjectPathApp(pack occam.Pack, docker occam.Docker) func(*testing.T, s var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually + + pullPolicy = "never" + extenderBuildStr = "" + extenderBuildStrEscaped = "" ) context("when building a simple yarn app inside a nested directory", func() { @@ -33,6 +37,12 @@ func testProjectPathApp(pack occam.Pack, docker occam.Docker) func(*testing.T, s var err error name, err = occam.RandomName() Expect(err).NotTo(HaveOccurred()) + + if settings.Extensions.UbiNodejsExtension.Online != "" { + pullPolicy = "always" + extenderBuildStr = "[extender (build)] " + extenderBuildStrEscaped = `\[extender \(build\)\] ` + } }) it.After(func() { @@ -49,6 +59,9 @@ func testProjectPathApp(pack occam.Pack, docker occam.Docker) func(*testing.T, s var logs fmt.Stringer image, logs, err = pack.WithNoColor().Build. + WithExtensions( + settings.Extensions.UbiNodejsExtension.Online, + ). WithBuildpacks( settings.Buildpacks.NodeEngine.Online, settings.Buildpacks.Yarn.Online, @@ -58,24 +71,24 @@ func testProjectPathApp(pack occam.Pack, docker occam.Docker) func(*testing.T, s WithEnv(map[string]string{ "BP_NODE_RUN_SCRIPTS": "test_script_1,test_script_2", "BP_NODE_PROJECT_PATH": "nested_yarn_app"}). - WithPullPolicy("never"). + WithPullPolicy(pullPolicy). Execute(name, source) Expect(err).NotTo(HaveOccurred(), logs.String()) Expect(logs).To(ContainLines( - MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, settings.Buildpack.Name)), - " Executing build process", - " Running 'yarn run test_script_1'", - MatchRegexp(` yarn run v\d+\.\d+\.\d+$`), - " $ echo \"some commands\"", - " some commands", - MatchRegexp(` Done in \d+\.\d+s\.`), + MatchRegexp(fmt.Sprintf(`%s%s \d+\.\d+\.\d+`, extenderBuildStrEscaped, settings.Buildpack.Name)), + extenderBuildStr+" Executing build process", + extenderBuildStr+" Running 'yarn run test_script_1'", + MatchRegexp(extenderBuildStrEscaped+` yarn run v\d+\.\d+\.\d+$`), + extenderBuildStr+" $ echo \"some commands\"", + extenderBuildStr+" some commands", + MatchRegexp(extenderBuildStrEscaped+` Done in \d+\.\d+s\.`), )) Expect(logs).To(ContainLines( - " Running 'yarn run test_script_2'", - MatchRegexp(` yarn run v\d+\.\d+\.\d+$`), - " $ touch dummyfile.txt", - MatchRegexp(` Done in \d+\.\d+s\.`), + extenderBuildStr+" Running 'yarn run test_script_2'", + MatchRegexp(extenderBuildStrEscaped+` yarn run v\d+\.\d+\.\d+$`), + extenderBuildStr+" $ touch dummyfile.txt", + MatchRegexp(extenderBuildStrEscaped+` Done in \d+\.\d+s\.`), )) Expect(logs).To(ContainLines(MatchRegexp(` Completed in ([0-9]*(\.[0-9]*)?[a-z]+)+`))) diff --git a/integration/simple_npm_app_test.go b/integration/simple_npm_app_test.go index 578db4aa..7f5c2f0f 100644 --- a/integration/simple_npm_app_test.go +++ b/integration/simple_npm_app_test.go @@ -21,6 +21,10 @@ func testSimpleNPMApp(pack occam.Pack, docker occam.Docker) func(*testing.T, spe name string source string + + pullPolicy = "never" + extenderBuildStr = "" + extenderBuildStrEscaped = "" ) it.Before(func() { @@ -30,6 +34,12 @@ func testSimpleNPMApp(pack occam.Pack, docker occam.Docker) func(*testing.T, spe source, err = occam.Source(filepath.Join("testdata", "simple_npm_app")) Expect(err).NotTo(HaveOccurred()) + + if settings.Extensions.UbiNodejsExtension.Online != "" { + pullPolicy = "always" + extenderBuildStr = "[extender (build)] " + extenderBuildStrEscaped = `\[extender \(build\)\] ` + } }) it.After(func() { @@ -52,35 +62,39 @@ func testSimpleNPMApp(pack occam.Pack, docker occam.Docker) func(*testing.T, spe var logs fmt.Stringer var err error image, logs, err = pack.Build. + WithExtensions( + settings.Extensions.UbiNodejsExtension.Online, + ). WithBuildpacks( settings.Buildpacks.NodeEngine.Online, settings.Buildpacks.NPMInstall.Online, settings.Buildpacks.NodeRunScript.Online, ). WithEnv(map[string]string{"BP_NODE_RUN_SCRIPTS": "test_script_1,test_script_2"}). - WithPullPolicy("never"). + WithPullPolicy(pullPolicy). Execute(name, source) Expect(err).NotTo(HaveOccurred(), logs.String()) Expect(logs).To(ContainLines( - MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, settings.Buildpack.Name)), - " Executing build process", - " Running 'npm run test_script_1'", - " ", - MatchRegexp(` > simple_npm_app@\d+\.\d+\.\d+ test_script_1`), - " > echo \"some commands\"", - " ", - " some commands", + MatchRegexp(fmt.Sprintf(`%s%s \d+\.\d+\.\d+`, extenderBuildStrEscaped, settings.Buildpack.Name)), + extenderBuildStr+" Executing build process", + extenderBuildStr+" Running 'npm run test_script_1'", )) Expect(logs).To(ContainLines( - " Running 'npm run test_script_2'", - " ", - MatchRegexp(` > simple_npm_app@\d+\.\d+\.\d+ test_script_2`), - " > touch dummyfile.txt", - " ", + MatchRegexp(extenderBuildStrEscaped+` > simple_npm_app@\d+\.\d+\.\d+ test_script_1`), + extenderBuildStr+" > echo \"some commands\"", + extenderBuildStr+" ", + extenderBuildStr+" some commands", )) Expect(logs).To(ContainLines( - MatchRegexp(` Completed in ([0-9]*(\.[0-9]*)?[a-z]+)+`), + extenderBuildStr+" Running 'npm run test_script_2'", + extenderBuildStr+" ", + MatchRegexp(extenderBuildStrEscaped+` > simple_npm_app@\d+\.\d+\.\d+ test_script_2`), + extenderBuildStr+" > touch dummyfile.txt", + extenderBuildStr+" ", + )) + Expect(logs).To(ContainLines( + MatchRegexp(extenderBuildStrEscaped + ` Completed in ([0-9]*(\.[0-9]*)?[a-z]+)+`), )) container, err = docker.Container.Run. @@ -99,13 +113,16 @@ func testSimpleNPMApp(pack occam.Pack, docker occam.Docker) func(*testing.T, spe context("when BP_NODE_RUN_SCRIPTS is explicitly deactivated", func() { it("fails detection", func() { _, logs, err := pack.WithVerbose().Build. + WithExtensions( + settings.Extensions.UbiNodejsExtension.Online, + ). WithBuildpacks( settings.Buildpacks.NodeEngine.Online, settings.Buildpacks.NPMInstall.Online, settings.Buildpacks.NodeRunScript.Online, ). WithEnv(map[string]string{"BP_NODE_RUN_SCRIPTS": ""}). - WithPullPolicy("never"). + WithPullPolicy(pullPolicy). Execute(name, source) Expect(err).To(HaveOccurred()) Expect(logs).To(ContainLines( diff --git a/integration/simple_yarn_app_test.go b/integration/simple_yarn_app_test.go index 7af9f582..76058fd2 100644 --- a/integration/simple_yarn_app_test.go +++ b/integration/simple_yarn_app_test.go @@ -18,6 +18,10 @@ func testSimpleYarnApp(pack occam.Pack, docker occam.Docker) func(*testing.T, sp var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually + + pullPolicy = "never" + extenderBuildStr = "" + extenderBuildStrEscaped = "" ) context("when building a simple yarn app", func() { @@ -33,6 +37,12 @@ func testSimpleYarnApp(pack occam.Pack, docker occam.Docker) func(*testing.T, sp var err error name, err = occam.RandomName() Expect(err).NotTo(HaveOccurred()) + + if settings.Extensions.UbiNodejsExtension.Online != "" { + pullPolicy = "always" + extenderBuildStr = "[extender (build)] " + extenderBuildStrEscaped = `\[extender \(build\)\] ` + } }) it.After(func() { @@ -49,6 +59,9 @@ func testSimpleYarnApp(pack occam.Pack, docker occam.Docker) func(*testing.T, sp var logs fmt.Stringer image, logs, err = pack.WithNoColor().Build. + WithExtensions( + settings.Extensions.UbiNodejsExtension.Online, + ). WithBuildpacks( settings.Buildpacks.NodeEngine.Online, settings.Buildpacks.Yarn.Online, @@ -56,27 +69,27 @@ func testSimpleYarnApp(pack occam.Pack, docker occam.Docker) func(*testing.T, sp settings.Buildpacks.NodeRunScript.Online, ). WithEnv(map[string]string{"BP_NODE_RUN_SCRIPTS": "test_script_1,test_script_2"}). - WithPullPolicy("never"). + WithPullPolicy(pullPolicy). Execute(name, source) Expect(err).NotTo(HaveOccurred(), logs.String()) Expect(logs).To(ContainLines( - MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, settings.Buildpack.Name)), - " Executing build process", - " Running 'yarn run test_script_1'", - MatchRegexp(` yarn run v\d+\.\d+\.\d+`), - " $ echo \"some commands\"", - " some commands", - MatchRegexp(` Done in \d+\.\d+s\.`), + MatchRegexp(fmt.Sprintf(`%s%s \d+\.\d+\.\d+`, extenderBuildStrEscaped, settings.Buildpack.Name)), + extenderBuildStr+" Executing build process", + extenderBuildStr+" Running 'yarn run test_script_1'", + MatchRegexp(extenderBuildStrEscaped+` yarn run v\d+\.\d+\.\d+`), + extenderBuildStr+" $ echo \"some commands\"", + extenderBuildStr+" some commands", + MatchRegexp(extenderBuildStrEscaped+` Done in \d+\.\d+s\.`), )) Expect(logs).To(ContainLines( - " Running 'yarn run test_script_2'", - MatchRegexp(` yarn run v\d+\.\d+\.\d+`), - " $ touch dummyfile.txt", - MatchRegexp(` Done in \d+\.\d+s\.`), + extenderBuildStr+" Running 'yarn run test_script_2'", + MatchRegexp(extenderBuildStrEscaped+` yarn run v\d+\.\d+\.\d+`), + extenderBuildStr+" $ touch dummyfile.txt", + MatchRegexp(extenderBuildStrEscaped+` Done in \d+\.\d+s\.`), )) Expect(logs).To(ContainLines( - MatchRegexp(` Completed in ([0-9]*(\.[0-9]*)?[a-z]+)+`), + MatchRegexp(extenderBuildStrEscaped + ` Completed in ([0-9]*(\.[0-9]*)?[a-z]+)+`), )) container, err = docker.Container.Run. diff --git a/integration/vue_npm_app_test.go b/integration/vue_npm_app_test.go index 65902ad6..0be7d767 100644 --- a/integration/vue_npm_app_test.go +++ b/integration/vue_npm_app_test.go @@ -18,6 +18,10 @@ func testVueNPMApp(pack occam.Pack, docker occam.Docker) func(*testing.T, spec.G var ( Expect = NewWithT(t).Expect Eventually = NewWithT(t).Eventually + + pullPolicy = "never" + extenderBuildStr = "" + extenderBuildStrEscaped = "" ) context("when building a Vue npm app", func() { @@ -33,6 +37,12 @@ func testVueNPMApp(pack occam.Pack, docker occam.Docker) func(*testing.T, spec.G var err error name, err = occam.RandomName() Expect(err).NotTo(HaveOccurred()) + + if settings.Extensions.UbiNodejsExtension.Online != "" { + pullPolicy = "always" + extenderBuildStr = "[extender (build)] " + extenderBuildStrEscaped = `\[extender \(build\)\] ` + } }) it.After(func() { @@ -49,27 +59,30 @@ func testVueNPMApp(pack occam.Pack, docker occam.Docker) func(*testing.T, spec.G var logs fmt.Stringer image, logs, err = pack.WithNoColor().Build. + WithExtensions( + settings.Extensions.UbiNodejsExtension.Online, + ). WithBuildpacks( settings.Buildpacks.NodeEngine.Online, settings.Buildpacks.NPMInstall.Online, settings.Buildpacks.NodeRunScript.Online, ). - WithPullPolicy("never"). + WithPullPolicy(pullPolicy). Execute(name, source) Expect(err).NotTo(HaveOccurred(), logs.String()) Expect(logs).To(ContainLines( - MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, settings.Buildpack.Name)), - " Executing build process", - " Running 'npm run build'", - " ", - MatchRegexp(` > vue_app@\d+\.\d+\.\d+ build`), - " > vue-cli-service build", + MatchRegexp(fmt.Sprintf(`%s%s \d+\.\d+\.\d+`, extenderBuildStrEscaped, settings.Buildpack.Name)), + extenderBuildStr+" Executing build process", + extenderBuildStr+" Running 'npm run build'", + extenderBuildStr+" ", + MatchRegexp(extenderBuildStrEscaped+` > vue_app@\d+\.\d+\.\d+ build`), + extenderBuildStr+" > vue-cli-service build", )) Expect(logs).To(ContainLines( - " DONE Build complete. The dist directory is ready to be deployed.", + extenderBuildStr + " DONE Build complete. The dist directory is ready to be deployed.", )) - Expect(logs).To(ContainLines(MatchRegexp(` Completed in ([0-9]*(\.[0-9]*)?[a-z]+)+`))) + Expect(logs).To(ContainLines(MatchRegexp(extenderBuildStrEscaped + ` Completed in ([0-9]*(\.[0-9]*)?[a-z]+)+`))) container, err = docker.Container.Run. WithCommand("ls -al /workspace/dist/"). diff --git a/integration/vue_yarn_app_test.go b/integration/vue_yarn_app_test.go index 36523b86..4b0d1b88 100644 --- a/integration/vue_yarn_app_test.go +++ b/integration/vue_yarn_app_test.go @@ -27,12 +27,22 @@ func testVueYarnApp(pack occam.Pack, docker occam.Docker) func(*testing.T, spec. name string source string + + pullPolicy = "never" + extenderBuildStr = "" + extenderBuildStrEscaped = "" ) it.Before(func() { var err error name, err = occam.RandomName() Expect(err).NotTo(HaveOccurred()) + + if settings.Extensions.UbiNodejsExtension.Online != "" { + pullPolicy = "always" + extenderBuildStr = "[extender (build)] " + extenderBuildStrEscaped = `\[extender \(build\)\] ` + } }) it.After(func() { @@ -49,28 +59,32 @@ func testVueYarnApp(pack occam.Pack, docker occam.Docker) func(*testing.T, spec. var logs fmt.Stringer image, logs, err = pack.WithNoColor().Build. + WithExtensions( + settings.Extensions.UbiNodejsExtension.Online, + ). WithBuildpacks( settings.Buildpacks.NodeEngine.Online, settings.Buildpacks.Yarn.Online, settings.Buildpacks.YarnInstall.Online, settings.Buildpacks.NodeRunScript.Online, ). - WithPullPolicy("never"). + WithPullPolicy(pullPolicy). Execute(name, source) + Expect(err).NotTo(HaveOccurred(), logs.String()) Expect(logs).To(ContainLines( - MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, settings.Buildpack.Name)), - " Executing build process", - " Running 'yarn run build'", - MatchRegexp(` yarn run v\d+\.\d+\.\d+`), - " $ vue-cli-service build", + MatchRegexp(fmt.Sprintf(`%s%s \d+\.\d+\.\d+`, extenderBuildStrEscaped, settings.Buildpack.Name)), + extenderBuildStr+" Executing build process", + extenderBuildStr+" Running 'yarn run build'", + MatchRegexp(extenderBuildStrEscaped+` yarn run v\d+\.\d+\.\d+`), + extenderBuildStr+" $ vue-cli-service build", )) Expect(logs).To(ContainLines( - " DONE Build complete. The dist directory is ready to be deployed.", + extenderBuildStr + " DONE Build complete. The dist directory is ready to be deployed.", )) - Expect(logs).To(ContainLines(MatchRegexp(` Completed in ([0-9]*(\.[0-9]*)?[a-z]+)+`))) + Expect(logs).To(ContainLines(MatchRegexp(extenderBuildStrEscaped + ` Completed in ([0-9]*(\.[0-9]*)?[a-z]+)+`))) container, err = docker.Container.Run. WithCommand("ls -al /workspace/dist/"). diff --git a/scripts/integration.sh b/scripts/integration.sh index 13a5635f..07f6f0e2 100755 --- a/scripts/integration.sh +++ b/scripts/integration.sh @@ -153,6 +153,7 @@ function tests::run() { util::print::title "Run Buildpack Runtime Integration Tests" util::print::info "Using ${1} as builder..." + pack config experimental true export CGO_ENABLED=0 pushd "${BUILDPACKDIR}" > /dev/null if GOMAXPROCS="${GOMAXPROCS:-4}" go test -count=1 -timeout 0 ./integration/... -v -run Integration | tee "${2}"; then