@release-it/keep-a-changelog 2.2.1 → 2.2.2

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.
Files changed (3) hide show
  1. package/index.js +4 -4
  2. package/package.json +1 -1
  3. package/test.js +27 -28
package/index.js CHANGED
@@ -87,7 +87,7 @@ class KeepAChangelog extends Plugin {
87
87
  if (updatedChangelog.includes(latestVersionLink)) {
88
88
  return updatedChangelog.replace(latestVersionLink, `${releaseLink}${this.EOL}${latestVersionLink}`);
89
89
  } else {
90
- return `${updatedChangelog}${this.EOL}${releaseLink}${this.EOL}`;
90
+ return `${updatedChangelog}${this.EOL}${releaseLink}`;
91
91
  }
92
92
  }
93
93
 
@@ -97,15 +97,15 @@ class KeepAChangelog extends Plugin {
97
97
  if (isDryRun || keepUnreleased) return;
98
98
  const { version } = this.getContext();
99
99
  const formattedDate = getFormattedDate();
100
- const unreleasedTitle = addUnreleased ? this.unreleasedTitle : '';
101
- const releaseTitle = `${unreleasedTitle}${this.EOL}${this.EOL}## [${version}] - ${formattedDate}`;
100
+ const unreleasedTitle = addUnreleased ? this.unreleasedTitle + this.EOL + this.EOL : '';
101
+ const releaseTitle = `${unreleasedTitle}## [${version}] - ${formattedDate}`;
102
102
  let changelog = this.changelogContent.replace(this.unreleasedTitle, releaseTitle);
103
103
 
104
104
  if (addVersionUrl) {
105
105
  changelog = this.addVersionUrls(changelog);
106
106
  }
107
107
 
108
- fs.writeFileSync(this.changelogPath, changelog + this.EOL);
108
+ fs.writeFileSync(this.changelogPath, changelog.trim() + this.EOL);
109
109
  }
110
110
  }
111
111
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@release-it/keep-a-changelog",
3
- "version": "2.2.1",
3
+ "version": "2.2.2",
4
4
  "description": "Keep-a-changelog plugin for release-it",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/test.js CHANGED
@@ -10,23 +10,25 @@ 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';
11
11
 
12
12
  mock({
13
- './CHANGELOG-FOO.md': '\n\n## [FOO]\n\n* Item A\n* Item B',
14
- './CHANGELOG-UNRELEASED.md': '\n\n## [Unreleased]\n\n* Item A\n* Item B',
15
- './CHANGELOG-EMPTY.md': '\n\n## [Unreleased]\n\n\n\n## [1.0.0]\n\n* Item A\n* Item B',
16
- './CHANGELOG-FULL.md': '\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',
13
+ './CHANGELOG-FOO.md': '## [FOO]\n\n* Item A\n* Item B',
14
+ './CHANGELOG-MISSING.md': '## [Unreleased]\n\n* Item A\n* Item B',
15
+ './CHANGELOG-EMPTY.md': '## [Unreleased]\n\n\n\n## [1.0.0]\n\n* Item A\n* Item B',
16
+ './CHANGELOG-FULL.md':
17
+ '# Changelog\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',
18
+ './CHANGELOG-NO-STRICT.md': '## [Unreleased]\n\n* Item A\n* Item B\n\n## [1.0.0] - 2020-05-02\n\n* Item C\n* Item D',
17
19
  './CHANGELOG-DRYRUN.md': initialDryRunFileContents,
18
- './CHANGELOG-LESS_NEW_LINES.md':
19
- '\n\n## [Unreleased]\n* Item A\n* Item B\n## [1.0.0] - 2020-05-02\n* Item C\n* Item D',
20
+ './CHANGELOG-LESS_NEW_LINES.md': '## [Unreleased]\n* Item A\n* Item B\n## [1.0.0] - 2020-05-02\n* Item C\n* Item D',
20
21
  './CHANGELOG-EOL.md':
21
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
+ './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',
22
24
  './CHANGELOG-VERSION_URL.md':
23
- '\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\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',
24
26
  './CHANGELOG-VERSION_URL_UNRELEASED.md':
25
- '\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\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',
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/user/project/compare/1.0.0..HEAD\n[1.0.0]: https://github.com/user/project/compare/0.0.0...1.0.0',
26
28
  './CHANGELOG-VERSION_URL_NEW.md': '## [Unreleased]\n\n* Item A\n* Item B'
27
29
  });
28
30
 
29
- const readFile = file => fs.readFileSync(file).toString().trim();
31
+ const readFile = file => fs.readFileSync(file).toString();
30
32
 
31
33
  const namespace = 'keep-a-changelog';
32
34
 
@@ -49,12 +51,9 @@ test('should throw for empty "unreleased" section', async t => {
49
51
  });
50
52
 
51
53
  test('should throw for missing section for previous release', async t => {
52
- const options = { [namespace]: { filename: 'CHANGELOG-UNRELEASED.md' } };
54
+ const options = { [namespace]: { filename: 'CHANGELOG-MISSING.md' } };
53
55
  const plugin = factory(Plugin, { namespace, options });
54
- await assert.rejects(
55
- runTasks(plugin),
56
- /Missing section for previous release \("1\.0\.0"\) in CHANGELOG-UNRELEASED\.md/
57
- );
56
+ await assert.rejects(runTasks(plugin), /Missing section for previous release \("1\.0\.0"\) in CHANGELOG-MISSING\.md/);
58
57
  });
