in dev/codeowners/codeowners.go [211:250]
func (codeowners *githubOwners) checkDataStreams(packagePath string) error {
packageDataStreamsPath := path.Join(packagePath, "data_stream")
if _, err := os.Stat(packageDataStreamsPath); os.IsNotExist(err) {
// package doesn't have data_streams
return nil
}
dataStreamDirEntries, err := os.ReadDir(packageDataStreamsPath)
if err != nil {
return err
}
totalDataStreams := len(dataStreamDirEntries)
if totalDataStreams == 0 {
// package doesn't have data_streams
return nil
}
var dataStreamsWithoutOwner []string
for _, dataStreamDirEntry := range dataStreamDirEntries {
dataStreamName := dataStreamDirEntry.Name()
dataStreamDir := path.Join(packageDataStreamsPath, dataStreamName)
dataStreamOwners, found := codeowners.owners["/"+dataStreamDir]
if !found {
dataStreamsWithoutOwner = append(dataStreamsWithoutOwner, dataStreamDir)
continue
}
if len(dataStreamOwners) > 1 {
return fmt.Errorf("data stream \"%s\" of package \"%s\" has more than one owners [%s]", dataStreamDir,
packagePath, strings.Join(dataStreamOwners, ", "))
}
}
if notFound := len(dataStreamsWithoutOwner); notFound > 0 && notFound != totalDataStreams {
return fmt.Errorf("package \"%s\" shares ownership across data streams but these ones [%s] lack owners", packagePath,
strings.Join(dataStreamsWithoutOwner, ", "))
}
return nil
}