angular-cn/dev-infra/pullapprove/parse-yaml.ts

46 lines
1.3 KiB
TypeScript

/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import {parse as parseYaml} from 'yaml';
import {PullApproveGroup} from './group';
export interface PullApproveGroupConfig {
conditions?: string[];
reviewers?: {
users: string[],
teams?: string[],
}|{
teams: string[],
};
}
export interface PullApproveConfig {
version: number;
github_api_version?: string;
pullapprove_conditions?: {
condition: string,
unmet_status: string,
explanation: string,
}[];
groups: {
[key: string]: PullApproveGroupConfig,
};
}
export function parsePullApproveYaml(rawYaml: string): PullApproveConfig {
return parseYaml(rawYaml, {merge: true}) as PullApproveConfig;
}
/** Parses all of the groups defined in the pullapprove yaml. */
export function getGroupsFromYaml(pullApproveYamlRaw: string): PullApproveGroup[] {
/** JSON representation of the pullapprove yaml file. */
const pullApprove = parsePullApproveYaml(pullApproveYamlRaw);
return Object.entries(pullApprove.groups).reduce((groups, [groupName, group]) => {
return groups.concat(new PullApproveGroup(groupName, group, groups));
}, [] as PullApproveGroup[]);
}