59
58
 
60
59
  test('should find very first changelog with disabled strict latest option', async t => {
@@ -71,17 +70,17 @@ test('should write changelog', async t => {
71
70
  assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
72
71
  assert.match(
73
72
  readFile('./CHANGELOG-FULL.md'),
74
- /## \[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/
73
+ /^# Changelog\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$/
75
74
  );
76
75
  });
77
76
 
78
- test('should write changelog even with `strictLatest: true`', async t => {
79
- const options = { [namespace]: { filename: 'CHANGELOG-FULL.md', strictLatest: false } };
77
+ test('should write changelog even with `strictLatest: false`', async t => {
78
+ const options = { [namespace]: { filename: 'CHANGELOG-NO-STRICT.md', strictLatest: false } };
80
79
  const plugin = factory(Plugin, { namespace, options });
81
80
  await runTasks(plugin);
82
81
  assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
83
82
  assert.match(
84
- readFile('./CHANGELOG-FULL.md'),
83
+ readFile('./CHANGELOG-NO-STRICT.md'),
85
84
  /## \[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/
86
85
  );
87
86
  });
@@ -90,14 +89,14 @@ test('should not write changelog in dry run', async t => {
90
89
  const options = { 'dry-run': true, [namespace]: { filename: 'CHANGELOG-DRYRUN.md' } };
91
90
  const plugin = factory(Plugin, { namespace, options });
92
91
  await runTasks(plugin);
93
- assert.equal(fs.readFileSync('./CHANGELOG-DRYRUN.md').toString(), initialDryRunFileContents);
92
+ assert.equal(readFile('./CHANGELOG-DRYRUN.md'), initialDryRunFileContents);
94
93
  });
95
94
 
96
95
  test('should not write changelog with keep unreleased option', async t => {
97
96
  const options = { [namespace]: { filename: 'CHANGELOG-DRYRUN.md', keepUnreleased: true } };
98
97
  const plugin = factory(Plugin, { namespace, options });
99
98
  await runTasks(plugin);
100
- assert.equal(fs.readFileSync('./CHANGELOG-DRYRUN.md').toString(), initialDryRunFileContents);
99
+ assert.equal(readFile('./CHANGELOG-DRYRUN.md'), initialDryRunFileContents);
101
100
  });
102
101
 
103
102
  test('should find changelog even if less new lines is used', async t => {
@@ -107,29 +106,29 @@ test('should find changelog even if less new lines is used', async t => {
107
106
  assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
108
107
  });
109
108
 
110
- test('should write changelog (with different EOL)', async t => {
109
+ test('should write changelog with different EOL', async t => {
111
110
  const options = { [namespace]: { filename: 'CHANGELOG-EOL.md' } };
112
111
  const plugin = factory(Plugin, { namespace, options });
113
112
  await runTasks(plugin);
114
113
  assert.equal(plugin.getChangelog(), '* Item A\r\n* Item B');
115
114
  assert.match(
116
115
  readFile('./CHANGELOG-EOL.md'),
117
- /^## \[1\.0\.1] - [0-9]{4}-[0-9]{2}-[0-9]{2}\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/
116
+ /^## \[1\.0\.1] - [0-9]{4}-[0-9]{2}-[0-9]{2}\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\r\n/
118
117
  );
119
118
  });
120
119
 
121
120
  test('should write changelog and add unreleased section', async t => {
122
- const options = { [namespace]: { filename: 'CHANGELOG-FULL.md', addUnreleased: true } };
121
+ const options = { [namespace]: { filename: 'CHANGELOG-UNRELEASED.md', addUnreleased: true } };
123
122
  const plugin = factory(Plugin, { namespace, options });
124
123
  await runTasks(plugin);
125
124
  assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
126
125
  assert.match(
127
- readFile('./CHANGELOG-FULL.md'),
126
+ readFile('./CHANGELOG-UNRELEASED.md'),
128
127
  /^## \[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/
129
128
  );
130
129
  });
131
130
 
132
- test('should add unreleased section and links to the end of the file', async t => {
131
+ test('should add links to the end of the file', async t => {
133
132
  const options = { [namespace]: { filename: 'CHANGELOG-VERSION_URL.md', addVersionUrl: true } };
134
133
  const plugin = factory(Plugin, { namespace, options });
135
134
  plugin.config.setContext({
@@ -143,7 +142,7 @@ test('should add unreleased section and links to the end of the file', async t =
143
142
  assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
144
143
  assert.match(
145
144
  readFile('./CHANGELOG-VERSION_URL.md'),
146
- /^## \[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/
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$/
147
146
  );
148
147
  });
149
148
 
@@ -163,7 +162,7 @@ test('should add unreleased section and links to the end of the file', async t =
163
162
  assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
164
163
  assert.match(
165
164
  readFile('./CHANGELOG-VERSION_URL_UNRELEASED.md'),
166
- /^## \[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/
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/
167
166
  );
168
167
  });
169
168
 
@@ -184,6 +183,6 @@ test('should add link to the end of a new changelog', async t => {
184
183
  assert.equal(plugin.getChangelog(), '* Item A\n* Item B');
185
184
  assert.match(
186
185
  readFile('./CHANGELOG-VERSION_URL_NEW.md'),
187
- /^## \[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/
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$/
188
187
  );
189
188
  });