@release-it/keep-a-changelog 2.3.0 → 3.0.0-esm.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierrc +4 -4
- package/README.md +36 -8
- package/index.js +53 -21
- package/package.json +10 -8
- package/test.js +76 -16
package/.prettierrc
CHANGED
package/README.md
CHANGED
|
@@ -21,11 +21,39 @@ In [release-it](https://github.com/release-it/release-it) config:
|
|
|
21
21
|
|
|
22
22
|
## Options
|
|
23
23
|
|
|
24
|
-
| option
|
|
25
|
-
|
|
|
26
|
-
| filename
|
|
27
|
-
| strictLatest
|
|
28
|
-
| addUnreleased
|
|
29
|
-
| keepUnreleased
|
|
30
|
-
| addVersionUrl
|
|
31
|
-
|
|
|
24
|
+
| option | default value | description |
|
|
25
|
+
| ----------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
26
|
+
| filename | `'CHANGELOG.md'` | File with changelogs. |
|
|
27
|
+
| strictLatest | `true` | Entry of latest version must be present in order to get correct changelog. Set this option to `false` if you expect latest version without logs. |
|
|
28
|
+
| addUnreleased | `false` | It leaves "Unreleased" title row if set to `true`. |
|
|
29
|
+
| keepUnreleased | `false` | It leaves "Unreleased" title row unchanged if set to `true`. |
|
|
30
|
+
| addVersionUrl | `false` | Links the version to the according changeset. Uses GitHub-compatible URLs by default, see other options to configure the URL format. |
|
|
31
|
+
| versionUrlFormats | See below. | Determines the version URL format when `addVersionUrl` is set to `true`. Uses GitHub-compatible URLs by default. |
|
|
32
|
+
| head | `'HEAD'` | The git revision the new version tag is compared to in the Unreleased URL. |
|
|
33
|
+
|
|
34
|
+
### versionUrlFormats
|
|
35
|
+
|
|
36
|
+
The URL formats used when `addVersionUrl` is set to `true`. Example configuration for a repository in Azure DevOps:
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
"plugins": {
|
|
40
|
+
"@release-it/keep-a-changelog": {
|
|
41
|
+
"filename": "CHANGELOG.md",
|
|
42
|
+
"head": "main",
|
|
43
|
+
"addVersionUrl": true,
|
|
44
|
+
"versionUrlFormats": {
|
|
45
|
+
"repositoryUrl": "https://dev.azure.com/...",
|
|
46
|
+
"unreleasedUrl": "{repositoryUrl}/branchCompare?baseVersion=GT{tagName}&targetVersion=GB{head}",
|
|
47
|
+
"versionUrl": "{repositoryUrl}/branchCompare?baseVersion=GT{previousTag}&targetVersion=GT{tagName}",
|
|
48
|
+
"firstVersionUrl": "{repositoryUrl}?version=GT{tagName}"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
| option | default value | description |
|
|
55
|
+
| --------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------- |
|
|
56
|
+
| repositoryUrl | `'https://{host}/{repository}'` | The format of the repository URL. |
|
|
57
|
+
| unreleasedUrl | `'{repositoryUrl}/compare/{tagName}...{head}'` | The format of the `[unreleased]` section URL. |
|
|
58
|
+
| versionUrl | `'{repositoryUrl}/compare/{previousTag}...{tagName}'` | The format of a release version URL. |
|
|
59
|
+
| firstVersionUrl | `'{repositoryUrl}/releases/tag/{tagName}'` | The format of the first release version URL, i.e. when no previous tags have been released. |
|
package/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { Plugin } from 'release-it';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { detectNewline } from 'detect-newline';
|
|
5
|
+
import format from 'string-template';
|
|
5
6
|
|
|
6
7
|
const pad = num => ('0' + num).slice(-2);
|
|
7
8
|
|
|
@@ -10,17 +11,34 @@ const getFormattedDate = () => {
|
|
|
10
11
|
return `${today.getFullYear()}-${pad(today.getMonth() + 1)}-${pad(today.getDate())}`;
|
|
11
12
|
};
|
|
12
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Default formats used for creating version URLs. Uses GitHub URL formats, e.g.
|
|
16
|
+
*
|
|
17
|
+
* https://github.com/release-it/release-it/compare/1.0.0...HEAD
|
|
18
|
+
* https://github.com/release-it/release-it/compare/0.0.0...1.0.0
|
|
19
|
+
* https://github.com/release-it/release-it/releases/tag/1.0.0
|
|
20
|
+
*/
|
|
21
|
+
const defaultVersionUrlFormats = {
|
|
22
|
+
repositoryUrl: 'https://{host}/{repository}',
|
|
23
|
+
unreleasedUrl: '{repositoryUrl}/compare/{tagName}...{head}',
|
|
24
|
+
versionUrl: '{repositoryUrl}/compare/{previousTag}...{tagName}',
|
|
25
|
+
firstVersionUrl: '{repositoryUrl}/releases/tag/{tagName}'
|
|
26
|
+
};
|
|
27
|
+
|
|
13
28
|
class KeepAChangelog extends Plugin {
|
|
14
29
|
async init() {
|
|
15
30
|
await super.init();
|
|
16
|
-
const { filename, strictLatest, addUnreleased, keepUnreleased, addVersionUrl, head } = this.options;
|
|
31
|
+
const { filename, strictLatest, addUnreleased, keepUnreleased, addVersionUrl, versionUrlFormats, head } = this.options;
|
|
17
32
|
|
|
18
33
|
this.filename = filename || 'CHANGELOG.md';
|
|
19
34
|
this.strictLatest = strictLatest === undefined ? true : Boolean(strictLatest);
|
|
20
35
|
this.addUnreleased = addUnreleased === undefined ? false : Boolean(addUnreleased);
|
|
21
36
|
this.keepUnreleased = keepUnreleased === undefined ? false : Boolean(keepUnreleased);
|
|
22
37
|
this.addVersionUrl = addVersionUrl === undefined ? false : Boolean(addVersionUrl);
|
|
23
|
-
this.
|
|
38
|
+
this.versionUrlFormats = versionUrlFormats
|
|
39
|
+
? { ...defaultVersionUrlFormats, ...versionUrlFormats }
|
|
40
|
+
: defaultVersionUrlFormats;
|
|
41
|
+
this.head = head || 'HEAD';
|
|
24
42
|
|
|
25
43
|
this.changelogPath = path.resolve(this.filename);
|
|
26
44
|
this.changelogContent = fs.readFileSync(this.changelogPath, 'utf-8');
|
|
@@ -35,15 +53,21 @@ class KeepAChangelog extends Plugin {
|
|
|
35
53
|
}
|
|
36
54
|
|
|
37
55
|
getChangelog(latestVersion) {
|
|
56
|
+
const { isIncrement } = this.config;
|
|
57
|
+
// Return the unchanged changelog content when no increment is made
|
|
58
|
+
if (!isIncrement) {
|
|
59
|
+
return this.changelogContent;
|
|
60
|
+
}
|
|
61
|
+
|
|
38
62
|
const { changelog } = this.getContext();
|
|
39
63
|
if (changelog) return changelog;
|
|
40
64
|
|
|
41
65
|
const { filename, strictLatest } = this;
|
|
42
66
|
|
|
43
67
|
const previousReleaseTitle = strictLatest ? `## [${latestVersion}]` : `## [`;
|
|
44
|
-
const
|
|
68
|
+
const hasPreviousReleaseSection = this.changelogContent.includes(previousReleaseTitle);
|
|
45
69
|
|
|
46
|
-
if (strictLatest && !
|
|
70
|
+
if (strictLatest && !hasPreviousReleaseSection) {
|
|
47
71
|
throw Error(`Missing section for previous release ("${latestVersion}") in ${filename}.`);
|
|
48
72
|
}
|
|
49
73
|
|
|
@@ -70,32 +94,40 @@ class KeepAChangelog extends Plugin {
|
|
|
70
94
|
const { version, latestVersion, tagName, latestTag, repo } = this.config.getContext();
|
|
71
95
|
let updatedChangelog = changelog;
|
|
72
96
|
|
|
73
|
-
const repositoryUrl =
|
|
97
|
+
const repositoryUrl = format(this.versionUrlFormats.repositoryUrl, repo);
|
|
98
|
+
const unreleasedLinkRegex = new RegExp(`\\[unreleased\\]\\:.*${this.head}`, 'i');
|
|
74
99
|
|
|
75
100
|
// Add or update the Unreleased link
|
|
76
|
-
const unreleasedUrl =
|
|
77
|
-
const unreleasedLink = `[
|
|
78
|
-
if (
|
|
79
|
-
updatedChangelog = updatedChangelog.replace(
|
|
101
|
+
const unreleasedUrl = format(this.versionUrlFormats.unreleasedUrl, { repositoryUrl, tagName, head: this.head });
|
|
102
|
+
const unreleasedLink = `[unreleased]: ${unreleasedUrl}`;
|
|
103
|
+
if (unreleasedLinkRegex.test(updatedChangelog)) {
|
|
104
|
+
updatedChangelog = updatedChangelog.replace(unreleasedLinkRegex, unreleasedLink);
|
|
80
105
|
} else {
|
|
81
|
-
updatedChangelog = `${updatedChangelog}${this.EOL}${
|
|
106
|
+
updatedChangelog = `${updatedChangelog}${this.EOL}${unreleasedLink}`;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Add a link for the first tagged version
|
|
110
|
+
if (!latestTag || latestTag === '0.0.0') {
|
|
111
|
+
const firstVersionUrl = format(this.versionUrlFormats.firstVersionUrl, { repositoryUrl, tagName });
|
|
112
|
+
const firstVersionLink = `[${version}]: ${firstVersionUrl}`;
|
|
113
|
+
return `${updatedChangelog}${this.EOL}${firstVersionLink}`;
|
|
82
114
|
}
|
|
83
115
|
|
|
84
116
|
// Add a link for the new version
|
|
85
117
|
const latestVersionLink = `[${latestVersion}]:`;
|
|
86
|
-
const
|
|
87
|
-
const
|
|
118
|
+
const versionUrl = format(this.versionUrlFormats.versionUrl, { repositoryUrl, previousTag: latestTag, tagName });
|
|
119
|
+
const versionLink = `[${version}]: ${versionUrl}`;
|
|
88
120
|
if (updatedChangelog.includes(latestVersionLink)) {
|
|
89
|
-
return updatedChangelog.replace(latestVersionLink, `${
|
|
121
|
+
return updatedChangelog.replace(latestVersionLink, `${versionLink}${this.EOL}${latestVersionLink}`);
|
|
90
122
|
} else {
|
|
91
|
-
return `${updatedChangelog}${this.EOL}${
|
|
123
|
+
return `${updatedChangelog}${this.EOL}${versionLink}`;
|
|
92
124
|
}
|
|
93
125
|
}
|
|
94
126
|
|
|
95
127
|
beforeRelease() {
|
|
96
128
|
const { addUnreleased, keepUnreleased, addVersionUrl } = this;
|
|
97
|
-
const { isDryRun } = this.config;
|
|
98
|
-
if (isDryRun || keepUnreleased) return;
|
|
129
|
+
const { isDryRun, isIncrement } = this.config;
|
|
130
|
+
if (isDryRun || keepUnreleased || !isIncrement) return;
|
|
99
131
|
const { version } = this.getContext();
|
|
100
132
|
const formattedDate = getFormattedDate();
|
|
101
133
|
const unreleasedTitle = addUnreleased ? this.unreleasedTitle + this.EOL + this.EOL : '';
|
|
@@ -110,4 +142,4 @@ class KeepAChangelog extends Plugin {
|
|
|
110
142
|
}
|
|
111
143
|
}
|
|
112
144
|
|
|
113
|
-
|
|
145
|
+
export default KeepAChangelog;
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@release-it/keep-a-changelog",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0-esm.0",
|
|
4
4
|
"description": "Keep-a-changelog plugin for release-it",
|
|
5
|
-
"
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": "./index.js",
|
|
6
7
|
"scripts": {
|
|
7
8
|
"test": "bron test.js",
|
|
8
9
|
"release": "release-it"
|
|
@@ -29,19 +30,20 @@
|
|
|
29
30
|
"url": "https://webpro.nl"
|
|
30
31
|
},
|
|
31
32
|
"dependencies": {
|
|
32
|
-
"detect-newline": "^
|
|
33
|
+
"detect-newline": "^4.0.0",
|
|
34
|
+
"string-template": "^1.0.0"
|
|
33
35
|
},
|
|
34
36
|
"devDependencies": {
|
|
35
|
-
"bron": "^
|
|
37
|
+
"bron": "^2.0.3",
|
|
36
38
|
"mock-fs": "^5.0.0",
|
|
37
|
-
"release-it": "^
|
|
38
|
-
"sinon": "^
|
|
39
|
+
"release-it": "^15.0.0-esm.4",
|
|
40
|
+
"sinon": "^13.0.2"
|
|
39
41
|
},
|
|
40
42
|
"peerDependencies": {
|
|
41
|
-
"release-it": "^
|
|
43
|
+
"release-it": "^15.0.0-esm.4"
|
|
42
44
|
},
|
|
43
45
|
"engines": {
|
|
44
|
-
"node": ">=
|
|
46
|
+
"node": ">=14"
|
|
45
47
|
},
|
|
46
48
|
"release-it": {
|
|
47
49
|
"github": {
|
package/test.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import test from 'bron';
|
|
3
|
+
import { strict as assert } from 'assert';
|
|
4
|
+
import mock from 'mock-fs';
|
|
5
|
+
import sinon from 'sinon';
|
|
6
|
+
import { factory, runTasks } from 'release-it/test/util';
|
|
7
|
+
import Plugin from './index.js';
|
|
8
8
|
|
|
9
9
|
const initialDryRunFileContents =
|
|
10
10
|
'\n\n## [Unreleased]\n\n* Item A\n* Item B\n\n## [1.0.0] - 2020-05-02\n\n* Item C\n* Item D';
|
|
@@ -22,12 +22,16 @@ mock({
|
|
|
22
22
|
'\r\n\r\n## [Unreleased]\r\n\r\n* Item A\r\n* Item B\r\n\r\n## [1.0.0] - 2020-05-02\r\n\r\n* Item C\r\n* Item D',
|
|
23
23
|
'./CHANGELOG-UNRELEASED.md': '## [Unreleased]\n\n* Item A\n* Item B\n\n## [1.0.0] - 2020-05-02\n\n* Item C\n* Item D',
|
|
24
24
|
'./CHANGELOG-VERSION_URL.md':
|
|
25
|
-
'## [Unreleased]\n\n* Item A\n* Item B\n\n## [1.0.0] - 2020-05-02\n\n* Item C\n* Item D\n\n[
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
'## [Unreleased]\n\n* Item A\n* Item B\n\n## [1.0.0] - 2020-05-02\n\n* Item C\n* Item D\n\n[unreleased]: https://github.com/release-it/release-it/compare/1.0.0..HEAD\n[1.0.0]: https://github.com/release-it/release-it/compare/0.0.0...1.0.0',
|
|
26
|
+
'./CHANGELOG-VERSION_URL_FORMATS.md':
|
|
27
|
+
'## [Unreleased]\n\n* Item A\n* Item B\n\n## [1.0.0] - 2020-05-02\n\n* Item C\n* Item D\n\n[unreleased]: https://github.com/_git/release-it/release-it/compareBranch/1.0.0/HEAD\n[1.0.0]: https://github.com/_git/release-it/release-it/compareBranch/0.0.0/1.0.0',
|
|
28
|
+
'./CHANGELOG-VERSION_URL_HEAD.md':
|
|
29
|
+
'## [Unreleased]\n\n* Item A\n* Item B\n\n## [1.0.0] - 2020-05-02\n\n* Item C\n* Item D\n\n[unreleased]: https://github.com/release-it/release-it/compare/1.0.0..main\n[1.0.0]: https://github.com/release-it/release-it/compare/0.0.0...1.0.0',
|
|
28
30
|
'./CHANGELOG-VERSION_URL_UNRELEASED.md':
|
|
31
|
+
'## [Unreleased]\n\n* Item A\n* Item B\n\n## [1.0.0] - 2020-05-02\n\n* Item C\n* Item D\n\n[unreleased]: https://github.com/user/project/compare/1.0.0..HEAD\n[1.0.0]: https://github.com/user/project/compare/0.0.0...1.0.0',
|
|
32
|
+
'./CHANGELOG-VERSION_URL_UNRELEASED_TITLE_CASE.md':
|
|
29
33
|
'## [Unreleased]\n\n* Item A\n* Item B\n\n## [1.0.0] - 2020-05-02\n\n* Item C\n* Item D\n\n[Unreleased]: https://github.com/user/project/compare/1.0.0..HEAD\n[1.0.0]: https://github.com/user/project/compare/0.0.0...1.0.0',
|
|
30
|
-
'./CHANGELOG-VERSION_URL_NEW.md': '## [Unreleased]\n\n* Item A\n* Item B'
|
|
34
|
+
'./CHANGELOG-VERSION_URL_NEW.md': '## [Unreleased]\n\n* Item A\n* Item B\n'
|
|
31
35
|
});
|
|
32
36
|
|
|
33
37
|
const readFile = file => fs.readFileSync(file).toString();
|
|
@@ -52,6 +56,13 @@ test('should throw for empty "unreleased" section', async t => {
|
|
|
52
56
|
await assert.rejects(runTasks(plugin), /There are no entries under "Unreleased" section in CHANGELOG-EMPTY\.md/);
|
|
53
57
|
});
|
|
54
58
|
|
|
59
|
+
test('should not throw for empty "unreleased" section when no-increment flag is set', async t => {
|
|
60
|
+
const options = { increment: false, [namespace]: { filename: 'CHANGELOG-EMPTY.md' } };
|
|
61
|
+
const plugin = factory(Plugin, { namespace, options });
|
|
62
|
+
await runTasks(plugin);
|
|
63
|
+
assert.equal(plugin.getChangelog(), readFile('./CHANGELOG-EMPTY.md'));
|
|
64
|
+
});
|
|
65
|
+
|
|
55
66
|
test('should throw for missing section for previous release', async t => {
|
|
56
67
|
const options = { [namespace]: { filename: 'CHANGELOG-MISSING.md' } };
|
|
57
68
|
const plugin = factory(Plugin, { namespace, options });
|
|
@@ -144,7 +155,35 @@ test('should add links to the end of the file', async t => {
|
|
|
144
155
|
assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
|
|
145
156
|
assert.match(
|
|
146
157
|
readFile('./CHANGELOG-VERSION_URL.md'),
|
|
147
|
-
/^## \[1\.0\.1] - [0-9]{4}-[0-9]{2}-[0-9]{2}\n\n\* Item A\n\* Item B\n\n## \[1\.0\.0] - 2020-05-02\n\n\* Item C\n*\* Item D\n\n\[
|
|
158
|
+
/^## \[1\.0\.1] - [0-9]{4}-[0-9]{2}-[0-9]{2}\n\n\* Item A\n\* Item B\n\n## \[1\.0\.0] - 2020-05-02\n\n\* Item C\n*\* Item D\n\n\[unreleased]: https:\/\/github\.com\/release-it\/release-it\/compare\/1\.0\.1\.\.\.HEAD\n\[1\.0\.1]: https:\/\/github\.com\/release-it\/release-it\/compare\/1\.0\.0\.\.\.1\.0\.1\n\[1\.0\.0]: https:\/\/github\.com\/release-it\/release-it\/compare\/0\.0\.0\.\.\.1\.0\.0\n$/
|
|
159
|
+
);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
test('should add links with custom URL formats to the end of the file', async t => {
|
|
163
|
+
const options = {
|
|
164
|
+
[namespace]: {
|
|
165
|
+
filename: 'CHANGELOG-VERSION_URL_FORMATS.md',
|
|
166
|
+
addVersionUrl: true,
|
|
167
|
+
versionUrlFormats: {
|
|
168
|
+
repositoryUrl: 'https://{host}/_git/{repository}',
|
|
169
|
+
unreleasedUrl: '{repositoryUrl}/compareBranch/{tagName}/{head}',
|
|
170
|
+
versionUrl: '{repositoryUrl}/compareBranch/{previousTag}/{tagName}'
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
const plugin = factory(Plugin, { namespace, options });
|
|
175
|
+
plugin.config.setContext({
|
|
176
|
+
latestTag: '1.0.0',
|
|
177
|
+
repo: {
|
|
178
|
+
host: 'github.com',
|
|
179
|
+
repository: 'release-it/release-it'
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
await runTasks(plugin);
|
|
183
|
+
assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
|
|
184
|
+
assert.match(
|
|
185
|
+
readFile('./CHANGELOG-VERSION_URL_FORMATS.md'),
|
|
186
|
+
/^## \[1\.0\.1] - [0-9]{4}-[0-9]{2}-[0-9]{2}\n\n\* Item A\n\* Item B\n\n## \[1\.0\.0] - 2020-05-02\n\n\* Item C\n*\* Item D\n\n\[unreleased]: https:\/\/github\.com\/_git\/release-it\/release-it\/compareBranch\/1\.0\.1\/HEAD\n\[1\.0\.1]: https:\/\/github\.com\/_git\/release-it\/release-it\/compareBranch\/1\.0\.0\/1\.0\.1\n\[1\.0\.0]: https:\/\/github\.com\/_git\/release-it\/release-it\/compareBranch\/0\.0\.0\/1\.0\.0\n$/
|
|
148
187
|
);
|
|
149
188
|
});
|
|
150
189
|
|
|
@@ -162,7 +201,7 @@ test('should add links with custom head to the end of the file', async t => {
|
|
|
162
201
|
assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
|
|
163
202
|
assert.match(
|
|
164
203
|
readFile('./CHANGELOG-VERSION_URL_HEAD.md'),
|
|
165
|
-
/^## \[1\.0\.1] - [0-9]{4}-[0-9]{2}-[0-9]{2}\n\n\* Item A\n\* Item B\n\n## \[1\.0\.0] - 2020-05-02\n\n\* Item C\n*\* Item D\n\n\[
|
|
204
|
+
/^## \[1\.0\.1] - [0-9]{4}-[0-9]{2}-[0-9]{2}\n\n\* Item A\n\* Item B\n\n## \[1\.0\.0] - 2020-05-02\n\n\* Item C\n*\* Item D\n\n\[unreleased]: https:\/\/github\.com\/release-it\/release-it\/compare\/1\.0\.1\.\.\.main\n\[1\.0\.1]: https:\/\/github\.com\/release-it\/release-it\/compare\/1\.0\.0\.\.\.1\.0\.1\n\[1\.0\.0]: https:\/\/github\.com\/release-it\/release-it\/compare\/0\.0\.0\.\.\.1\.0\.0\n$/
|
|
166
205
|
);
|
|
167
206
|
});
|
|
168
207
|
|
|
@@ -182,17 +221,38 @@ test('should add unreleased section and links to the end of the file', async t =
|
|
|
182
221
|
assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
|
|
183
222
|
assert.match(
|
|
184
223
|
readFile('./CHANGELOG-VERSION_URL_UNRELEASED.md'),
|
|
185
|
-
/^## \[Unreleased]\n\n## \[1\.0\.1] - [0-9]{4}-[0-9]{2}-[0-9]{2}\n\n\* Item A\n\* Item B\n\n## \[1\.0\.0] - 2020-05-02\n\n\* Item C\n*\* Item D\n\n\[
|
|
224
|
+
/^## \[Unreleased]\n\n## \[1\.0\.1] - [0-9]{4}-[0-9]{2}-[0-9]{2}\n\n\* Item A\n\* Item B\n\n## \[1\.0\.0] - 2020-05-02\n\n\* Item C\n*\* Item D\n\n\[unreleased]: https:\/\/github\.com\/user\/project\/compare\/1\.0\.1\.\.\.HEAD\n\[1\.0\.1]: https:\/\/github\.com\/user\/project\/compare\/1\.0\.0\.\.\.1\.0\.1\n\[1\.0\.0]: https:\/\/github\.com\/user\/project\/compare\/0\.0\.0\.\.\.1\.0\.0\n/
|
|
225
|
+
);
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
test('should match an existing unreleased link in title case', async t => {
|
|
229
|
+
const options = {
|
|
230
|
+
[namespace]: { filename: 'CHANGELOG-VERSION_URL_UNRELEASED_TITLE_CASE.md', addVersionUrl: true, addUnreleased: true }
|
|
231
|
+
};
|
|
232
|
+
const plugin = factory(Plugin, { namespace, options });
|
|
233
|
+
plugin.config.setContext({
|
|
234
|
+
latestTag: '1.0.0',
|
|
235
|
+
repo: {
|
|
236
|
+
host: 'github.com',
|
|
237
|
+
repository: 'user/project'
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
await runTasks(plugin);
|
|
241
|
+
assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
|
|
242
|
+
assert.match(
|
|
243
|
+
readFile('./CHANGELOG-VERSION_URL_UNRELEASED_TITLE_CASE.md'),
|
|
244
|
+
/^## \[Unreleased]\n\n## \[1\.0\.1] - [0-9]{4}-[0-9]{2}-[0-9]{2}\n\n\* Item A\n\* Item B\n\n## \[1\.0\.0] - 2020-05-02\n\n\* Item C\n*\* Item D\n\n\[unreleased]: https:\/\/github\.com\/user\/project\/compare\/1\.0\.1\.\.\.HEAD\n\[1\.0\.1]: https:\/\/github\.com\/user\/project\/compare\/1\.0\.0\.\.\.1\.0\.1\n\[1\.0\.0]: https:\/\/github\.com\/user\/project\/compare\/0\.0\.0\.\.\.1\.0\.0\n/
|
|
186
245
|
);
|
|
187
246
|
});
|
|
188
247
|
|
|
189
|
-
test('should add
|
|
248
|
+
test('should add links to the end of a new changelog', async t => {
|
|
190
249
|
const options = {
|
|
191
250
|
[namespace]: { filename: 'CHANGELOG-VERSION_URL_NEW.md', addVersionUrl: true, strictLatest: false }
|
|
192
251
|
};
|
|
193
252
|
const plugin = factory(Plugin, { namespace, options });
|
|
194
253
|
sinon.stub(plugin, 'getLatestVersion').returns('0.0.0');
|
|
195
254
|
plugin.config.setContext({
|
|
255
|
+
latestTag: undefined,
|
|
196
256
|
increment: 'major',
|
|
197
257
|
repo: {
|
|
198
258
|
host: 'github.com',
|
|
@@ -203,6 +263,6 @@ test('should add link to the end of a new changelog', async t => {
|
|
|
203
263
|
assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
|
|
204
264
|
assert.match(
|
|
205
265
|
readFile('./CHANGELOG-VERSION_URL_NEW.md'),
|
|
206
|
-
/^## \[1\.0\.0] - [0-9]{4}-[0-9]{2}-[0-9]{2}\n\n\* Item A\n\* Item B\n\n\[
|
|
266
|
+
/^## \[1\.0\.0] - [0-9]{4}-[0-9]{2}-[0-9]{2}\n\n\* Item A\n\* Item B\n\n\[unreleased]: https:\/\/github\.com\/user\/project\/compare\/1\.0\.0\.\.\.HEAD\n\[1\.0\.0]: https:\/\/github\.com\/user\/project\/releases\/tag\/1\.0\.0\n$/
|
|
207
267
|
);
|
|
208
268
|
});
|