diff --git a/README.md b/README.md index 3ea93505..9525d1fe 100644 --- a/README.md +++ b/README.md @@ -24,16 +24,21 @@ file that looks like the following: # The Dotnet Publish CNB does not support non-required metadata options. ``` +## Configuration + +### `BP_DOTNET_PROJECT_PATH` +To specify a project subdirectory to be used as the root of the app, please use +the `BP_DOTNET_PROJECT_PATH` environment variable at build time either directly +(e.g. `pack build my-app --env BP_DOTNET_PROJECT_PATH=./src/my-app`) or through a +[`project.toml` file](https://github.com/buildpacks/spec/blob/main/extensions/project-descriptor.md). + +```shell +BP_DOTNET_PROJECT_PATH=./src/my-app +``` + ## Usage To package this buildpack for consumption: ``` $ ./scripts/package.sh ``` This builds the buildpack's source using GOOS=linux by default. You can supply another value as the first argument to package.sh. - -## Specifying a project path - -To specify a project subdirectory to be used as the root of the app, please use -the BP_DOTNET_PROJECT_PATH environment variable at build time either directly -(e.g. pack build my-app --env BP_DOTNET_PROJECT_PATH=./src/my-app) or through a -project.toml file. diff --git a/build.go b/build.go index f698e50f..5b2aa241 100644 --- a/build.go +++ b/build.go @@ -7,7 +7,6 @@ import ( "path/filepath" "time" - "github.com/Masterminds/semver" "github.com/Netflix/go-env" "github.com/mattn/go-shellwords" "github.com/paketo-buildpacks/packit/v2" @@ -66,7 +65,6 @@ func Build( symlinker SymlinkManager, publishProcess PublishProcess, slicer Slicer, - buildpackYMLParser BuildpackYMLParser, clock chronos.Clock, logger scribe.Emitter, sbomGenerator SBOMGenerator, @@ -84,20 +82,6 @@ func Build( } logger.Debug.Break() - if config.ProjectPath == "" { - var err error - config.ProjectPath, err = buildpackYMLParser.ParseProjectPath(filepath.Join(context.WorkingDir, "buildpack.yml")) - if err != nil { - return packit.BuildResult{}, err - } - - if config.ProjectPath != "" { - nextMajorVersion := semver.MustParse(context.BuildpackInfo.Version).IncMajor() - logger.Subprocess("WARNING: Setting the project path through buildpack.yml will be deprecated soon in Dotnet Publish Buildpack v%s", nextMajorVersion.String()) - logger.Subprocess("Please specify the project path through the $BP_DOTNET_PROJECT_PATH environment variable instead. See README.md or the documentation on paketo.io for more information.") - } - } - tempDir, err := os.MkdirTemp("", "dotnet-publish-output") if err != nil { return packit.BuildResult{}, fmt.Errorf("could not create temp directory: %w", err) diff --git a/build_test.go b/build_test.go index 19d07cd5..edd02a72 100644 --- a/build_test.go +++ b/build_test.go @@ -29,14 +29,13 @@ func testBuild(t *testing.T, context spec.G, it spec.S) { homeDir string layersDir string - bindingResolver *fakes.BindingResolver - buildpackYMLParser *fakes.BuildpackYMLParser - publishProcess *fakes.PublishProcess - sbomGenerator *fakes.SBOMGenerator - slicer *fakes.Slicer - sourceRemover *fakes.SourceRemover - symlinker *fakes.SymlinkManager - logger scribe.Emitter + bindingResolver *fakes.BindingResolver + publishProcess *fakes.PublishProcess + sbomGenerator *fakes.SBOMGenerator + slicer *fakes.Slicer + sourceRemover *fakes.SourceRemover + symlinker *fakes.SymlinkManager + logger scribe.Emitter build packit.BuildFunc ) @@ -52,17 +51,12 @@ func testBuild(t *testing.T, context spec.G, it spec.S) { homeDir, err = os.MkdirTemp("", "home-dir") Expect(err).NotTo(HaveOccurred()) - Expect(os.WriteFile(filepath.Join(workingDir, "buildpack.yml"), nil, 0600)).To(Succeed()) - symlinker = &fakes.SymlinkManager{} sourceRemover = &fakes.SourceRemover{} publishProcess = &fakes.PublishProcess{} bindingResolver = &fakes.BindingResolver{} slicer = &fakes.Slicer{} - buildpackYMLParser = &fakes.BuildpackYMLParser{} - buildpackYMLParser.ParseProjectPathCall.Returns.ProjectFilePath = "some/project/path" - slicer.SliceCall.Returns.Pkgs = packit.Slice{Paths: []string{"some-package.dll"}} slicer.SliceCall.Returns.EarlyPkgs = packit.Slice{Paths: []string{"some-release-candidate-package.dll"}} slicer.SliceCall.Returns.Projects = packit.Slice{Paths: []string{"some-project.dll"}} @@ -89,7 +83,6 @@ func testBuild(t *testing.T, context spec.G, it spec.S) { symlinker, publishProcess, slicer, - buildpackYMLParser, chronos.DefaultClock, logger, sbomGenerator, @@ -183,19 +176,17 @@ func testBuild(t *testing.T, context spec.G, it spec.S) { Expect(symlinker.UnlinkCall.CallCount).To(Equal(0)) Expect(publishProcess.ExecuteCall.Receives.WorkingDir).To(Equal(workingDir)) - Expect(publishProcess.ExecuteCall.Receives.ProjectPath).To(Equal("some/project/path")) + Expect(publishProcess.ExecuteCall.Receives.ProjectPath).To(Equal("")) Expect(publishProcess.ExecuteCall.Receives.OutputPath).To(MatchRegexp(`dotnet-publish-output\d+`)) Expect(publishProcess.ExecuteCall.Receives.Debug).To(BeTrue()) Expect(publishProcess.ExecuteCall.Receives.Flags).To(Equal([]string{"--publishflag", "value"})) - Expect(slicer.SliceCall.Receives.AssetsFile).To(Equal(filepath.Join(workingDir, "some/project/path", "obj", "project.assets.json"))) + Expect(slicer.SliceCall.Receives.AssetsFile).To(Equal(filepath.Join(workingDir, "obj", "project.assets.json"))) Expect(sbomGenerator.GenerateCall.Receives.Dir).To(Equal(workingDir)) Expect(buffer.String()).To(ContainSubstring("Some Buildpack 0.0.1")) Expect(buffer.String()).To(ContainSubstring("Executing build process")) - Expect(buffer.String()).To(ContainSubstring("WARNING: Setting the project path through buildpack.yml will be deprecated soon in Dotnet Publish Buildpack v1.0.0")) - Expect(buffer.String()).To(ContainSubstring("Please specify the project path through the $BP_DOTNET_PROJECT_PATH environment variable instead. See README.md or the documentation on paketo.io for more information.")) }) context("the cache layer is empty", func() { @@ -288,7 +279,6 @@ func testBuild(t *testing.T, context spec.G, it spec.S) { symlinker, publishProcess, slicer, - buildpackYMLParser, chronos.DefaultClock, logger, sbomGenerator, @@ -398,7 +388,6 @@ func testBuild(t *testing.T, context spec.G, it spec.S) { symlinker, publishProcess, slicer, - buildpackYMLParser, chronos.DefaultClock, logger, sbomGenerator, @@ -424,22 +413,6 @@ func testBuild(t *testing.T, context spec.G, it spec.S) { }) context("failure cases", func() { - - context("when the buildpack.yml can not be parsed", func() { - it.Before(func() { - buildpackYMLParser.ParseProjectPathCall.Returns.Err = errors.New("some-error") - }) - it("returns an error", func() { - _, err := build(packit.BuildContext{ - WorkingDir: workingDir, - BuildpackInfo: packit.BuildpackInfo{ - Version: "0.0.1", - }, - }) - Expect(err).To(MatchError("some-error")) - }) - }) - context("dotnet publish flags cannot be parsed", func() { it.Before(func() { build = dotnetpublish.Build( @@ -450,7 +423,6 @@ func testBuild(t *testing.T, context spec.G, it spec.S) { symlinker, publishProcess, slicer, - buildpackYMLParser, chronos.DefaultClock, logger, sbomGenerator, diff --git a/detect.go b/detect.go index 430e60f9..8695c302 100644 --- a/detect.go +++ b/detect.go @@ -23,21 +23,8 @@ type ProjectParser interface { NPMIsRequired(path string) (bool, error) } -//go:generate faux --interface BuildpackYMLParser --output fakes/buildpack_yml_parser.go -type BuildpackYMLParser interface { - ParseProjectPath(path string) (projectFilePath string, err error) -} - -func Detect(config Configuration, parser ProjectParser, buildpackYMLParser BuildpackYMLParser) packit.DetectFunc { +func Detect(config Configuration, parser ProjectParser) packit.DetectFunc { return func(context packit.DetectContext) (packit.DetectResult, error) { - if config.ProjectPath == "" { - var err error - config.ProjectPath, err = buildpackYMLParser.ParseProjectPath(filepath.Join(context.WorkingDir, "buildpack.yml")) - if err != nil { - return packit.DetectResult{}, fmt.Errorf("failed to parse buildpack.yml: %w", err) - } - } - projectFilePath, err := parser.FindProjectFile(filepath.Join(context.WorkingDir, config.ProjectPath)) if err != nil { return packit.DetectResult{}, err diff --git a/detect_test.go b/detect_test.go index 63e3c204..cda47c1d 100644 --- a/detect_test.go +++ b/detect_test.go @@ -2,7 +2,6 @@ package dotnetpublish_test import ( "errors" - "fmt" "os" "path/filepath" "testing" @@ -19,10 +18,9 @@ func testDetect(t *testing.T, context spec.G, it spec.S) { var ( Expect = NewWithT(t).Expect - projectParser *fakes.ProjectParser - buildpackYMLParser *fakes.BuildpackYMLParser - workingDir string - detect packit.DetectFunc + projectParser *fakes.ProjectParser + workingDir string + detect packit.DetectFunc ) it.Before(func() { @@ -34,12 +32,9 @@ func testDetect(t *testing.T, context spec.G, it spec.S) { projectParser.FindProjectFileCall.Returns.String = filepath.Join(workingDir, "app.csproj") projectParser.ParseVersionCall.Returns.String = "6.0.0" - buildpackYMLParser = &fakes.BuildpackYMLParser{} - detect = dotnetpublish.Detect( dotnetpublish.Configuration{}, projectParser, - buildpackYMLParser, ) }) @@ -76,7 +71,6 @@ func testDetect(t *testing.T, context spec.G, it spec.S) { }, })) - Expect(buildpackYMLParser.ParseProjectPathCall.Receives.Path).To(Equal(filepath.Join(workingDir, "buildpack.yml"))) Expect(projectParser.FindProjectFileCall.Receives.Root).To(Equal(workingDir)) Expect(projectParser.ParseVersionCall.Receives.Path).To(Equal(filepath.Join(workingDir, "app.csproj"))) Expect(projectParser.NodeIsRequiredCall.Receives.Path).To(Equal(filepath.Join(workingDir, "app.csproj"))) @@ -123,7 +117,6 @@ func testDetect(t *testing.T, context spec.G, it spec.S) { }, })) - Expect(buildpackYMLParser.ParseProjectPathCall.Receives.Path).To(Equal(filepath.Join(workingDir, "buildpack.yml"))) Expect(projectParser.FindProjectFileCall.Receives.Root).To(Equal(workingDir)) Expect(projectParser.ParseVersionCall.Receives.Path).To(Equal(filepath.Join(workingDir, "app.csproj"))) Expect(projectParser.NodeIsRequiredCall.Receives.Path).To(Equal(filepath.Join(workingDir, "app.csproj"))) @@ -178,7 +171,6 @@ func testDetect(t *testing.T, context spec.G, it spec.S) { }, })) - Expect(buildpackYMLParser.ParseProjectPathCall.Receives.Path).To(Equal(filepath.Join(workingDir, "buildpack.yml"))) Expect(projectParser.FindProjectFileCall.Receives.Root).To(Equal(workingDir)) Expect(projectParser.ParseVersionCall.Receives.Path).To(Equal(filepath.Join(workingDir, "app.csproj"))) Expect(projectParser.NodeIsRequiredCall.Receives.Path).To(Equal(filepath.Join(workingDir, "app.csproj"))) @@ -192,7 +184,6 @@ func testDetect(t *testing.T, context spec.G, it spec.S) { detect = dotnetpublish.Detect( dotnetpublish.Configuration{ProjectPath: "src/proj1"}, projectParser, - buildpackYMLParser, ) }) @@ -229,53 +220,6 @@ func testDetect(t *testing.T, context spec.G, it spec.S) { }, })) - Expect(buildpackYMLParser.ParseProjectPathCall.CallCount).To(Equal(0)) - Expect(projectParser.FindProjectFileCall.Receives.Root).To(Equal(filepath.Join(workingDir, "src/proj1"))) - Expect(projectParser.ParseVersionCall.Receives.Path).To(Equal(filepath.Join(workingDir, "src/proj1", "app.csproj"))) - Expect(projectParser.NodeIsRequiredCall.Receives.Path).To(Equal(filepath.Join(workingDir, "src/proj1", "app.csproj"))) - Expect(projectParser.NPMIsRequiredCall.Receives.Path).To(Equal(filepath.Join(workingDir, "src/proj1", "app.csproj"))) - }) - }) - context("when the .csproj file is not at the base of the directory and project_path is set in buildpack.yml", func() { - it.Before(func() { - buildpackYMLParser.ParseProjectPathCall.Returns.ProjectFilePath = "src/proj1" - projectParser.FindProjectFileCall.Returns.String = filepath.Join(workingDir, "src/proj1", "app.csproj") - }) - - it.After(func() { - Expect(os.RemoveAll(workingDir)).To(Succeed()) - }) - - it("finds the projfile and passes detection", func() { - result, err := detect(packit.DetectContext{ - WorkingDir: workingDir, - }) - Expect(err).NotTo(HaveOccurred()) - Expect(result).To(Equal(packit.DetectResult{ - Plan: packit.BuildPlan{ - Provides: []packit.BuildPlanProvision{ - {Name: "dotnet-application"}, - }, - Requires: []packit.BuildPlanRequirement{ - { - Name: "dotnet-sdk", - Metadata: dotnetpublish.BuildPlanMetadata{ - Version: "6.0.*", - VersionSource: "app.csproj", - Build: true, - }, - }, - { - Name: "icu", - Metadata: dotnetpublish.BuildPlanMetadata{ - Build: true, - }, - }, - }, - }, - })) - - Expect(buildpackYMLParser.ParseProjectPathCall.Receives.Path).To(Equal(filepath.Join(workingDir, "buildpack.yml"))) Expect(projectParser.FindProjectFileCall.Receives.Root).To(Equal(filepath.Join(workingDir, "src/proj1"))) Expect(projectParser.ParseVersionCall.Receives.Path).To(Equal(filepath.Join(workingDir, "src/proj1", "app.csproj"))) Expect(projectParser.NodeIsRequiredCall.Receives.Path).To(Equal(filepath.Join(workingDir, "src/proj1", "app.csproj"))) @@ -284,19 +228,6 @@ func testDetect(t *testing.T, context spec.G, it spec.S) { }) context("failure cases", func() { - context("when buildpack.yml cannot be parsed", func() { - it.Before(func() { - buildpackYMLParser.ParseProjectPathCall.Returns.Err = fmt.Errorf("parsing error") - }) - - it("fails detection", func() { - _, err := detect(packit.DetectContext{ - WorkingDir: workingDir, - }) - Expect(err).To(MatchError("failed to parse buildpack.yml: parsing error")) - }) - }) - context("when finding project file returns an error", func() { it.Before(func() { projectParser.FindProjectFileCall.Returns.Error = errors.New("some project file error") diff --git a/dotnet_buildpack_yml_parser.go b/dotnet_buildpack_yml_parser.go deleted file mode 100644 index 1320c23e..00000000 --- a/dotnet_buildpack_yml_parser.go +++ /dev/null @@ -1,37 +0,0 @@ -package dotnetpublish - -import ( - "fmt" - "os" - - "gopkg.in/yaml.v2" -) - -type DotnetBuildpackYMLParser struct{} - -func NewDotnetBuildpackYMLParser() BuildpackYMLParser { - return DotnetBuildpackYMLParser{} -} - -func (p DotnetBuildpackYMLParser) ParseProjectPath(path string) (string, error) { - var buildpack struct { - Config struct { - ProjectPath string `yaml:"project-path"` - } `yaml:"dotnet-build"` - } - - file, err := os.Open(path) - if err != nil && !os.IsNotExist(err) { - return "", err - } - defer file.Close() - - if !os.IsNotExist(err) { - err = yaml.NewDecoder(file).Decode(&buildpack) - if err != nil { - return "", fmt.Errorf("invalid buildpack.yml: %w", err) - } - } - - return buildpack.Config.ProjectPath, nil -} diff --git a/dotnet_buildpack_yml_parser_test.go b/dotnet_buildpack_yml_parser_test.go deleted file mode 100644 index 34ccd6e9..00000000 --- a/dotnet_buildpack_yml_parser_test.go +++ /dev/null @@ -1,89 +0,0 @@ -package dotnetpublish_test - -import ( - "os" - "path/filepath" - "testing" - - . "github.com/onsi/gomega" - dotnetpublish "github.com/paketo-buildpacks/dotnet-publish" - "github.com/sclevine/spec" -) - -func testBuildpackYMLParser(t *testing.T, context spec.G, it spec.S) { - var ( - Expect = NewWithT(t).Expect - path string - parser dotnetpublish.DotnetBuildpackYMLParser - ) - - it.Before(func() { - file, err := os.CreateTemp("", "buildpack.yml") - Expect(err).NotTo(HaveOccurred()) - file.Close() - - path = file.Name() - - err = os.WriteFile(path, []byte(`--- -dotnet-build: - project-path: "src/proj1" -`), os.ModePerm) - - Expect(err).NotTo(HaveOccurred()) - }) - - it.After(func() { - Expect(os.RemoveAll(path)).To(Succeed()) - }) - - it("parses the project path", func() { - projectPath, err := parser.ParseProjectPath(path) - - Expect(err).NotTo(HaveOccurred()) - Expect(projectPath).To(Equal("src/proj1")) - }) - - context("when the buildpack.yml file does not exist", func() { - it.Before(func() { - Expect(os.Remove(path)).To(Succeed()) - }) - - it("returns an empty path", func() { - projectPath, err := parser.ParseProjectPath(path) - - Expect(err).NotTo(HaveOccurred()) - Expect(projectPath).To(BeEmpty()) - }) - }) - - context("failure cases", func() { - context("when the file cannot be opened", func() { - it.Before(func() { - Expect(os.Chmod(path, 0000)).To(Succeed()) - }) - - it.After(func() { - Expect(os.Chmod(path, os.ModePerm)).To(Succeed()) - }) - - it("returns the error", func() { - _, err := parser.ParseProjectPath(path) - - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("permission denied")) - }) - }) - context("when the file cannot be unmarshalled", func() { - it.Before(func() { - Expect(os.WriteFile(path, []byte("%%%"), 0644)).To(Succeed()) - }) - - it("returns the error", func() { - _, err := parser.ParseProjectPath(filepath.Join(path)) - - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("invalid buildpack.yml:")) - }) - }) - }) -} diff --git a/fakes/buildpack_yml_parser.go b/fakes/buildpack_yml_parser.go deleted file mode 100644 index 97a22b80..00000000 --- a/fakes/buildpack_yml_parser.go +++ /dev/null @@ -1,29 +0,0 @@ -package fakes - -import "sync" - -type BuildpackYMLParser struct { - ParseProjectPathCall struct { - mutex sync.Mutex - CallCount int - Receives struct { - Path string - } - Returns struct { - ProjectFilePath string - Err error - } - Stub func(string) (string, error) - } -} - -func (f *BuildpackYMLParser) ParseProjectPath(param1 string) (string, error) { - f.ParseProjectPathCall.mutex.Lock() - defer f.ParseProjectPathCall.mutex.Unlock() - f.ParseProjectPathCall.CallCount++ - f.ParseProjectPathCall.Receives.Path = param1 - if f.ParseProjectPathCall.Stub != nil { - return f.ParseProjectPathCall.Stub(param1) - } - return f.ParseProjectPathCall.Returns.ProjectFilePath, f.ParseProjectPathCall.Returns.Err -} diff --git a/init_test.go b/init_test.go index e5f2c7e1..161a15df 100644 --- a/init_test.go +++ b/init_test.go @@ -10,7 +10,6 @@ import ( func TestUnitDotnetPublish(t *testing.T) { suite := spec.New("dotnet-publish", spec.Report(report.Terminal{})) suite("Build", testBuild) - suite("BuildpackYMLParser", testBuildpackYMLParser) suite("Detect", testDetect) suite("DotnetPublishProcess", testDotnetPublishProcess) suite("DotnetSourceRemover", testDotnetSourceRemover) diff --git a/integration/buildpack_yml_test.go b/integration/buildpack_yml_test.go deleted file mode 100644 index b41c8fb8..00000000 --- a/integration/buildpack_yml_test.go +++ /dev/null @@ -1,91 +0,0 @@ -package integration_test - -import ( - "fmt" - "os" - "path/filepath" - "testing" - - "github.com/paketo-buildpacks/occam" - "github.com/sclevine/spec" - - . "github.com/onsi/gomega" - . "github.com/paketo-buildpacks/occam/matchers" -) - -func testBuildpackYML(t *testing.T, context spec.G, it spec.S) { - var ( - Expect = NewWithT(t).Expect - Eventually = NewWithT(t).Eventually - pack occam.Pack - docker occam.Docker - ) - - it.Before(func() { - pack = occam.NewPack() - docker = occam.NewDocker() - }) - - context("when building an app that specifies a project path in buildpack.yml", func() { - var ( - image occam.Image - container occam.Container - name string - source string - ) - - it.Before(func() { - var err error - name, err = occam.RandomName() - Expect(err).NotTo(HaveOccurred()) - }) - - it.After(func() { - Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) - Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) - Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) - Expect(os.RemoveAll(source)).To(Succeed()) - }) - - it("should build a working OCI image for an app that specifies project path via buildpack.yml AND warn", func() { - var err error - source, err = occam.Source(filepath.Join("testdata", "match_dir_and_app_name")) - Expect(err).NotTo(HaveOccurred()) - - err = os.WriteFile(filepath.Join(source, "buildpack.yml"), []byte(` ---- -dotnet-build: - project-path: "./console" -`), os.ModePerm) - Expect(err).NotTo(HaveOccurred()) - - var logs fmt.Stringer - image, logs, err = pack.WithNoColor().Build. - WithBuildpacks( - icuBuildpack, - dotnetCoreSDKBuildpack, - buildpack, - dotnetCoreAspNetRuntimeBuildpack, - dotnetExecuteBuildpack, - ). - Execute(name, source) - Expect(err).NotTo(HaveOccurred(), logs.String()) - - Expect(logs).To(ContainLines( - MatchRegexp(fmt.Sprintf(`%s \d+\.\d+\.\d+`, buildpackInfo.Buildpack.Name)), - " WARNING: Setting the project path through buildpack.yml will be deprecated soon in Dotnet Publish Buildpack v2.0.0", - " Please specify the project path through the $BP_DOTNET_PROJECT_PATH environment variable instead. See README.md or the documentation on paketo.io for more information.", - )) - - container, err = docker.Container.Run. - Execute(image.ID) - Expect(err).NotTo(HaveOccurred()) - - Eventually(func() string { - cLogs, err := docker.Container.Logs.Execute(container.ID) - Expect(err).NotTo(HaveOccurred()) - return cLogs.String() - }).Should(ContainSubstring("Hello, World!")) - }) - }) -} diff --git a/integration/init_test.go b/integration/init_test.go index 8ed9df59..52548ad7 100644 --- a/integration/init_test.go +++ b/integration/init_test.go @@ -129,7 +129,6 @@ func TestIntegration(t *testing.T) { format.MaxLength = 0 suite := spec.New("Integration", spec.Report(report.Terminal{}), spec.Parallel()) - suite("BuildpackYML", testBuildpackYML) suite("Console", testConsole) suite("DefaultApps", testDefaultApps) suite("FSharp", testFSharp) diff --git a/run/main.go b/run/main.go index f048f468..d2ae6cf6 100644 --- a/run/main.go +++ b/run/main.go @@ -28,7 +28,6 @@ func main() { log.Fatal(fmt.Errorf("failed to parse build configuration: %w", err)) } - bpYMLParser := dotnetpublish.NewDotnetBuildpackYMLParser() logger := scribe.NewEmitter(os.Stdout).WithLevel(config.LogLevel) bindingResolver := servicebindings.NewResolver() symlinker := dotnetpublish.NewSymlinker() @@ -41,7 +40,6 @@ func main() { dotnetpublish.Detect( config, dotnetpublish.NewProjectFileParser(), - bpYMLParser, ), dotnetpublish.Build( config, @@ -55,7 +53,6 @@ func main() { chronos.DefaultClock, ), dotnetpublish.NewOutputSlicer(), - bpYMLParser, chronos.DefaultClock, logger, Generator{},