// AddComponentInputsToRefBuilder set up the components to be used by the reference builder. func AddComponentInputsToRefBuilder(b *app.ReferenceBuilder, r *Resolvers, c *ComponentInputs, g *GenerationInputs) error { // lookup source repositories first (before processing the component inputs) repositories, err := AddSourceRepositoriesToRefBuilder(b, c.SourceRepositories, g) if err != nil { return err } // identify the types of the provided source locations if err := DetectSource(repositories, r.Detector, g); err != nil { return err } b.AddComponents(c.DockerImages, func(input *app.ComponentInput) app.ComponentReference { input.Argument = fmt.Sprintf("--docker-image=%q", input.From) input.Searcher = r.DockerSearcher if r.DockerSearcher != nil { resolver := app.PerfectMatchWeightedResolver{} resolver = append(resolver, app.WeightedResolver{Searcher: r.DockerSearcher, Weight: 0.0}) if r.AllowMissingImages { resolver = append(resolver, app.WeightedResolver{Searcher: app.MissingImageSearcher{}, Weight: 100.0}) } input.Resolver = resolver } return input }) b.AddComponents(c.ImageStreams, func(input *app.ComponentInput) app.ComponentReference { input.Argument = fmt.Sprintf("--image-stream=%q", input.From) input.Searcher = r.ImageStreamSearcher if r.ImageStreamSearcher != nil { resolver := app.PerfectMatchWeightedResolver{ app.WeightedResolver{Searcher: r.ImageStreamSearcher}, } input.Resolver = resolver } return input }) b.AddComponents(c.Templates, func(input *app.ComponentInput) app.ComponentReference { input.Argument = fmt.Sprintf("--template=%q", input.From) input.Searcher = r.TemplateSearcher if r.TemplateSearcher != nil { input.Resolver = app.HighestUniqueScoreResolver{Searcher: r.TemplateSearcher} } return input }) b.AddComponents(c.TemplateFiles, func(input *app.ComponentInput) app.ComponentReference { input.Argument = fmt.Sprintf("--file=%q", input.From) if r.TemplateFileSearcher != nil { input.Resolver = app.FirstMatchResolver{Searcher: r.TemplateFileSearcher} } input.Searcher = r.TemplateFileSearcher return input }) b.AddComponents(c.Components, func(input *app.ComponentInput) app.ComponentReference { resolver := app.PerfectMatchWeightedResolver{} searcher := app.MultiWeightedSearcher{} if r.ImageStreamSearcher != nil { resolver = append(resolver, app.WeightedResolver{Searcher: r.ImageStreamSearcher, Weight: 0.0}) searcher = append(searcher, app.WeightedSearcher{Searcher: r.ImageStreamSearcher, Weight: 0.0}) } if r.TemplateSearcher != nil && !input.ExpectToBuild { resolver = append(resolver, app.WeightedResolver{Searcher: r.TemplateSearcher, Weight: 0.0}) searcher = append(searcher, app.WeightedSearcher{Searcher: r.TemplateSearcher, Weight: 0.0}) } if r.TemplateFileSearcher != nil && !input.ExpectToBuild { resolver = append(resolver, app.WeightedResolver{Searcher: r.TemplateFileSearcher, Weight: 0.0}) } if r.DockerSearcher != nil { resolver = append(resolver, app.WeightedResolver{Searcher: r.DockerSearcher, Weight: 2.0}) searcher = append(searcher, app.WeightedSearcher{Searcher: r.DockerSearcher, Weight: 1.0}) } if r.AllowMissingImages { resolver = append(resolver, app.WeightedResolver{Searcher: app.MissingImageSearcher{}, Weight: 100.0}) } input.Resolver = resolver input.Searcher = searcher return input }) b.AddGroups(c.Groups) return nil }