in cmds/contest-generator/config.go [105:143]
func (c *Config) Validate() error {
if err := c.TargetManagers.Validate(); err != nil {
return fmt.Errorf("target managers validation failed: %w", err)
}
if err := c.TestFetchers.Validate(); err != nil {
return fmt.Errorf("test fetchers validation failed: %w", err)
}
if err := c.TestSteps.Validate(); err != nil {
return fmt.Errorf("test steps validation failed: %w", err)
}
if err := c.Reporters.Validate(); err != nil {
return fmt.Errorf("reporters validation failed: %w", err)
}
// ensure that there are no duplicate package names
// map of alias => plugintypes
plugins := make(map[string][]string)
for _, e := range c.TargetManagers {
plugins[e.ToAlias()] = append(plugins[e.ToAlias()], "targetmanagers")
}
for _, e := range c.TestFetchers {
plugins[e.ToAlias()] = append(plugins[e.ToAlias()], "testfetchers")
}
for _, e := range c.TestSteps {
plugins[e.ToAlias()] = append(plugins[e.ToAlias()], "teststeps")
}
for _, e := range c.Reporters {
plugins[e.ToAlias()] = append(plugins[e.ToAlias()], "reporters")
}
var duplicates []string
for name, ptypes := range plugins {
if len(ptypes) > 1 {
duplicates = append(duplicates, name)
}
}
if len(duplicates) > 0 {
return fmt.Errorf("found %d duplicate plugin(s): %v", len(duplicates), duplicates)
}
return nil
}