The project is designed to be extensible. Reusable functions are placed in src/lib/ so they can be used by multiple scripts. Report-specific logic goes in src/reports/{report-name}/.
- Copy
.env.exampleto.envand setGH_TOKENto a fine-grained personal access token withmembersorg scope andmetadatarepo scope. - Run a report:
bun run report:repos-with-no-team [org]
bun run report:repos-with-no-admin-team [org]
bun run report:repos-with-multi-admin-teams [org]The [org] argument defaults to devantler-tech if omitted. API responses are cached in .cache/ to speed up repeated runs during development — delete the directory to force a refresh.
Run all CI checks locally before pushing:
bun run ciThis runs type checking, linting (ESLint), formatting (Prettier), and tests in sequence. You can also run them individually:
bun run typecheck # TypeScript type checking
bun run lint # ESLint
bun run format:check # Prettier (check only)
bun test # Tests with coverage- Create a new directory
src/reports/{report-name}/for report-specific logic - Create the main report script at
src/reports/{report-name}.ts - Add tests in
src/reports/{report-name}/find-violations.test.ts— usemakeTeam/makeRepofrom@test/helpers - Add
"report:{name}": "bun run src/reports/{name}.ts"topackage.json - Add a workflow in
.github/workflows/report-{name}.ymlfollowing the existing pattern