Просмотр исходного кода

Separate runtime for CLI NodeJS

Mohammed Nafees 4 лет назад
Родитель
Сommit
580fe4d548
5 измененных файлов с 218 добавлено и 55 удалено
  1. 11 49
      cmd/test-runtime/main.go
  2. 26 0
      cmd/test-runtime/runtimes/common.go
  3. 178 0
      cmd/test-runtime/runtimes/node.go
  4. 1 1
      go.mod
  5. 2 5
      go.sum

+ 11 - 49
cmd/test-runtime/main.go

@@ -1,21 +1,20 @@
 package main
 package main
 
 
 import (
 import (
+	"fmt"
 	"log"
 	"log"
 	"os"
 	"os"
 	"path/filepath"
 	"path/filepath"
 
 
-	bundleinstall "github.com/paketo-buildpacks/bundle-install"
 	condaenvupdate "github.com/paketo-buildpacks/conda-env-update"
 	condaenvupdate "github.com/paketo-buildpacks/conda-env-update"
 	gomodvendor "github.com/paketo-buildpacks/go-mod-vendor"
 	gomodvendor "github.com/paketo-buildpacks/go-mod-vendor"
-	npminstall "github.com/paketo-buildpacks/npm-install"
 	"github.com/paketo-buildpacks/packit"
 	"github.com/paketo-buildpacks/packit"
 	pipenvinstall "github.com/paketo-buildpacks/pipenv-install"
 	pipenvinstall "github.com/paketo-buildpacks/pipenv-install"
 	pythonstart "github.com/paketo-buildpacks/python-start"
 	pythonstart "github.com/paketo-buildpacks/python-start"
 	"github.com/paketo-buildpacks/rackup"
 	"github.com/paketo-buildpacks/rackup"
 	railsassets "github.com/paketo-buildpacks/rails-assets"
 	railsassets "github.com/paketo-buildpacks/rails-assets"
 	"github.com/paketo-buildpacks/rake"
 	"github.com/paketo-buildpacks/rake"
-	yarninstall "github.com/paketo-buildpacks/yarn-install"
+	"github.com/porter-dev/porter/cmd/test-runtime/runtimes"
 )
 )
 
 
 const GoModLocation = "go.mod"
 const GoModLocation = "go.mod"
@@ -100,51 +99,11 @@ func detectPython() {
 	log.Println("Not a Python project")
 	log.Println("Not a Python project")
 }
 }
 
 
