mirror of
https://github.com/elastic/kibana.git
synced 2025-06-27 18:51:07 -04:00
[Test Owners] Add script to get owners for files (#193277)
## Summary Node script to report ownership of a given file in our repo. The script's source of truth is `.github/CODEOWNERS`, which is generated by `@kbn/generate` In order to reach the goal of have zero files without code ownership, this is one small step along the way. ### To Test #### Happy Path `node scripts/get_owners_for_file.js --file packages/kbn-ace/src/ace/modes/index.ts` ``` succ elastic/kibana-management ``` #### Unknown Path `node scripts/get_owners_for_file.js --file some-file.txt` ``` ERROR Ownership of file [some-file.txt] is UNKNOWN ``` #### Error Path `node scripts/get_owners_for_file.js` ``` ERROR Missing --flag argument node scripts/get_owners_for_file.js Report file ownership from GitHub CODEOWNERS file. Options: --file Required, path to the file to report owners for. --verbose, -v Log verbosely --debug Log debug messages (less than verbose) --quiet Only log errors --silent Don't log anything --help Show this message ``` ### Notes Along with this small pr, next will be to ensure owners are assigned to all ES and KBN Archives. See more info in the link below: Contributes to: https://github.com/elastic/kibana/issues/192979 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
parent
fd9691183e
commit
8a79173c4e
4 changed files with 54 additions and 6 deletions
|
@ -8,9 +8,10 @@
|
|||
*/
|
||||
|
||||
import { REPO_ROOT } from '@kbn/repo-info';
|
||||
import { createFailError } from '@kbn/dev-cli-errors';
|
||||
import { createFailError, createFlagError } from '@kbn/dev-cli-errors';
|
||||
import { join as joinPath } from 'path';
|
||||
import { existsSync, readFileSync } from 'fs';
|
||||
import { run } from '@kbn/dev-cli-runner';
|
||||
|
||||
import type { Ignore } from 'ignore';
|
||||
import ignore from 'ignore';
|
||||
|
@ -20,6 +21,10 @@ export interface PathWithOwners {
|
|||
teams: string;
|
||||
ignorePattern: Ignore;
|
||||
}
|
||||
const existOrThrow = (targetFile: string) => {
|
||||
if (existsSync(targetFile) === false)
|
||||
throw createFailError(`Unable to determine code owners: file ${targetFile} Not Found`);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the .github/CODEOWNERS entries, prepared for path matching.
|
||||
|
@ -29,9 +34,7 @@ export interface PathWithOwners {
|
|||
*/
|
||||
export function getPathsWithOwnersReversed(): PathWithOwners[] {
|
||||
const codeownersPath = joinPath(REPO_ROOT, '.github', 'CODEOWNERS');
|
||||
if (existsSync(codeownersPath) === false) {
|
||||
throw createFailError(`Unable to determine code owners: file ${codeownersPath} not found`);
|
||||
}
|
||||
existOrThrow(codeownersPath);
|
||||
const codeownersContent = readFileSync(codeownersPath, { encoding: 'utf8', flag: 'r' });
|
||||
const codeownersLines = codeownersContent.split(/\r?\n/);
|
||||
const codeowners = codeownersLines
|
||||
|
@ -66,3 +69,32 @@ export function getCodeOwnersForFile(
|
|||
|
||||
return match?.teams;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the getCodeOwnersForFile() method above.
|
||||
* Report back to the cli with either success and the owner(s), or a failure.
|
||||
*
|
||||
* This function depends on a --file param being passed on the cli, like this:
|
||||
* $ node scripts/get_owners_for_file.js --file SOME-FILE
|
||||
*/
|
||||
export async function runGetOwnersForFileCli() {
|
||||
run(
|
||||
async ({ flags, log }) => {
|
||||
const targetFile = flags.file as string;
|
||||
if (!targetFile) throw createFlagError(`Missing --flag argument`);
|
||||
existOrThrow(targetFile); // This call is duplicated in getPathsWithOwnersReversed(), so this is a short circuit
|
||||
const result = getCodeOwnersForFile(targetFile);
|
||||
if (result) log.success(result);
|
||||
else log.error(`Ownership of file [${targetFile}] is UNKNOWN`);
|
||||
},
|
||||
{
|
||||
description: 'Report file ownership from GitHub CODEOWNERS file.',
|
||||
flags: {
|
||||
string: ['file'],
|
||||
help: `
|
||||
--file Required, path to the file to report owners for.
|
||||
`,
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue