@release-it/keep-a-changelog 2.2.2 → 2.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
- "printWidth": 120,
3
2
  "singleQuote": true,
4
- "proseWrap": "always",
5
- "trailingComma": "none",
6
- "arrowParens": "avoid"
3
+ "endOfLine": "lf",
4
+ "printWidth": 125,
5
+ "arrowParens": "avoid",
6
+ "trailingComma": "none"
7
7
  }
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Keep-a-changelog plugin for release-it
2
2
 
3
- This [release-it plugin](https://github.com/release-it/release-it/blob/master/docs/plugins/README.md) maintains your
3
+ This [release-it plugin](https://github.com/release-it/release-it/blob/master/docs/plugins.md) maintains your
4
4
  CHANGELOG.md file according to the [Keep A Changelog](https://keepachangelog.com/) standards.
5
5
 
6
6
  The idea and initial implementation comes [from @eMarek](https://github.com/release-it/release-it/issues/662).
@@ -21,10 +21,39 @@ In [release-it](https://github.com/release-it/release-it) config:
21
21
 
22
22
  ## Options
23
23
 
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. |
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
@@ -2,6 +2,7 @@ const { Plugin } = require('release-it');
2
2
  const fs = require('fs');
3
3
  const path = require('path');
4
4
  const detectNewline = require('detect-newline');
5
+ var format = require('string-template');
5
6
 
6
7
  const pad = num => ('0' + num).slice(-2);
7
8
 
@@ -10,16 +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 } = 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);
38
+ this.versionUrlFormats = versionUrlFormats
39
+ ? { ...defaultVersionUrlFormats, ...versionUrlFormats }
40
+ : defaultVersionUrlFormats;
41
+ this.head = head || 'HEAD';
23
42
 
24
43
  this.changelogPath = path.resolve(this.filename);
25
44
  this.changelogContent = fs.readFileSync(this.changelogPath, 'utf-8');
@@ -34,15 +53,21 @@ class KeepAChangelog extends Plugin {
34
53
  }
35
54
 
36
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
+
37
62
  const { changelog } = this.getContext();
38
63
  if (changelog) return changelog;
39
64
 
40
65
  const { filename, strictLatest } = this;
41
66
 
42
67
  const previousReleaseTitle = strictLatest ? `## [${latestVersion}]` : `## [`;
43
- const hasPreviouReleaseSection = this.changelogContent.includes(previousReleaseTitle);
68
+ const hasPreviousReleaseSection = this.changelogContent.includes(previousReleaseTitle);
44
69
 
45
- if (strictLatest && !hasPreviouReleaseSection) {
70
+ if (strictLatest && !hasPreviousReleaseSection) {
46
71
  throw Error(`Missing section for previous release ("${latestVersion}") in ${filename}.`);
47
72
  }
48
73
 
@@ -69,32 +94,40 @@ class KeepAChangelog extends Plugin {
69
94
  const { version, latestVersion, tagName, latestTag, repo } = this.config.getContext();
70
95
  let updatedChangelog = changelog;
71
96
 
72
- const repositoryUrl = `https://${repo.host}/${repo.repository}`;
97
+ const repositoryUrl = format(this.versionUrlFormats.repositoryUrl, repo);
98
+ const unreleasedLinkRegex = new RegExp(`\\[unreleased\\]\\:.*${this.head}`, 'i');
73
99
 
74
100
  // Add or update the Unreleased link
75
- const unreleasedUrl = `${repositoryUrl}/compare/${tagName}...HEAD`;
76
- const unreleasedLink = `[Unreleased]: ${unreleasedUrl}`;
77
- if (updatedChangelog.includes('[Unreleased]:')) {
78
- updatedChangelog = updatedChangelog.replace(/\[Unreleased\]\:.*HEAD/, unreleasedLink);
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);
79
105
  } else {
80
- updatedChangelog = `${updatedChangelog}${this.EOL}${this.EOL}${unreleasedLink}`;
106
+ updatedChangelog = `${updatedChangelog}${this.EOL}${unreleasedLink}`;
107
+ }
108
+
109
+ // Add a link for the first tagged version
110
+ if (!latestTag) {
111
+ const firstVersionUrl = format(this.versionUrlFormats.firstVersionUrl, { repositoryUrl, tagName });
112
+ const firstVersionLink = `[${version}]: ${firstVersionUrl}`;
113
+ return `${updatedChangelog}${this.EOL}${firstVersionLink}`;
81
114
  }
82
115
 
83
116
  // Add a link for the new version
84
117
  const latestVersionLink = `[${latestVersion}]:`;
85
- const releaseUrl = `${repositoryUrl}/compare/${latestTag}...${tagName}`;
86
- const releaseLink = `[${version}]: ${releaseUrl}`;
118
+ const versionUrl = format(this.versionUrlFormats.versionUrl, { repositoryUrl, previousTag: latestTag, tagName });
119
+ const versionLink = `[${version}]: ${versionUrl}`;
87
120
  if (updatedChangelog.includes(latestVersionLink)) {
88
- return updatedChangelog.replace(latestVersionLink, `${releaseLink}${this.EOL}${latestVersionLink}`);
121
+ return updatedChangelog.replace(latestVersionLink, `${versionLink}${this.EOL}${latestVersionLink}`);
89
122
  } else {
90
- return `${updatedChangelog}${this.EOL}${releaseLink}`;
123
+ return `${updatedChangelog}${this.EOL}${versionLink}`;
91
124
  }
92
125
  }
93
126
 
94
127
  beforeRelease() {
95
128
  const { addUnreleased, keepUnreleased, addVersionUrl } = this;
96
- const { isDryRun } = this.config;
97
- if (isDryRun || keepUnreleased) return;
129
+ const { isDryRun, isIncrement } = this.config;
130
+ if (isDryRun || keepUnreleased || !isIncrement) return;
98
131
  const { version } = this.getContext();
99
132
  const formattedDate = getFormattedDate();
100
133
  const unreleasedTitle = addUnreleased ? this.unreleasedTitle + this.EOL + this.EOL : '';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@release-it/keep-a-changelog",
3
- "version": "2.2.2",
3
+ "version": "2.5.0",
4
4
  "description": "Keep-a-changelog plugin for release-it",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -29,16 +29,17 @@
29
29
  "url": "https://webpro.nl"
30
30
  },
31
31
  "dependencies": {
32
- "detect-newline": "^3.1.0"
32
+ "detect-newline": "^3.1.0",
33
+ "string-template": "^1.0.0"
33
34
  },
34
35
  "devDependencies": {
35
36
  "bron": "^1.1.1",
36
- "mock-fs": "^4.13.0",
37
- "release-it": "^14.2.0",
38
- "sinon": "^9.2.1"
37
+ "mock-fs": "^5.0.0",
38
+ "release-it": "^14.13.1",
39
+ "sinon": "^11.1.1"
39
40
  },
40
41
  "peerDependencies": {
41
- "release-it": "^14.2.0"
42
+ "release-it": "^14.13.1"
42
43
  },
43
44
  "engines": {
44
45
  "node": ">=10"
package/test.js CHANGED
@@ -22,10 +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[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',
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',
26
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':
27
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',
28
- './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'
29
35
  });
30
36
 
31
37
  const readFile = file => fs.readFileSync(file).toString();
@@ -50,6 +56,13 @@ test('should throw for empty "unreleased" section', async t => {
50
56
  await assert.rejects(runTasks(plugin), /There are no entries under "Unreleased" section in CHANGELOG-EMPTY\.md/);
51
57
  });
52
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
+
53
66
  test('should throw for missing section for previous release', async t => {
54
67
  const options = { [namespace]: { filename: 'CHANGELOG-MISSING.md' } };
55
68
  const plugin = factory(Plugin, { namespace, options });
@@ -142,7 +155,53 @@ test('should add links to the end of the file', async t => {
142
155
  assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
143
156
  assert.match(
144
157
  readFile('./CHANGELOG-VERSION_URL.md'),
145
- /^## \[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$/
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$/
187
+ );
188
+ });
189
+
190
+ test('should add links with custom head to the end of the file', async t => {
191
+ const options = { [namespace]: { filename: 'CHANGELOG-VERSION_URL_HEAD.md', addVersionUrl: true, head: 'main' } };
192
+ const plugin = factory(Plugin, { namespace, options });
193
+ plugin.config.setContext({
194
+ latestTag: '1.0.0',
195
+ repo: {
196
+ host: 'github.com',
197
+ repository: 'release-it/release-it'
198
+ }
199
+ });
200
+ await runTasks(plugin);
201
+ assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
202
+ assert.match(
203
+ readFile('./CHANGELOG-VERSION_URL_HEAD.md'),
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$/
146
205
  );
147
206
  });
148
207
 
@@ -162,17 +221,38 @@ test('should add unreleased section and links to the end of the file', async t =
162
221
  assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
163
222
  assert.match(
164
223
  readFile('./CHANGELOG-VERSION_URL_UNRELEASED.md'),
165
- /^## \[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/
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/
166
245
  );
167
246
  });
168
247
 
169
- test('should add link to the end of a new changelog', async t => {
248
+ test('should add links to the end of a new changelog', async t => {
170
249
  const options = {
171
250
  [namespace]: { filename: 'CHANGELOG-VERSION_URL_NEW.md', addVersionUrl: true, strictLatest: false }
172
251
  };
173
252
  const plugin = factory(Plugin, { namespace, options });
174
253
  sinon.stub(plugin, 'getLatestVersion').returns('0.0.0');
175
254
  plugin.config.setContext({
255
+ latestTag: undefined,
176
256
  increment: 'major',
177
257
  repo: {
178
258
  host: 'github.com',
@@ -183,6 +263,6 @@ test('should add link to the end of a new changelog', async t => {
183
263
  assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
184
264
  assert.match(
185
265
  readFile('./CHANGELOG-VERSION_URL_NEW.md'),
186
- /^## \[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\/compare\/0\.0\.0\.\.\.1\.0\.0\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$/
187
267
  );
188
268
  });