Skip to content

Support building applications via build tools #1257

@cceelen

Description

@cceelen

There are plenty of other build tools in the .NET ecosystem that are used to manage dependencies and coordinate the build. Examples are Nuke, cake, or fake. Building projects that use these build tools is currently not working with buildpack out of the box and I have also not found documentation to adapt this via project configuration.

Describe the Enhancement

Detect the build tool by their tool configuration and the location of their configuration file/directories:

  • .config/dotnet-tools.json contains usually one of the build tools
    • Nuke jsonpath: 'tools."nuke.globaltool"'
    • Cake jsonpath: 'tools.
    • Fake jsonpath: 'tools.fake-cli'
  • nuke (repo contains a folder configuring nuke. default _nuke)
  • cake (repo contains a folder configuring cake. default build.cake)
  • fake (repo contains a file build.fsx / build.fsproj)
  • repo contain a script called build.cmd or build.sh
    • often used by the chosen CI/CD solution to execute the build
    • sometimes add additional nuget sources

Execute the build using the configured build tool of the repo.

Possible Solution

I see several possibilities to do this:

  1. Detect the different build tools and execute these instead of dotnet workflow, or
  2. Add a build pack configuration variable that allows to override the dotnet workflow with a build script.

Option 1. has the advantage that it will be easier to map to the buildpack work flow and the understanding of the different DSLs used by the build tools gives indication whether what libraries and binaries exist.
Option 2 is a very simple solution, but comes at the cost that the BP user might need to adapt their script targets to what the BP actually needs.

Motivation

There are a lot of complex C# projects that use the more advanced DSL of the build tools above to build and package their project. Adding the support for this to the BP is important for a lot of .NET users.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions