func()

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
}