-
Notifications
You must be signed in to change notification settings - Fork 0
/
.czferc.js
132 lines (131 loc) · 3.63 KB
/
.czferc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
const { contributors } = require('./package.json');
//Co-authored-by: name <[email protected]>
/**
* @typedef {{type: string; scope: string; subject: string; body: string; isBreaking: boolean; breakingBody: string; breaking: string; isIssueAffected: boolean; issuesBody: string; issues: string;}} Answers
*/
const types = [
{
name: 'feat: A new feature',
value: 'feat',
},
{
name: 'fix: A bug fix',
value: 'fix',
},
{
name: 'docs: Documentation only changes',
value: 'docs',
},
{
name: 'style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)',
value: 'style',
},
{
name: 'refactor: A code change that neither fixes a bug nor adds a feature',
value: 'refactor',
},
{
name: 'perf: A code change that improves performance',
value: 'perf',
},
{
name: 'test: Adding missing tests or correcting existing tests',
value: 'test',
},
{
name: "chore: Other changes that don't modify src or test files",
value: 'chore',
},
{
name: 'revert: Reverts a previous commit',
value: 'revert',
},
];
const scopes = [
{
name: 'core: base system of the application',
value: 'core',
},
{
name: 'extensions: systems that are observed',
value: 'extensions',
},
{
name: 'tools: other things in the project',
value: 'tools',
},
];
/** @type import('cz-format-extension').Config<Answers> */
module.exports = {
questions({ inquirer }) {
return [
{
type: 'list',
name: 'type',
message: "'What is the type of this change:",
choices: types,
},
{
type: 'list',
name: 'scope',
message: 'What is the scope of this change:',
choices: scopes,
},
{
type: 'input',
name: 'subject',
message: 'Write a short, imperative tense description of the change\n',
validate: (subject) => (subject.length === 0 ? 'subject is required' : true),
},
{
type: 'input',
name: 'body',
message: 'Provide a longer description of the change: (press enter to skip)\n',
},
{
type: 'confirm',
name: 'isBreaking',
message: 'Are there any breaking changes?',
default: false,
},
{
type: 'input',
name: 'breaking',
message: 'Describe the breaking changes:\n',
when: (answers) => answers.isBreaking,
},
{
type: 'confirm',
name: 'isIssueAffected',
message: 'Does this change affect any open issues?',
default: false,
},
{
type: 'input',
name: 'issues',
message: 'Add issue references:\n',
when: (answers) => answers.isIssueAffected,
default: undefined,
validate: (issues) => (issues.length === 0 ? 'issues is required' : true),
},
{
type: 'checkbox',
name: 'coauthors',
message: 'Select Co-Authors if any:',
choices: contributors.map((contributor) => ({
name: contributor.name,
value: `Co-authored-by: ${contributor.name} <${contributor.email}>`,
})),
},
];
},
commitMessage({ answers }) {
const scope = answers.scope ? `(${answers.scope})` : '';
const head = `${answers.type}${scope}: ${answers.subject}`;
const body = answers.body ? answers.body : '';
const breaking = answers.breaking ? `BREAKING CHANGE: ${answers.breaking}` : '';
const issues = answers.issues ? answers.issues : '';
const coauthors = answers.coauthors.join('\n');
return [head, body, breaking, issues, coauthors].join('\n\n').trim();
},
};