Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
20 changes: 20 additions & 0 deletions manifest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ dependency_deprecation_dates:
name: node
date: 2024-04-30
link: https://github.com/nodejs/Release
- version_line: 18.x.x
name: node
date: 2025-04-30
link: https://github.com/nodejs/Release
dependencies:
- name: node
version: 14.19.2
Expand Down Expand Up @@ -63,6 +67,22 @@ dependencies:
- cflinuxfs3
source: https://nodejs.org/dist/v16.15.1/node-v16.15.1.tar.gz
source_sha256: 308aee7149c4092a53c87c28ef49e23a8d1606119e79ae68333062e2a1f94208
- name: node
version: 18.3.0
uri: https://buildpacks.cloudfoundry.org/dependencies/node/node_18.3.0_linux_x64_cflinuxfs3_e75ee99a.tgz
sha256: e75ee99a00619219c825578e82f47195556a4a7d9686ee8cc0a918e872ed9235
cf_stacks:
- cflinuxfs3
source: https://nodejs.org/dist/v18.3.0/node-v18.3.0.tar.gz
source_sha256: 5bb594347e84be8e1a900ae290762e439ac283a34a5821c209c19446111bba97
- name: node
version: 18.4.0
uri: https://buildpacks.cloudfoundry.org/dependencies/node/node_18.4.0_linux_x64_cflinuxfs3_c5ec4629.tgz
sha256: c5ec462967b2d1b5f28af95e2ab6fd322ce323566c89f3b09d0296069c353a24
cf_stacks:
- cflinuxfs3
source: https://nodejs.org/dist/v18.4.0/node-v18.4.0.tar.gz
source_sha256: c7c67252175b7f4e1521285bf1a1044dffce6103df9a54f80f0d8287f69e01d7
- name: yarn
version: 1.22.19
uri: https://buildpacks.cloudfoundry.org/dependencies/yarn/yarn_1.22.19_linux_noarch_any-stack_b005c5ea.tgz
Expand Down
22 changes: 22 additions & 0 deletions src/nodejs/supply/supply.go
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,11 @@ func (s *Supplier) InstallNode() error {
Version: s.NodeVersion,
}

err := setupSSLCertDirectories(s.NodeVersion)
if err != nil {
return err
}

nodeInstallDir := filepath.Join(s.Stager.DepDir(), "node")
if err := s.Installer.InstallDependency(dep, nodeInstallDir); err != nil {
return err
Expand All @@ -645,6 +650,23 @@ func (s *Supplier) InstallNode() error {
return os.Setenv("PATH", fmt.Sprintf("%s:%s", os.Getenv("PATH"), filepath.Join(s.Stager.DepDir(), "bin")))
}

func setupSSLCertDirectories(version string) error {
// NOTE: ensures OpenSSL CA store works with Node v18 and higher. Waiting
// for resolution on https://github.com/nodejs/node/issues/43560 to decide
// how to properly fix this.

nodeVersion, err := semver.NewVersion(version)
if err != nil {
return err
}

if !nodeVersion.LessThan(semver.MustParse("18.0.0")) {
os.Setenv("SSL_CERT_DIR", "/etc/ssl/certs")
}

return nil
}

func (s *Supplier) InstallNPM() error {
buffer := new(bytes.Buffer)
if err := s.Command.Execute(s.Stager.BuildDir(), buffer, buffer, "npm", "--version"); err != nil {
Expand Down
41 changes: 41 additions & 0 deletions src/nodejs/supply/supply_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,47 @@ var _ = Describe("Supply", func() {
Expect(err).To(BeNil())
})
})

Context("Installing Node >=18", func() {
It("SSL_CERT_DIR env variable is set", func() {
dep := libbuildpack.Dependency{Name: "node", Version: "18.0.0"}
mockManifest.EXPECT().DefaultVersion("node").Return(dep, nil)
mockManifest.EXPECT().AllDependencyVersions(gomock.Any())
mockInstaller.EXPECT().InstallDependency(dep, nodeDir).Do(installNode).Return(nil)

supplier.NodeVersion = ""

err = supplier.ChooseNodeVersion()
Expect(err).To(BeNil())

err = supplier.InstallNode()
Expect(err).To(BeNil())

_, SSLEnvironmentVariable := os.LookupEnv("SSL_CERT_DIR")
Expect(SSLEnvironmentVariable).To(BeTrue())
os.Unsetenv("SSL_CERT_DIR")
})
})

Context("Installing Node <18", func() {
It("SSL_CERT_DIR env variable is not set", func() {
dep := libbuildpack.Dependency{Name: "node", Version: "16.0.0"}
mockManifest.EXPECT().DefaultVersion("node").Return(dep, nil)
mockManifest.EXPECT().AllDependencyVersions(gomock.Any())
mockInstaller.EXPECT().InstallDependency(dep, nodeDir).Do(installNode).Return(nil)

supplier.NodeVersion = ""

err = supplier.ChooseNodeVersion()
Expect(err).To(BeNil())

err = supplier.InstallNode()
Expect(err).To(BeNil())

_, SSLEnvironmentVariable := os.LookupEnv("SSL_CERT_DIR")
Expect(SSLEnvironmentVariable).To(BeFalse())
})
})
})

Describe("InstallYarn", func() {
Expand Down