-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathrelease-notes-transform.cjs
More file actions
73 lines (61 loc) · 2.06 KB
/
release-notes-transform.cjs
File metadata and controls
73 lines (61 loc) · 2.06 KB
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
'use strict';
const TYPES = [
{ type: 'chore', hidden: true },
{ type: 'feat', section: ':gift: Features', hidden: false },
{ type: 'fix', section: ':lady_beetle: Bug Fixes', hidden: false },
{ type: 'refactor', section: ':hammer_and_wrench: Refactored', hidden: false },
{ type: 'revert', section: ':back: Reverted', hidden: false },
{ type: 'style', hidden: true },
{ type: 'test', hidden: true },
];
function createTransform(allowedScopes) {
const scopeSet = new Set(allowedScopes);
const typeMap = new Map(TYPES.map(t => [t.type, t]));
return (commit, context) => {
if (!scopeSet.has(commit.scope)) return null;
let discard = true;
const issues = [];
commit.notes.forEach(note => {
note.title = 'BREAKING CHANGES';
discard = false;
});
if (typeMap.has(commit.type)) {
const typeConfig = typeMap.get(commit.type);
if (typeConfig.hidden) return null;
commit.type = typeConfig.section;
discard = false;
} else if (discard) {
return null;
}
if (commit.scope === '*') commit.scope = '';
if (typeof commit.hash === 'string') {
commit.shortHash = commit.hash.substring(0, 7);
}
if (typeof commit.subject === 'string') {
let url = context.repository
? `${context.host}/${context.owner}/${context.repository}`
: context.repoUrl;
if (url) {
url = `${url}/issues/`;
commit.subject = commit.subject.replace(/#([0-9]+)/g, (_, issue) => {
issues.push(issue);
return `[#${issue}](${url}${issue})`;
});
}
if (context.host) {
commit.subject = commit.subject.replace(
/\B@([a-z0-9](?:-(?=[a-z0-9])|[a-z0-9]){0,38})/g,
(_, username) => {
if (username.includes('/')) return `@${username}`;
return `[@${username}](${context.host}/${username})`;
}
);
}
}
commit.references = commit.references.filter(
reference => !issues.includes(reference.issue)
);
return commit;
};
}
module.exports = { createTransform, TYPES };