-func detectNode() {
-	/* Check for yarn project */
-	yarnProjectPathParser := yarninstall.NewProjectPathParser()
-	yarnVersionParser := yarninstall.NewPackageJSONParser()
-	detect := yarninstall.Detect(yarnProjectPathParser, yarnVersionParser)
-	_, err := detect(packit.DetectContext{
-		WorkingDir: workingDir,
-	})
-	if err == nil {
-		log.Println("Node yarn project detected")
-		return
-	}
-
-	/* Check for npm project */
-	npmProjectPathParser := npminstall.NewProjectPathParser()
-	npmVersionParser := npminstall.NewPackageJSONParser()
-	detect = npminstall.Detect(npmProjectPathParser, npmVersionParser)
-	_, err = detect(packit.DetectContext{
-		WorkingDir: workingDir,
-	})
-	if err == nil {
-		log.Println("Node npm project detected")
-		return
-	}
-
-	/* Not a Node project */
-	log.Println("Not a Node project")
-}
-
 func detectRuby() {
 func detectRuby() {
-	/* Check for Gemfile project */
-	gemfileParser := bundleinstall.NewGemfileParser()
-	detect := bundleinstall.Detect(gemfileParser)
-	_, err := detect(packit.DetectContext{
-		WorkingDir: workingDir,
-	})
-	if err == nil {
-		log.Println("Ruby Gemfile project detected")
-		return
-	}
-
 	/* Check for rackup project  */
 	/* Check for rackup project  */
 	gemParser := rackup.NewGemfileLockParser()
 	gemParser := rackup.NewGemfileLockParser()
-	detect = rackup.Detect(gemParser)
-	_, err = detect(packit.DetectContext{
+	detect := rackup.Detect(gemParser)
+	_, err := detect(packit.DetectContext{
 		WorkingDir: workingDir,
 		WorkingDir: workingDir,
 	})
 	})
 	if err == nil {
 	if err == nil {
@@ -185,8 +144,11 @@ func main() {
 
 
 	workingDir = os.Args[1]
 	workingDir = os.Args[1]
 
 
-	detectGo()
-	detectPython()
-	detectNode()
-	detectRuby()
+	nodeRuntime := runtimes.NewNodeRuntime()
+	buildpackInfo := nodeRuntime.Detect(workingDir)
+	if buildpackInfo != nil {
+		for i := 0; i < len(buildpackInfo.Packs); i++ {
+			fmt.Println(buildpackInfo.Packs[i])
+		}
+	}
 }
 }

+ 26 - 0
cmd/test-runtime/runtimes/common.go

@@ -0,0 +1,26 @@
+package runtimes
+
+type BuildpackInfo struct {
+	Packs []string
+	// FIXME: env vars for https://github.com/paketo-buildpacks/environment-variables
+	//        and for https://github.com/paketo-buildpacks/image-labels
+	Env map[string]string
+}
+
+func newBuildpackInfo() *BuildpackInfo {
+	return &BuildpackInfo{
+		Env: make(map[string]string),
+	}
+}
+
+func (info *BuildpackInfo) addPack(pack string) {
+	info.Packs = append(info.Packs, pack)
+}
+
+func (info *BuildpackInfo) addEnvVar(id string, val string) {
+	info.Env[id] = val
+}
+
+type Runtime interface {
+	Detect(string) *BuildpackInfo
+}

+ 178 - 0
cmd/test-runtime/runtimes/node.go

@@ -0,0 +1,178 @@
+package runtimes
+
+import (
+	"sync"
+
+	nodemodulebom "github.com/paketo-buildpacks/node-module-bom"
+	npminstall "github.com/paketo-buildpacks/npm-install"
+	"github.com/paketo-buildpacks/packit"
+	yarninstall "github.com/paketo-buildpacks/yarn-install"
+)
+
+type NodeRuntime struct {
+	// An internal representation of https://github.com/paketo-buildpacks/nodejs/blob/main/buildpack.toml
+	packs map[string]*BuildpackInfo
+	wg    sync.WaitGroup
+}
+
+func NewNodeRuntime() *NodeRuntime {
+	packs := make(map[string]*BuildpackInfo)
+
+	// yarn
+	packs["yarn"] = newBuildpackInfo()
+	packs["yarn"].addPack("paketo-buildpacks/ca-certificates")
+	packs["yarn"].addPack("paketo-buildpacks/node-engine")
+	packs["yarn"].addPack("paketo-buildpacks/yarn")
+	packs["yarn"].addPack("paketo-buildpacks/yarn-install")
+	packs["yarn"].addPack("paketo-buildpacks/node-module-bom")
+	packs["yarn"].addPack("paketo-buildpacks/node-run-script")
+	packs["yarn"].addPack("paketo-buildpacks/yarn-start")
+	packs["yarn"].addPack("paketo-buildpacks/procfile")
+	packs["yarn"].addPack("paketo-buildpacks/environment-variables")
+	packs["yarn"].addPack("paketo-buildpacks/image-labels")
+	packs["yarn"].addEnvVar("SSL_CERT_DIR", "")
+	packs["yarn"].addEnvVar("SSL_CERT_FILE", "")
+	packs["yarn"].addEnvVar("BP_NODE_OPTIMIZE_MEMORY", "")
+	packs["yarn"].addEnvVar("BP_NODE_PROJECT_PATH", "")
+	packs["yarn"].addEnvVar("BP_NODE_VERSION", "")
+	packs["yarn"].addEnvVar("BP_NODE_RUN_SCRIPTS", "")
+
+	// npm
+	packs["npm"] = newBuildpackInfo()
+	packs["npm"].addPack("paketo-buildpacks/ca-certificates")
+	packs["npm"].addPack("paketo-buildpacks/node-engine")
+	packs["npm"].addPack("paketo-buildpacks/npm-install")
+	packs["npm"].addPack("paketo-buildpacks/node-module-bom")
+	packs["npm"].addPack("paketo-buildpacks/node-run-script")
+	packs["npm"].addPack("paketo-buildpacks/npm-start")
+	packs["npm"].addPack("paketo-buildpacks/procfile")
+	packs["npm"].addPack("paketo-buildpacks/environment-variables")
+	packs["npm"].addPack("paketo-buildpacks/image-labels")
+	packs["npm"].addEnvVar("SSL_CERT_DIR", "")
+	packs["npm"].addEnvVar("SSL_CERT_FILE", "")
+	packs["npm"].addEnvVar("BP_NODE_OPTIMIZE_MEMORY", "")
+	packs["npm"].addEnvVar("BP_NODE_PROJECT_PATH", "")
+	packs["npm"].addEnvVar("BP_NODE_VERSION", "")
+	packs["npm"].addEnvVar("BP_NODE_RUN_SCRIPTS", "")
+
+	// no package manager
+	packs["standalone"] = newBuildpackInfo()
+	packs["standalone"].addPack("paketo-buildpacks/ca-certificates")
+	packs["standalone"].addPack("paketo-buildpacks/node-engine")
+	packs["standalone"].addPack("paketo-buildpacks/node-module-bom")
+	packs["standalone"].addPack("paketo-buildpacks/node-start")
+	packs["standalone"].addPack("paketo-buildpacks/procfile")
+	packs["standalone"].addPack("paketo-buildpacks/environment-variables")
+	packs["standalone"].addPack("paketo-buildpacks/image-labels")
+	packs["standalone"].addEnvVar("SSL_CERT_DIR", "")
+	packs["standalone"].addEnvVar("SSL_CERT_FILE", "")
+	packs["standalone"].addEnvVar("BP_NODE_OPTIMIZE_MEMORY", "")
+	packs["standalone"].addEnvVar("BP_NODE_PROJECT_PATH", "")
+	packs["standalone"].addEnvVar("BP_NODE_VERSION", "")
+	packs["standalone"].addEnvVar("BP_LAUNCHPOINT", "")
+	packs["standalone"].addEnvVar("BP_LIVE_RELOAD_ENABLED", "")
+
+	return &NodeRuntime{
+		packs: packs,
+	}
+}
+
+func (runtime *NodeRuntime) detectYarn(results chan struct {
+	string
+	bool
+}, workingDir string) {
+	yarnProjectPathParser := yarninstall.NewProjectPathParser()
+	yarnVersionParser := yarninstall.NewPackageJSONParser()
+	detect := yarninstall.Detect(yarnProjectPathParser, yarnVersionParser)
+	_, err := detect(packit.DetectContext{
+		WorkingDir: workingDir,
+	})
+	if err == nil {
+		results <- struct {
+			string
+			bool
+		}{"yarn", true}
+	} else {
+		results <- struct {
+			string
+			bool
+		}{"yarn", false}
+	}
+	runtime.wg.Done()
+}
+
+func (runtime *NodeRuntime) detectNPM(results chan struct {
+	string
+	bool
+}, workingDir string) {
+	npmProjectPathParser := npminstall.NewProjectPathParser()
+	npmVersionParser := npminstall.NewPackageJSONParser()
+	detect := npminstall.Detect(npmProjectPathParser, npmVersionParser)
+	_, err := detect(packit.DetectContext{
+		WorkingDir: workingDir,
+	})
+	if err == nil {
+		results <- struct {
+			string
+			bool
+		}{"npm", true}
+	} else {
+		results <- struct {
+			string
+			bool
+		}{"npm", false}
+	}
+	runtime.wg.Done()
+}
+
+func (runtime *NodeRuntime) detectStandalone(results chan struct {
+	string
+	bool
+}, workingDir string) {
+	// FIXME: the detect function seems to be working for non-node projects as well?
+	detect := nodemodulebom.Detect()
+	_, err := detect(packit.DetectContext{
+		WorkingDir: workingDir,
+	})
+	if err == nil {
+		results <- struct {
+			string
+			bool
+		}{"standalone", true}
+	} else {
+		results <- struct {
+			string
+			bool
+		}{"standalone", false}
+	}
+	runtime.wg.Done()
+}
+
+func (runtime *NodeRuntime) Detect(workingDir string) *BuildpackInfo {
+	results := make(chan struct {
+		string
+		bool
+	}, 3)
+
+	runtime.wg.Add(3)
+	go runtime.detectYarn(results, workingDir)
+	go runtime.detectNPM(results, workingDir)
+	go runtime.detectStandalone(results, workingDir)
+	runtime.wg.Wait()
+	close(results)
+
+	detected := make(map[string]bool)
+	for result := range results {
+		detected[result.string] = result.bool
+	}
+
+	if detected["yarn"] {
+		return runtime.packs["yarn"]
+	} else if detected["npm"] {
+		return runtime.packs["npm"]
+	} else if detected["standalone"] {
+		return runtime.packs["standalone"]
+	}
+
+	return nil
+}

+ 1 - 1
go.mod

@@ -39,9 +39,9 @@ require (
 	github.com/moby/moby v20.10.6+incompatible
 	github.com/moby/moby v20.10.6+incompatible
 	github.com/moby/term v0.0.0-20201216013528-df9cb8a40635
 	github.com/moby/term v0.0.0-20201216013528-df9cb8a40635
 	github.com/opencontainers/image-spec v1.0.1
 	github.com/opencontainers/image-spec v1.0.1
-	github.com/paketo-buildpacks/bundle-install v0.2.4
 	github.com/paketo-buildpacks/conda-env-update v0.2.2
 	github.com/paketo-buildpacks/conda-env-update v0.2.2
 	github.com/paketo-buildpacks/go-mod-vendor v0.3.1
 	github.com/paketo-buildpacks/go-mod-vendor v0.3.1
+	github.com/paketo-buildpacks/node-module-bom v0.1.2
 	github.com/paketo-buildpacks/npm-install v0.5.0
 	github.com/paketo-buildpacks/npm-install v0.5.0
 	github.com/paketo-buildpacks/packit v1.3.0
 	github.com/paketo-buildpacks/packit v1.3.0
 	github.com/paketo-buildpacks/pipenv-install v0.2.3
 	github.com/paketo-buildpacks/pipenv-install v0.2.3

+ 2 - 5
go.sum

@@ -89,7 +89,6 @@ github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMd
 github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60=
 github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60=
 github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
 github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
 github.com/ForestEckhardt/freezer v0.0.3/go.mod h1:/uALnKwx6+QSyKdZYC/FjihjQeI4XsE7i3RXPKyM8Vs=
 github.com/ForestEckhardt/freezer v0.0.3/go.mod h1:/uALnKwx6+QSyKdZYC/FjihjQeI4XsE7i3RXPKyM8Vs=
-github.com/ForestEckhardt/freezer v0.0.7 h1:/hRJtyy5gzHK22ax2VFhjSi5400uItoVJNewTepwDeo=
 github.com/ForestEckhardt/freezer v0.0.7/go.mod h1:1EtaHlohBGk0zF1l4w3wroNOdEBTWL0PHNIgvjeisaE=
 github.com/ForestEckhardt/freezer v0.0.7/go.mod h1:1EtaHlohBGk0zF1l4w3wroNOdEBTWL0PHNIgvjeisaE=
 github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14=
 github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14=
 github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
 github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
@@ -994,7 +993,6 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
 github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
 github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
 github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
 github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
 github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
 github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
-github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
 github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
 github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
 github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
 github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
@@ -1054,16 +1052,15 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ
 github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
 github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
 github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
 github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
 github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
 github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
-github.com/paketo-buildpacks/bundle-install v0.2.4 h1:GCPTOCiT2gUhUXKDes/DhzOlqtQiKczbTkWBu8b8xLw=
-github.com/paketo-buildpacks/bundle-install v0.2.4/go.mod h1:Z9s+P7cQxnF+DsTjr4cWhTKkQm7tU6f8QHpRgpJBQZA=
 github.com/paketo-buildpacks/conda-env-update v0.2.2 h1:0bT6Se/r/06Gc3sBeg+OJ/9BVIp8D/rEzeJNtvxOBSQ=
 github.com/paketo-buildpacks/conda-env-update v0.2.2 h1:0bT6Se/r/06Gc3sBeg+OJ/9BVIp8D/rEzeJNtvxOBSQ=
 github.com/paketo-buildpacks/conda-env-update v0.2.2/go.mod h1:OKSG9rf9ClDLcoHA3JJgbRECShCpNJKrmkYgIiYAu9k=
 github.com/paketo-buildpacks/conda-env-update v0.2.2/go.mod h1:OKSG9rf9ClDLcoHA3JJgbRECShCpNJKrmkYgIiYAu9k=
 github.com/paketo-buildpacks/go-mod-vendor v0.3.1 h1:4ltB7mmMg2dGRNDLxwPMLoY98rePUhny/6L0QUn8aYU=
 github.com/paketo-buildpacks/go-mod-vendor v0.3.1 h1:4ltB7mmMg2dGRNDLxwPMLoY98rePUhny/6L0QUn8aYU=
 github.com/paketo-buildpacks/go-mod-vendor v0.3.1/go.mod h1:ycd4yAggQShyoQg+bXZyaxazx/Nms98f1SH9NkG/I3k=
 github.com/paketo-buildpacks/go-mod-vendor v0.3.1/go.mod h1:ycd4yAggQShyoQg+bXZyaxazx/Nms98f1SH9NkG/I3k=
+github.com/paketo-buildpacks/node-module-bom v0.1.2 h1:mJSBiuMzOlqlZ22nJR8Akxorv0PECM60k6hWz+RMxIE=
+github.com/paketo-buildpacks/node-module-bom v0.1.2/go.mod h1:gLG2ixUiwOanH2iy/wEdipfhEUXIoEHzgtK1eYYzGl4=
 github.com/paketo-buildpacks/npm-install v0.5.0 h1:PWIdaa14IcLllbv1LyZa5mVh5r6DbpdB3bDSxz5+r94=
 github.com/paketo-buildpacks/npm-install v0.5.0 h1:PWIdaa14IcLllbv1LyZa5mVh5r6DbpdB3bDSxz5+r94=
 github.com/paketo-buildpacks/npm-install v0.5.0/go.mod h1:lJ+qayMglLeNbeDxnppIMTKKKNDO+sejM5qiPCBMwzw=
 github.com/paketo-buildpacks/npm-install v0.5.0/go.mod h1:lJ+qayMglLeNbeDxnppIMTKKKNDO+sejM5qiPCBMwzw=
 github.com/paketo-buildpacks/occam v0.0.22/go.mod h1:aPNRyPEgYp4a01O4UKAuFWYnRmY4ujeuV3x6yAa1hxs=
 github.com/paketo-buildpacks/occam v0.0.22/go.mod h1:aPNRyPEgYp4a01O4UKAuFWYnRmY4ujeuV3x6yAa1hxs=
-github.com/paketo-buildpacks/occam v0.1.4 h1:KFYEXc0S1rEus/by2s4PEbFYfSNX5TEcjNN5g7dbKmI=
 github.com/paketo-buildpacks/occam v0.1.4/go.mod h1:Rn7l2Ndm1ff0RGj0hWJwH8+iGhkEGY5nt/qpWKWB9lE=
 github.com/paketo-buildpacks/occam v0.1.4/go.mod h1:Rn7l2Ndm1ff0RGj0hWJwH8+iGhkEGY5nt/qpWKWB9lE=
 github.com/paketo-buildpacks/packit v0.5.0/go.mod h1:ATLZccUzqEAyPlirdka8hs+XNqS4pyJ/tjyU1NXJKm8=
 github.com/paketo-buildpacks/packit v0.5.0/go.mod h1:ATLZccUzqEAyPlirdka8hs+XNqS4pyJ/tjyU1NXJKm8=
 github.com/paketo-buildpacks/packit v0.13.0/go.mod h1:o3ajTEGOKZpEVRDpBH6qaIRVK92CO7WWinm87MTBlV8=
 github.com/paketo-buildpacks/packit v0.13.0/go.mod h1:o3ajTEGOKZpEVRDpBH6qaIRVK92CO7WWinm87MTBlV8=