func filterRecordFiles()

in ci/internal/cli/mitresync.go [152:196]


func filterRecordFiles(files []string) ([]string, error) {
	slog.Debug("filtering record files", "files", files)

	records := make([]string, 0, len(files))

	for _, file := range files {
		logger := slog.With("file", file)

		if !strings.HasPrefix(filepath.Base(file), "CVE-") {
			logger.Debug("excluding file: basename does not start with CVE-")
			continue
		}
		if filepath.Ext(file) != ".json" {
			logger.Debug("excluding file: extension is not .json")
			continue
		}

		f, err := os.Open(file)
		if err != nil {
			return nil, fmt.Errorf("opening record file: %w", err)
		}

		version, err := cve.RecordVersion(f)
		f.Close()
		if err != nil {
			if errors.Is(err, cve.ErrNotCVERecord) {
				logger.Debug("excluding file: does not contain a CVE record")
				continue
			}

			return nil, fmt.Errorf("determining record version in %s: %w", file, err)
		}

		if !strings.HasPrefix(version, "5.") {
			logger.Debug("excluding file: does not contain a v5 CVE record", "version", version)
			continue
		}

		logger.Debug("including file")

		records = append(records, file)
	}

	return records, nil
}