Files
grafana/scripts/codeowners-manifest
Jesse David Peterson 70dc9a0027 Tests: Custom script to run unit tests filtered by code ownership (#111210)
* feat(script): generate a source file x teams manifest from CODEOWNERS

* feat(script): unit tests + coverage report only for files owned by team

* feat(script): calculate CODEOWNERS metadata

* refactor(script): export a pure codeowners manifest generation function

* refactor(script): export a pure test coverage by team function

* refactor(script): generate raw JSONL codeowners data from Node.js script

* feat(script): put codeowners manifest all together in one script

* refactor(scripts): group consistently with NPM script name

* refactor(scripts): deduplicate constants for file paths etc.

* refactor(scripts): make console output cute 💅

* refactor(tests): make coverage by "owner" directory more human readable

* refactor(scripts): use consistent naming "codeowner" instead of "team"

* chore(codeowners): mark DataViz as owners of scripts for now

* chore(todo): leave a note where coverage metrics should be emitted later

* fix(gitignore): ignore root codeowners-manifest directory not scripts/*

* refactor(script): rename manifest to generate for clarity

* docs(readme): add a brief README describing new scrips

* chore(linter): ignore temporary files in prettier, fix whitespace format

* refactor(script): simplify Jest config by using team files list directly

* refactor(script): simplify script, partition sourceFiles and testFiles

* refactor(script): simplify and parallelize manifest write operations

* fix(script): handle errors for JSONL line reader

* refactor(script): use Map instead of POJOs

* fix(script): handle errors when streaming raw JSONL output

* fix(script): add error handling, and use promise API for metadata check

* fix(reporter): suppress duplicate Jest CLI coverage report output

* refactor(script): simplify with fs promises API for consistency

* fix(script): error handling for cp spawn-ed process

* refactor(script): use Promise API for mkdir + exists

* refactor(script): use fs Promise API

* refactor(script): use fs Promise API

* fix(script): same allow list for sourceFilter and all Jest config rules

Co-authored-by: Paul Marbach <paul.marbach@grafana.com>

* fix(script): bust cache when new files are created also

---------

Co-authored-by: Paul Marbach <paul.marbach@grafana.com>
2025-10-07 17:07:55 -04:00
..

Codeowners Manifest Scripts

Scripts for generating and caching CODEOWNERS manifest data.

Each of these scripts can be run individually if needed, but index.js is most useful because it combines them all.

Usage

# Combined script
node index.js     # Generate complete manifest with caching

# Individual scripts
node metadata.js  # Generate metadata with hashes
node raw.js       # Generate raw audit data
node generate.js  # Process raw data into manifest files

Control flow of index.js

flowchart TD
    A[index.js] --> B[metadata.js: Generate new metadata]
    B --> C{Existing metadata exists?}
    C -->|No| D[Generate all files]
    C -->|Yes| E{Hashes match?}
    E -->|No| D
    E -->|Yes| F[Skip generation]

    D --> G[raw.js: Generate audit data]
    G --> H[generate.js: Process into JSON files]
    H --> I[Save new metadata]
    I --> J[Complete]

    F --> J

    style F fill:#e1f5fe
    style J fill:#e8f5e8

Default output

By default these scripts will write the following files to the /codeowners-manifest/* directory.

  • audit-raw.jsonl - Raw CODEOWNERS audit data in JSONL format (for fast stream processing)
  • teams.json - List of all codeowners (for validating codeowner names)
  • teams-by-filename.json - Files mapped to their respective codeowners
  • filenames-by-team.json - Codeowners mapped to their respective files
  • metadata.json - Hashes for cache validation