44 lines
1.1 KiB
Go
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
|
|
}
|