// Detect extracts source code information about the provided source repository func (e SourceRepositoryEnumerator) Detect(dir string) (*SourceRepositoryInfo, error) { info := &SourceRepositoryInfo{ Path: dir, } for _, d := range e.Detectors { if detected, ok := d(dir); ok { info.Types = append(info.Types, SourceLanguageType{ Platform: detected.Platform, Version: detected.Version, }) } } if path, ok, err := e.Tester.Has(dir); err == nil && ok { file, err := os.Open(path) if err != nil { return nil, err } defer file.Close() dockerfile, err := dockerfile.NewParser().Parse(file) if err != nil { return nil, err } info.Dockerfile = dockerfile } if info.Dockerfile == nil && len(info.Types) == 0 { return nil, ErrNoLanguageDetected } return info, nil }
// NewBuildStrategyRefGenerator creates a BuildStrategyRefGenerator func NewBuildStrategyRefGenerator(sourceDetectors source.Detectors) *BuildStrategyRefGenerator { return &BuildStrategyRefGenerator{ gitRepository: git.NewRepository(), dockerfileFinder: dockerfile.NewFinder(), dockerfileParser: dockerfile.NewParser(), sourceDetectors: sourceDetectors, imageRefGenerator: NewImageRefGenerator(), } }
// NewImageRefGenerator creates a new ImageRefGenerator func NewImageRefGenerator() ImageRefGenerator { return &imageRefGenerator{ dockerParser: dockerfile.NewParser(), } }