Refactor the commit-message files to be consistent with how other ng-dev tooling is structured. PR Close #38845
		
			
				
	
	
		
			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,
 | |
|   },
 | |
| };
 |