feat(repo): add CI check for valid codeowners patterns (#16729)

This commit is contained in:
Craigory Coppola 2023-05-05 15:45:55 -04:00 committed by GitHub
parent fa25a47614
commit c7ce767298
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 60 additions and 7 deletions

View File

@ -194,7 +194,7 @@ jobs:
pnpm nx-cloud record -- nx format:check --base=$NX_BASE --head=$NX_HEAD &
pids+=($!)
pnpm nx run-many -t check-imports check-commit check-lock-files depcheck --parallel=1 --no-dte &
pnpm nx run-many -t check-imports check-commit check-lock-files depcheck check-codeowners --parallel=1 --no-dte &
pids+=($!)
pnpm nx affected --target=lint --base=$NX_BASE --head=$NX_HEAD --parallel=3 &

View File

@ -11,7 +11,7 @@ pnpm-lock.yaml @FrozenPandaz @vsavkin @AgentEnder @jaysoo @JamesHenry
/docs @bcabanes @isaacplmann @juristr
/docs/nx-cloud @StalkAltan @rarmatei @isaacplmann @juristr @bcabanes
/graph/** @philipjfulcher @FrozenPandaz @bcabanes
/images/shared @bcabanes @isaacplmann @juristr
/images @bcabanes @isaacplmann @juristr
/nx-dev/** @bcabanes @isaacplmann @juristr
/typedoc-theme @bcabanes @isaacplmann
@ -76,7 +76,6 @@ pnpm-lock.yaml @FrozenPandaz @vsavkin @AgentEnder @jaysoo @JamesHenry
/docs/shared/packages/web/** @jaysoo @mandarini @ndcunningham
/docs/shared/packages/webpack/** @jaysoo @mandarini @ndcunningham
/docs/shared/packages/esbuild/** @nartc @jaysoo @ndcunningham
/docs/shared/packages/rollup/** @jaysoo @mandarini @ndcunningham
/docs/shared/packages/vite/** @jaysoo @mandarini @ndcunningham
/packages/js/** @nartc @jaysoo @ndcunningham
/e2e/js/** @nartc @jaysoo @ndcunningham
@ -121,14 +120,17 @@ pnpm-lock.yaml @FrozenPandaz @vsavkin @AgentEnder @jaysoo @JamesHenry
/docs/generated/devkit/** @FrozenPandaz @AgentEnder
/docs/generated/packages/devkit/** @FrozenPandaz @AgentEnder
/packages/devkit/** @FrozenPandaz @AgentEnder
/packages/devkit/index.ts @FrozenPandaz @vsavkin
/packages/devkit/index.js @FrozenPandaz @vsavkin
/packages/devkit/index.d.ts @FrozenPandaz @vsavkin
/packages/devkit/public-api.ts @FrozenPandaz @vsavkin
/packages/devkit/nx.ts @FrozenPandaz @vsavkin
/packages/devkit/src/utils/module-federation @jaysoo @Coly010
# Nx-Plugin
/docs/generated/packages/plugin/** @AgentEnder @FrozenPandaz
/docs/shared/packages/plugin/** @AgentEnder @FrozenPandaz @isaacplmann @juristr
/packages/plugin/** @AgentEnder @FrozenPandaz
/e2e/nx-plugin/** @AgentEnder @FrozenPandaz
/e2e/plugin/** @AgentEnder @FrozenPandaz
## Core
/docs/generated/packages/nx/** @vsavkin @FrozenPandaz @AgentEnder
@ -136,7 +138,7 @@ pnpm-lock.yaml @FrozenPandaz @vsavkin @AgentEnder @jaysoo @JamesHenry
/packages/nx/** @vsavkin @FrozenPandaz @AgentEnder
/packages/nx/src/adapter @AgentEnder @leosvelperez
/packages/nx/src/native @vsavkin @FrozenPandaz @Cammisuli
/packages/nx/src/lock-file @meeroslav @FrozenPandaz
/packages/nx/src/plugins/js/lock-file @meeroslav @FrozenPandaz
/packages/nx/src/command-line/init/implementation/angular/** @Coly010 @leosvelperez @FrozenPandaz
/e2e/nx-init/src/nx-init-angular.test.ts @Coly010 @leosvelperez
/packages/nx/src/command-line/init/implementation/react/** @jaysoo @xiongemi @mandarini
@ -170,7 +172,7 @@ pnpm-lock.yaml @FrozenPandaz @vsavkin @AgentEnder @jaysoo @JamesHenry
# Global Files
project.json @FrozenPandaz @vsavkin
jest.config.ts @barbados-clemens @FrozenPandaz
jest.preset.ts @barbados-clemens @FrozenPandaz
jest.preset.js @barbados-clemens @FrozenPandaz
# Overrides - These are applied last, so override any matches above.
docs/generated/manifests/* @bcabanes @FrozenPandaz @jaysoo @AgentEnder @isaacplmann @juristr

View File

@ -11,6 +11,7 @@
"check-imports": "node ./scripts/check-imports.js",
"check-lock-files": "node ./scripts/check-lock-files.js",
"check-documentation-map": "ts-node -P ./scripts/tsconfig.scripts.json ./scripts/documentation/map-link-checker.ts",
"check-codeowners": "ts-node -P ./scripts/tsconfig.scripts.json ./scripts/check-codeowners.ts",
"e2e-start-local-registry": "node ./scripts/e2e-start-local-registry.js",
"e2e-build-package-publish": "ts-node -P ./scripts/tsconfig.e2e.json ./scripts/e2e-build-package-publish.ts",
"nx-release": "ts-node -P ./scripts/tsconfig.release.json ./scripts/nx-release",
@ -339,6 +340,7 @@
"check-format",
"check-imports",
"check-lock-files",
"check-codeowners",
"depcheck",
"documentation"
]

View File

@ -0,0 +1,49 @@
import * as fg from 'fast-glob';
import * as path from 'path';
import * as fs from 'fs';
import { output } from '@nx/devkit';
async function main() {
const codeowners = fs.readFileSync(
path.join(__dirname, '../CODEOWNERS'),
'utf-8'
);
const codeownersLines = codeowners
.split('\n')
.filter((line) => line.trim().length > 0 && !line.startsWith('#'));
const errors: string[] = [];
for (const line of codeownersLines) {
// This is perhaps a bit naive, but it should
// work for all paths and patterns that do not
// contain spaces.
const specifiedPattern = line.split(' ')[0];
let foundMatchingFiles = false;
const patternsToCheck = specifiedPattern.startsWith('/')
? [`.${specifiedPattern}`]
: [`./${specifiedPattern}`, `**/${specifiedPattern}`];
for (const pattern of patternsToCheck) {
foundMatchingFiles ||=
fg.sync(pattern, {
ignore: ['node_modules', 'dist', 'build', '.git'],
cwd: path.join(__dirname, '..'),
onlyFiles: false,
}).length > 0;
}
if (!foundMatchingFiles) {
errors.push(specifiedPattern);
}
}
if (errors.length > 0) {
output.error({
title: `The following patterns in CODEOWNERS do not match any files:`,
bodyLines: errors.map((e) => `- ${e}`),
});
process.exit(1);
}
}
main();