go-build/internal/projectdetect/projectdetect.go
Virgil 0c39bc99f3 feat(build): auto-detect fallback builders
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 09:46:42 +00:00

44 lines
1.1 KiB
Go

package projectdetect
import (
"dappco.re/go/core/build/pkg/build"
"dappco.re/go/core/build/pkg/build/builders"
"dappco.re/go/core/io"
)
type detector struct {
projectType build.ProjectType
builder build.Builder
}
var fallbackDetectors = []detector{
{projectType: build.ProjectTypeDocker, builder: builders.NewDockerBuilder()},
{projectType: build.ProjectTypeLinuxKit, builder: builders.NewLinuxKitBuilder()},
{projectType: build.ProjectTypeCPP, builder: builders.NewCPPBuilder()},
{projectType: build.ProjectTypeTaskfile, builder: builders.NewTaskfileBuilder()},
}
// DetectProjectType returns the first buildable project type in detection order.
//
// projectType, err := projectdetect.DetectProjectType(io.Local, ".")
func DetectProjectType(fs io.Medium, dir string) (build.ProjectType, error) {
projectType, err := build.PrimaryType(fs, dir)
if err != nil {
return "", err
}
if projectType != "" {
return projectType, nil
}
for _, fallback := range fallbackDetectors {
detected, err := fallback.builder.Detect(fs, dir)
if err != nil {
return "", err
}
if detected {
return fallback.projectType, nil
}
}
return "", nil
}