release-it 14.12.4 → 14.13.1

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/README.md CHANGED
@@ -323,7 +323,7 @@ While mostly used as a CLI tool, release-it can be used as a dependency to integ
323
323
  - [metalsmith/metalsmith](https://github.com/metalsmith/metalsmith)
324
324
  - [react-native-paper](https://github.com/callstack/react-native-paper)
325
325
  - [js-cookie/js-cookie](https://github.com/js-cookie/js-cookie)
326
- - [mirumee/saleor](https://github.com/mirumee/saleor)
326
+ - [saleor/saleor](https://github.com/saleor/saleor)
327
327
  - [mozilla/readability](https://github.com/mozilla/readability)
328
328
  - [redis/node-redis](https://github.com/redis/node-redis)
329
329
  - [shipshapecode/shepherd](https://github.com/shipshapecode/shepherd)
@@ -26,6 +26,7 @@
26
26
  "tag": null,
27
27
  "otp": null,
28
28
  "ignoreVersion": false,
29
+ "allowSameVersion": false,
29
30
  "skipChecks": false,
30
31
  "timeout": 10
31
32
  },
@@ -1,6 +1,7 @@
1
1
  const { EOL } = require('os');
2
2
  const _ = require('lodash');
3
3
  const execa = require('execa');
4
+ const matcher = require('wildcard-match');
4
5
  const { format, e } = require('../../util');
5
6
  const GitBase = require('../GitBase');
6
7
  const prompts = require('./prompts');
@@ -94,7 +95,7 @@ class Git extends GitBase {
94
95
  async isRequiredBranch() {
95
96
  const branch = await this.getBranchName();
96
97
  const requiredBranches = _.castArray(this.options.requireBranch);
97
- return requiredBranches.includes(branch);
98
+ return matcher(requiredBranches)(branch);
98
99
  }
99
100
 
100
101
  async hasUpstreamBranch() {
@@ -193,10 +193,10 @@ class GitHub extends Release {
193
193
  const { owner, project: repo } = this.getContext('repo');
194
194
  const { releaseName, draft = false, preRelease = false, autoGenerate = false } = this.options;
195
195
  const { tagName } = this.config.getContext();
196
- const { version, releaseNotes } = this.getContext();
196
+ const { version, releaseNotes, isUpdate } = this.getContext();
197
197
  const { isPreRelease } = parseVersion(version);
198
198
  const name = format(releaseName, this.config.getContext());
199
- const body = autoGenerate ? '' : releaseNotes || '';
199
+ const body = autoGenerate ? (isUpdate ? null : '') : releaseNotes;
200
200
 
201
201
  return Object.assign(options, {
202
202
  owner,
@@ -82,7 +82,8 @@ class npm extends Plugin {
82
82
 
83
83
  if (!this.config.isIncrement) return false;
84
84
 
85
- const task = () => this.exec(`npm version ${version} --no-git-tag-version`);
85
+ const allowSameVersion = this.options.allowSameVersion ? ' --allow-same-version' : '';
86
+ const task = () => this.exec(`npm version ${version} --no-git-tag-version${allowSameVersion}`);
86
87
  return this.spinner.show({ task, label: 'npm version' });
87
88
  }
88
89
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "release-it",
3
- "version": "14.12.4",
3
+ "version": "14.13.1",
4
4
  "description": "Generic CLI tool to automate versioning and package publishing related tasks.",
5
5
  "keywords": [
6
6
  "build",
@@ -81,6 +81,7 @@
81
81
  "update-notifier": "5.1.0",
82
82
  "url-join": "4.0.1",
83
83
  "uuid": "8.3.2",
84
+ "wildcard-match": "5.1.2",
84
85
  "yaml": "1.10.2",
85
86
  "yargs-parser": "20.2.9"
86
87
  },
package/test/git.init.js CHANGED
@@ -24,6 +24,19 @@ test.serial('should throw if on wrong branch', async t => {
24
24
  await t.throwsAsync(gitClient.init(), { message: /^Must be on branch dev/ });
25
25
  });
26
26
 
27
+ test.serial('should not throw if required branch matches', async t => {
28
+ const options = { git: { requireBranch: 'ma?*' } };
29
+ const gitClient = factory(Git, { options });
30
+ await t.notThrowsAsync(gitClient.init());
31
+ });
32
+
33
+ test.serial('should not throw if one of required branch matches', async t => {
34
+ const options = { git: { requireBranch: ['release/*', 'hotfix/*'] } };
35
+ const gitClient = factory(Git, { options });
36
+ sh.exec('git checkout -b release/v1');
37
+ await t.notThrowsAsync(gitClient.init());
38
+ });
39
+
27
40
  test.serial('should throw if there is no remote Git url', async t => {
28
41
  const gitClient = factory(Git, { options: { git } });
29
42
  sh.exec('git remote remove origin');
package/test/git.js CHANGED
@@ -228,7 +228,10 @@ test.serial('should push to remote name (not "origin")', async t => {
228
228
  gitAdd('line', 'file', 'Add file');
229
229
  await gitClient.push();
230
230
  t.deepEqual(spy.lastCall.args[0], ['git', 'push', '--set-upstream', 'upstream', 'foo']);
231
- t.regex(await spy.lastCall.returnValue, /Branch .?foo.? set up to track remote branch .?foo.? from .?upstream.?/);
231
+ t.regex(
232
+ await spy.lastCall.returnValue,
233
+ /branch .?foo.? set up to track (remote branch .?foo.? from .?upstream.?|.?upstream\/foo.?)/i
234
+ );
232
235
  }
233
236
  spy.restore();
234
237
  });
package/test/github.js CHANGED
@@ -89,7 +89,7 @@ test('should create a pre-release and draft release notes', async t => {
89
89
 
90
90
  interceptAuthentication();
91
91
  interceptCollaborator();
92
- interceptCreate({ body: { tag_name: '2.0.2', name: 'Release 2.0.2', body: '', prerelease: true, draft: true } });
92
+ interceptCreate({ body: { tag_name: '2.0.2', name: 'Release 2.0.2', prerelease: true, draft: true } });
93
93
 
94
94
  await runTasks(github);
95
95
 
@@ -99,7 +99,7 @@ test('should create a pre-release and draft release notes', async t => {
99
99
  exec.restore();
100
100
  });
101
101
 
102
- test('should create auto generated release notes', async t => {
102
+ test('should create auto-generated release notes', async t => {
103
103
  const options = {
104
104
  git,
105
105
  github: {
@@ -116,9 +116,7 @@ test('should create auto generated release notes', async t => {
116
116
 
117
117
  interceptAuthentication();
118
118
  interceptCollaborator();
119
- interceptCreate({
120
- body: { tag_name: '2.0.2', name: 'Release 2.0.2', draft: false, prerelease: false, generate_release_notes: true }
121
- });
119
+ interceptCreate({ body: { tag_name: '2.0.2', name: 'Release 2.0.2', generate_release_notes: true, body: '' } });
122
120
 
123
121
  await runTasks(github);
124
122
 
package/test/npm.js CHANGED
@@ -349,3 +349,12 @@ test('should not publish when `npm version` fails', async t => {
349
349
 
350
350
  exec.restore();
351
351
  });
352
+
353
+ test('should add allow-same-version argument', async t => {
354
+ const options = { npm: { skipChecks: true, allowSameVersion: true } };
355
+ const npmClient = factory(npm, { options });
356
+ const exec = sinon.stub(npmClient.shell, 'exec').resolves();
357
+ await runTasks(npmClient);
358
+ const version = exec.args.filter(arg => arg[0].startsWith('npm version'));
359
+ t.regex(version[0][0], / --allow-same-version/);
360
+ });
@@ -44,7 +44,7 @@ const interceptCreate = ({
44
44
  host = 'github.com',
45
45
  owner = 'user',
46
46
  project = 'repo',
47
- body: { tag_name, name = '', body = '', prerelease = false, draft = false, generate_release_notes = false }
47
+ body: { tag_name, name = '', generate_release_notes = false, body = null, prerelease = false, draft = false }
48
48
  } = {}) => {
49
49
  nock(api)
50
50
  .post(`/repos/${owner}/${project}/releases`, {
@@ -77,7 +77,7 @@ const interceptUpdate = ({
77
77
  api = 'https://api.github.com',
78
78
  owner = 'user',
79
79
  project = 'repo',
80
- body: { tag_name, name = '', body = '', prerelease = false, draft = false, generate_release_notes = false }
80
+ body: { tag_name, name = '', body = null, prerelease = false, draft = false, generate_release_notes = false }
81
81
  } = {}) => {
82
82
  nock(api)
83
83
  .patch(`/repos/${owner}/${project}/releases/1`, { tag_name, name, body, draft, prerelease, generate_release_notes })
@@ -47,10 +47,11 @@ module.exports.runTasks = async plugin => {
47
47
 
48
48
  const name = (await plugin.getName()) || '__test__';
49
49
  const latestVersion = (await plugin.getLatestVersion()) || '1.0.0';
50
+ const latestTag = plugin.config.getContext('latestTag');
50
51
  const changelog = (await plugin.getChangelog(latestVersion)) || null;
51
52
  const increment = getIncrement(plugin);
52
53
 
53
- plugin.config.setContext({ name, latestVersion, latestTag: latestVersion, changelog });
54
+ plugin.config.setContext({ name, latestVersion, latestTag, changelog });
54
55
 
55
56
  const { preRelease } = plugin.config.options;
56
57
  const isPreRelease = Boolean(preRelease);