Check a range of commits by retrieving the log files to be parsed with the expected format for the parser. This change is in part of a larger set of changes making the process for obtaining and parsing commits for release note creation and message validation consistent. This consistency will make it easier to debug as well as ease the design of tooling which is built on top of these processes. PR Close #41341
96 lines
2.6 KiB
TypeScript
96 lines
2.6 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 {assertNoErrors, getConfig, NgDevConfig} from '../utils/config';
|
|
|
|
/** Configuration for commit-message comands. */
|
|
export interface CommitMessageConfig {
|
|
maxLineLength: number;
|
|
minBodyLength: number;
|
|
minBodyLengthTypeExcludes?: string[];
|
|
scopes: string[];
|
|
}
|
|
|
|
/** Retrieve and validate the config as `CommitMessageConfig`. */
|
|
export function getCommitMessageConfig() {
|
|
// List of errors encountered validating the config.
|
|
const errors: string[] = [];
|
|
// The non-validated config object.
|
|
const config: Partial<NgDevConfig<{commitMessage: CommitMessageConfig}>> = getConfig();
|
|
|
|
if (config.commitMessage === undefined) {
|
|
errors.push(`No configuration defined for "commitMessage"`);
|
|
}
|
|
|
|
assertNoErrors(errors);
|
|
return config as Required<typeof config>;
|
|
}
|
|
|
|
/** Scope requirement level to be set for each commit type. */
|
|
export enum ScopeRequirement {
|
|
Required,
|
|
Optional,
|
|
Forbidden,
|
|
}
|
|
|
|
/** A commit type */
|
|
export interface CommitType {
|
|
description: string;
|
|
name: string;
|
|
scope: ScopeRequirement;
|
|
}
|
|
|
|
/** The valid commit types for Angular commit messages. */
|
|
export const COMMIT_TYPES: {[key: string]: CommitType} = {
|
|
build: {
|
|
name: 'build',
|
|
description: 'Changes to local repository build system and tooling',
|
|
scope: ScopeRequirement.Optional,
|
|
},
|
|
ci: {
|
|
name: 'ci',
|
|
description: 'Changes to CI configuration and CI specific tooling',
|
|
scope: ScopeRequirement.Forbidden,
|
|
},
|
|
docs: {
|
|
name: 'docs',
|
|
description: 'Changes which exclusively affects documentation.',
|
|
scope: ScopeRequirement.Optional,
|
|
},
|
|
feat: {
|
|
name: 'feat',
|
|
description: 'Creates a new feature',
|
|
scope: ScopeRequirement.Required,
|
|
},
|
|
fix: {
|
|
name: 'fix',
|
|
description: 'Fixes a previously discovered failure/bug',
|
|
scope: ScopeRequirement.Required,
|
|
},
|
|
perf: {
|
|
name: 'perf',
|
|
description: 'Improves performance without any change in functionality or API',
|
|
scope: ScopeRequirement.Required,
|
|
},
|
|
refactor: {
|
|
name: 'refactor',
|
|
description: 'Refactor without any change in functionality or API (includes style changes)',
|
|
scope: ScopeRequirement.Required,
|
|
},
|
|
release: {
|
|
name: 'release',
|
|
description: 'A release point in the repository',
|
|
scope: ScopeRequirement.Forbidden,
|
|
},
|
|
test: {
|
|
name: 'test',
|
|
description: 'Improvements or corrections made to the project\'s test suite',
|
|
scope: ScopeRequirement.Required,
|
|
},
|
|
};
|