@ckeditor/ckeditor5-dev-release-tools 43.0.0 → 44.0.0-alpha.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/lib/index.js +23 -52
- package/lib/tasks/cleanuppackages.js +5 -7
- package/lib/tasks/commitandtag.js +7 -7
- package/lib/tasks/creategithubrelease.js +6 -6
- package/lib/tasks/generatechangelogformonorepository.js +44 -40
- package/lib/tasks/generatechangelogforsinglepackage.js +35 -31
- package/lib/tasks/preparerepository.js +11 -12
- package/lib/tasks/publishpackages.js +10 -12
- package/lib/tasks/push.js +4 -6
- package/lib/tasks/reassignnpmtags.js +11 -13
- package/lib/tasks/updatedependencies.js +5 -7
- package/lib/tasks/updateversions.js +8 -8
- package/lib/tasks/verifypackagespublishedcorrectly.js +6 -8
- package/lib/utils/abortcontroller.js +2 -11
- package/lib/utils/assertfilestopublish.js +5 -7
- package/lib/utils/assertnpmauthorization.js +3 -5
- package/lib/utils/assertnpmtag.js +5 -7
- package/lib/utils/assertpackages.js +4 -6
- package/lib/utils/checkversionavailability.js +4 -6
- package/lib/utils/configurereleaseoptions.js +43 -0
- package/lib/utils/confirmincludingpackage.js +24 -0
- package/lib/utils/confirmnpmtag.js +32 -0
- package/lib/utils/constants.js +26 -0
- package/lib/utils/displaycommits.js +9 -11
- package/lib/utils/displayskippedpackages.js +7 -9
- package/lib/utils/executeinparallel.js +13 -14
- package/lib/utils/generatechangelog.js +6 -8
- package/lib/utils/getchangedfilesforcommit.js +3 -5
- package/lib/utils/getchangelog.js +22 -0
- package/lib/utils/getchangesforversion.js +28 -0
- package/lib/utils/getcommits.js +12 -14
- package/lib/utils/getformatteddate.js +13 -0
- package/lib/utils/getnewversiontype.js +2 -4
- package/lib/utils/getnpmtagfromversion.js +3 -5
- package/lib/utils/getpackagejson.js +4 -6
- package/lib/utils/getpackagespaths.js +7 -9
- package/lib/utils/getwriteroptions.js +16 -7
- package/lib/utils/isversionpublishablefortag.js +5 -5
- package/lib/utils/{parallelworker.cjs → parallelworker.js} +3 -4
- package/lib/utils/parseroptions.js +1 -3
- package/lib/utils/providenewversionformonorepository.js +51 -0
- package/lib/utils/providetoken.js +26 -0
- package/lib/utils/provideversion.js +98 -0
- package/lib/utils/publishpackageonnpmcallback.js +10 -12
- package/lib/utils/savechangelog.js +18 -0
- package/lib/utils/transformcommitfactory.js +5 -7
- package/lib/utils/transformcommitutils.js +142 -147
- package/lib/utils/truncatechangelog.js +42 -0
- package/lib/utils/validaterepositorytorelease.js +3 -5
- package/lib/utils/versions.js +122 -128
- package/package.json +16 -15
- package/lib/utils/changelog.js +0 -109
- package/lib/utils/cli.js +0 -349
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ckeditor/ckeditor5-dev-release-tools",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "44.0.0-alpha.1",
|
|
4
4
|
"description": "Tools used for releasing CKEditor 5 and related packages.",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "CKSource (http://cksource.com/)",
|
|
@@ -16,28 +16,29 @@
|
|
|
16
16
|
"node": ">=18.0.0",
|
|
17
17
|
"npm": ">=5.7.1"
|
|
18
18
|
},
|
|
19
|
+
"type": "module",
|
|
19
20
|
"main": "lib/index.js",
|
|
20
21
|
"files": [
|
|
21
22
|
"lib"
|
|
22
23
|
],
|
|
23
24
|
"dependencies": {
|
|
24
|
-
"@ckeditor/ckeditor5-dev-utils": "^
|
|
25
|
-
"@octokit/rest": "^
|
|
26
|
-
"chalk": "^
|
|
25
|
+
"@ckeditor/ckeditor5-dev-utils": "^44.0.0-alpha.1",
|
|
26
|
+
"@octokit/rest": "^21.0.0",
|
|
27
|
+
"chalk": "^5.0.0",
|
|
27
28
|
"cli-columns": "^4.0.0",
|
|
28
29
|
"compare-func": "^2.0.0",
|
|
29
30
|
"concat-stream": "^2.0.0",
|
|
30
|
-
"conventional-changelog-writer": "^
|
|
31
|
-
"conventional-commits-filter": "^
|
|
32
|
-
"conventional-commits-parser": "^
|
|
33
|
-
"date-fns": "^
|
|
34
|
-
"fs-extra": "^11.
|
|
35
|
-
"git-raw-commits": "^
|
|
36
|
-
"glob": "^10.
|
|
37
|
-
"inquirer": "^
|
|
38
|
-
"lodash": "^4.17.
|
|
39
|
-
"minimatch": "^
|
|
40
|
-
"semver": "^7.
|
|
31
|
+
"conventional-changelog-writer": "^8.0.0",
|
|
32
|
+
"conventional-commits-filter": "^5.0.0",
|
|
33
|
+
"conventional-commits-parser": "^6.0.0",
|
|
34
|
+
"date-fns": "^4.0.0",
|
|
35
|
+
"fs-extra": "^11.0.0",
|
|
36
|
+
"git-raw-commits": "^5.0.0",
|
|
37
|
+
"glob": "^10.0.0",
|
|
38
|
+
"inquirer": "^11.0.0",
|
|
39
|
+
"lodash-es": "^4.17.21",
|
|
40
|
+
"minimatch": "^9.0.0",
|
|
41
|
+
"semver": "^7.6.3",
|
|
41
42
|
"shell-escape": "^0.2.0",
|
|
42
43
|
"upath": "^2.0.1"
|
|
43
44
|
}
|
package/lib/utils/changelog.js
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
-
* For licensing, see LICENSE.md.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
'use strict';
|
|
7
|
-
|
|
8
|
-
const fs = require( 'fs' );
|
|
9
|
-
const path = require( 'path' );
|
|
10
|
-
const { format } = require( 'date-fns' );
|
|
11
|
-
const { getRepositoryUrl } = require( './transformcommitutils' );
|
|
12
|
-
|
|
13
|
-
const utils = {
|
|
14
|
-
/**
|
|
15
|
-
* Changelog file name.
|
|
16
|
-
*/
|
|
17
|
-
changelogFile: 'CHANGELOG.md',
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Changelog header.
|
|
21
|
-
*/
|
|
22
|
-
changelogHeader: 'Changelog\n=========\n\n',
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Retrieves changes from the changelog for the given version (tag).
|
|
26
|
-
*
|
|
27
|
-
* @param {String} version
|
|
28
|
-
* @param {String} [cwd=process.cwd()] Where to look for the changelog file.
|
|
29
|
-
* @returns {String|null}
|
|
30
|
-
*/
|
|
31
|
-
getChangesForVersion( version, cwd = process.cwd() ) {
|
|
32
|
-
version = version.replace( /^v/, '' );
|
|
33
|
-
|
|
34
|
-
const changelog = utils.getChangelog( cwd ).replace( utils.changelogHeader, '\n' );
|
|
35
|
-
const match = changelog.match( new RegExp( `\\n(## \\[?${ version }\\]?[\\s\\S]+?)(?:\\n## \\[?|$)` ) );
|
|
36
|
-
|
|
37
|
-
if ( !match || !match[ 1 ] ) {
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return match[ 1 ].replace( /##[^\n]+\n/, '' ).trim();
|
|
42
|
-
},
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* @param {String} [cwd=process.cwd()] Where to look for the changelog file.
|
|
46
|
-
* @returns {String|null}
|
|
47
|
-
*/
|
|
48
|
-
getChangelog( cwd = process.cwd() ) {
|
|
49
|
-
const changelogFile = path.join( cwd, utils.changelogFile );
|
|
50
|
-
|
|
51
|
-
if ( !fs.existsSync( changelogFile ) ) {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return fs.readFileSync( changelogFile, 'utf-8' );
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* @param {String} content
|
|
60
|
-
* @param {String} [cwd=process.cwd()] Where to look for the changelog file.
|
|
61
|
-
*/
|
|
62
|
-
saveChangelog( content, cwd = process.cwd() ) {
|
|
63
|
-
const changelogFile = path.join( cwd, utils.changelogFile );
|
|
64
|
-
|
|
65
|
-
fs.writeFileSync( changelogFile, content, 'utf-8' );
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* @param {Number} length
|
|
70
|
-
* @param {String} [cwd=process.cwd()] Where to look for the changelog file.
|
|
71
|
-
*/
|
|
72
|
-
truncateChangelog( length, cwd = process.cwd() ) {
|
|
73
|
-
const changelog = utils.getChangelog( cwd );
|
|
74
|
-
|
|
75
|
-
if ( !changelog ) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const entryHeader = '## [\\s\\S]+?';
|
|
80
|
-
const entryHeaderRegexp = new RegExp( `\\n(${ entryHeader })(?=\\n${ entryHeader }|$)`, 'g' );
|
|
81
|
-
|
|
82
|
-
const entries = [ ...changelog.matchAll( entryHeaderRegexp ) ]
|
|
83
|
-
.filter( match => match && match[ 1 ] )
|
|
84
|
-
.map( match => match[ 1 ] );
|
|
85
|
-
|
|
86
|
-
if ( !entries.length ) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const truncatedEntries = entries.slice( 0, length );
|
|
91
|
-
|
|
92
|
-
const changelogFooter = entries.length > truncatedEntries.length ?
|
|
93
|
-
`\n\n---\n\nTo see all releases, visit the [release page](${ getRepositoryUrl( cwd ) }/releases).\n` :
|
|
94
|
-
'\n';
|
|
95
|
-
|
|
96
|
-
const truncatedChangelog = utils.changelogHeader + truncatedEntries.join( '\n' ).trim() + changelogFooter;
|
|
97
|
-
|
|
98
|
-
utils.saveChangelog( truncatedChangelog, cwd );
|
|
99
|
-
},
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* @returns {String}
|
|
103
|
-
*/
|
|
104
|
-
getFormattedDate() {
|
|
105
|
-
return format( new Date(), 'yyyy-MM-dd' );
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
module.exports = utils;
|
package/lib/utils/cli.js
DELETED
|
@@ -1,349 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
-
* For licensing, see LICENSE.md.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
'use strict';
|
|
7
|
-
|
|
8
|
-
const inquirer = require( 'inquirer' );
|
|
9
|
-
const semver = require( 'semver' );
|
|
10
|
-
const chalk = require( 'chalk' );
|
|
11
|
-
|
|
12
|
-
const QUESTION_MARK = chalk.cyan( '?' );
|
|
13
|
-
|
|
14
|
-
const cli = {
|
|
15
|
-
/**
|
|
16
|
-
* A size of default indent for a log.
|
|
17
|
-
*/
|
|
18
|
-
INDENT_SIZE: 3,
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* A size of indent for a second and next lines in a log. The number is equal to length of the log string:
|
|
22
|
-
* '* 1234567 ', where '1234567' is a short commit id.
|
|
23
|
-
* It does not include a value from `cli.INDENT_SIZE`.
|
|
24
|
-
*/
|
|
25
|
-
COMMIT_INDENT_SIZE: 10,
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Asks a user for a confirmation for updating and tagging versions of the packages.
|
|
29
|
-
*
|
|
30
|
-
* @param {Map} packages Packages to release.
|
|
31
|
-
* @returns {Promise.<Boolean>}
|
|
32
|
-
*/
|
|
33
|
-
confirmUpdatingVersions( packages ) {
|
|
34
|
-
let message = 'Packages and their old and new versions:\n';
|
|
35
|
-
|
|
36
|
-
for ( const packageName of Array.from( packages.keys() ).sort() ) {
|
|
37
|
-
const packageDetails = packages.get( packageName );
|
|
38
|
-
|
|
39
|
-
message += ` * "${ packageName }": v${ packageDetails.previousVersion } => v${ packageDetails.version }\n`;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
message += 'Continue?';
|
|
43
|
-
|
|
44
|
-
const confirmQuestion = {
|
|
45
|
-
message,
|
|
46
|
-
type: 'confirm',
|
|
47
|
-
name: 'confirm',
|
|
48
|
-
default: true
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
return inquirer.prompt( [ confirmQuestion ] )
|
|
52
|
-
.then( answers => answers.confirm );
|
|
53
|
-
},
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Asks a user for a confirmation for publishing changes.
|
|
57
|
-
*
|
|
58
|
-
* @param {Map} packages Packages to release.
|
|
59
|
-
* @returns {Promise.<Boolean>}
|
|
60
|
-
*/
|
|
61
|
-
confirmPublishing( packages ) {
|
|
62
|
-
let message = 'Services where the release will be created:\n';
|
|
63
|
-
|
|
64
|
-
for ( const packageName of Array.from( packages.keys() ).sort() ) {
|
|
65
|
-
const packageDetails = packages.get( packageName );
|
|
66
|
-
|
|
67
|
-
let packageMessage = ` * "${ packageName }" - version: ${ packageDetails.version }`;
|
|
68
|
-
|
|
69
|
-
const services = [];
|
|
70
|
-
|
|
71
|
-
if ( packageDetails.shouldReleaseOnNpm ) {
|
|
72
|
-
services.push( 'NPM' );
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if ( packageDetails.shouldReleaseOnGithub ) {
|
|
76
|
-
services.push( 'GitHub' );
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
let color;
|
|
80
|
-
|
|
81
|
-
if ( services.length ) {
|
|
82
|
-
color = chalk.magenta;
|
|
83
|
-
packageMessage += ` - services: ${ services.join( ', ' ) } `;
|
|
84
|
-
} else {
|
|
85
|
-
color = chalk.gray;
|
|
86
|
-
packageMessage += ' - nothing to release';
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
message += color( packageMessage ) + '\n';
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
message += 'Continue?';
|
|
93
|
-
|
|
94
|
-
const confirmQuestion = {
|
|
95
|
-
message,
|
|
96
|
-
type: 'confirm',
|
|
97
|
-
name: 'confirm',
|
|
98
|
-
default: true
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
return inquirer.prompt( [ confirmQuestion ] )
|
|
102
|
-
.then( answers => answers.confirm );
|
|
103
|
-
},
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Asks a user for a confirmation for removing archives created by `npm pack` command.
|
|
107
|
-
*
|
|
108
|
-
* @returns {Promise.<Boolean>}
|
|
109
|
-
*/
|
|
110
|
-
confirmRemovingFiles() {
|
|
111
|
-
const confirmQuestion = {
|
|
112
|
-
message: 'Remove created archives?',
|
|
113
|
-
type: 'confirm',
|
|
114
|
-
name: 'confirm',
|
|
115
|
-
default: true
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
return inquirer.prompt( [ confirmQuestion ] )
|
|
119
|
-
.then( answers => answers.confirm );
|
|
120
|
-
},
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Asks a user for a confirmation for including a package that does not contain all required files.
|
|
124
|
-
*
|
|
125
|
-
* @returns {Promise.<Boolean>}
|
|
126
|
-
*/
|
|
127
|
-
confirmIncludingPackage() {
|
|
128
|
-
const confirmQuestion = {
|
|
129
|
-
message: 'Package does not contain all required files to publish. Include this package in the release and continue?',
|
|
130
|
-
type: 'confirm',
|
|
131
|
-
name: 'confirm',
|
|
132
|
-
default: true
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
return inquirer.prompt( [ confirmQuestion ] )
|
|
136
|
-
.then( answers => answers.confirm );
|
|
137
|
-
},
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Asks a user for providing the new version.
|
|
141
|
-
*
|
|
142
|
-
* @param {String} packageVersion
|
|
143
|
-
* @param {String|null} releaseTypeOrNewVersion
|
|
144
|
-
* @param {Object} [options]
|
|
145
|
-
* @param {Boolean} [options.disableInternalVersion=false] Whether to "internal" version is enabled.
|
|
146
|
-
* @param {Boolean} [options.disableSkipVersion=false] Whether to "skip" version is enabled.
|
|
147
|
-
* @param {Number} [options.indentLevel=0] The indent level.
|
|
148
|
-
* @returns {Promise.<String>}
|
|
149
|
-
*/
|
|
150
|
-
provideVersion( packageVersion, releaseTypeOrNewVersion, options = {} ) {
|
|
151
|
-
const indentLevel = options.indentLevel || 0;
|
|
152
|
-
const suggestedVersion = getSuggestedVersion();
|
|
153
|
-
|
|
154
|
-
let message = 'Type the new version, "skip" or "internal"';
|
|
155
|
-
|
|
156
|
-
if ( options.disableInternalVersion ) {
|
|
157
|
-
message = 'Type the new version or "skip"';
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
message += ` (suggested: "${ suggestedVersion }", current: "${ packageVersion }"):`;
|
|
161
|
-
|
|
162
|
-
const versionQuestion = {
|
|
163
|
-
type: 'input',
|
|
164
|
-
name: 'version',
|
|
165
|
-
default: suggestedVersion,
|
|
166
|
-
message,
|
|
167
|
-
|
|
168
|
-
filter( input ) {
|
|
169
|
-
return input.trim();
|
|
170
|
-
},
|
|
171
|
-
|
|
172
|
-
validate( input ) {
|
|
173
|
-
if ( !options.disableSkipVersion && input === 'skip' ) {
|
|
174
|
-
return true;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
if ( !options.disableInternalVersion && input === 'internal' ) {
|
|
178
|
-
return true;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
// TODO: Check whether provided version is available.
|
|
182
|
-
return semver.valid( input ) ? true : 'Please provide a valid version.';
|
|
183
|
-
},
|
|
184
|
-
|
|
185
|
-
prefix: getPrefix( indentLevel )
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
return inquirer.prompt( [ versionQuestion ] )
|
|
189
|
-
.then( answers => answers.version );
|
|
190
|
-
|
|
191
|
-
function getSuggestedVersion() {
|
|
192
|
-
if ( !releaseTypeOrNewVersion || releaseTypeOrNewVersion === 'skip' ) {
|
|
193
|
-
return 'skip';
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
if ( semver.valid( releaseTypeOrNewVersion ) ) {
|
|
197
|
-
return releaseTypeOrNewVersion;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
if ( releaseTypeOrNewVersion === 'internal' ) {
|
|
201
|
-
return options.disableInternalVersion ? 'skip' : 'internal';
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
if ( semver.prerelease( packageVersion ) ) {
|
|
205
|
-
releaseTypeOrNewVersion = 'prerelease';
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
// If package's version is below the '1.0.0', bump the 'minor' instead of 'major'
|
|
209
|
-
if ( releaseTypeOrNewVersion === 'major' && semver.gt( '1.0.0', packageVersion ) ) {
|
|
210
|
-
return semver.inc( packageVersion, 'minor' );
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
return semver.inc( packageVersion, releaseTypeOrNewVersion );
|
|
214
|
-
}
|
|
215
|
-
},
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Asks a user for providing the new version for a major release.
|
|
219
|
-
*
|
|
220
|
-
* @param {String} version
|
|
221
|
-
* @param {String} foundPackage
|
|
222
|
-
* @param {String} bumpType
|
|
223
|
-
* @param {Object} [options={}]
|
|
224
|
-
* @param {Number} [options.indentLevel=0] The indent level.
|
|
225
|
-
* @returns {Promise.<String>}
|
|
226
|
-
*/
|
|
227
|
-
provideNewVersionForMonoRepository( version, foundPackage, bumpType, options = {} ) {
|
|
228
|
-
const indentLevel = options.indentLevel || 0;
|
|
229
|
-
const suggestedVersion = semver.inc( version, bumpType );
|
|
230
|
-
|
|
231
|
-
const message = 'Type the new version ' +
|
|
232
|
-
`(current highest: "${ version }" found in "${ chalk.underline( foundPackage ) }", suggested: "${ suggestedVersion }"):`;
|
|
233
|
-
|
|
234
|
-
const versionQuestion = {
|
|
235
|
-
type: 'input',
|
|
236
|
-
name: 'version',
|
|
237
|
-
default: suggestedVersion,
|
|
238
|
-
message,
|
|
239
|
-
|
|
240
|
-
filter( input ) {
|
|
241
|
-
return input.trim();
|
|
242
|
-
},
|
|
243
|
-
|
|
244
|
-
validate( input ) {
|
|
245
|
-
if ( !semver.valid( input ) ) {
|
|
246
|
-
return 'Please provide a valid version.';
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
return semver.gt( input, version ) ? true : `Provided version must be higher than "${ version }".`;
|
|
250
|
-
},
|
|
251
|
-
prefix: getPrefix( indentLevel )
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
return inquirer.prompt( [ versionQuestion ] )
|
|
255
|
-
.then( answers => answers.version );
|
|
256
|
-
},
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Asks a user for providing the GitHub token.
|
|
260
|
-
*
|
|
261
|
-
* @returns {Promise.<String>}
|
|
262
|
-
*/
|
|
263
|
-
provideToken() {
|
|
264
|
-
const tokenQuestion = {
|
|
265
|
-
type: 'password',
|
|
266
|
-
name: 'token',
|
|
267
|
-
message: 'Provide the GitHub token:',
|
|
268
|
-
validate( input ) {
|
|
269
|
-
return input.length === 40 ? true : 'Please provide a valid token.';
|
|
270
|
-
}
|
|
271
|
-
};
|
|
272
|
-
|
|
273
|
-
return inquirer.prompt( [ tokenQuestion ] )
|
|
274
|
-
.then( answers => answers.token );
|
|
275
|
-
},
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Asks a user for selecting services where packages will be released.
|
|
279
|
-
*
|
|
280
|
-
* If the user choices a GitHub, required token also has to be provided.
|
|
281
|
-
*
|
|
282
|
-
* @returns {Promise.<Object>}
|
|
283
|
-
*/
|
|
284
|
-
configureReleaseOptions() {
|
|
285
|
-
const options = {};
|
|
286
|
-
|
|
287
|
-
const servicesQuestion = {
|
|
288
|
-
type: 'checkbox',
|
|
289
|
-
name: 'services',
|
|
290
|
-
message: 'Select services where packages will be released:',
|
|
291
|
-
choices: [
|
|
292
|
-
'npm',
|
|
293
|
-
'GitHub'
|
|
294
|
-
],
|
|
295
|
-
default: [
|
|
296
|
-
'npm',
|
|
297
|
-
'GitHub'
|
|
298
|
-
]
|
|
299
|
-
};
|
|
300
|
-
|
|
301
|
-
return inquirer.prompt( [ servicesQuestion ] )
|
|
302
|
-
.then( answers => {
|
|
303
|
-
options.npm = answers.services.includes( 'npm' );
|
|
304
|
-
options.github = answers.services.includes( 'GitHub' );
|
|
305
|
-
|
|
306
|
-
if ( !options.github ) {
|
|
307
|
-
return options;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
return cli.provideToken()
|
|
311
|
-
.then( token => {
|
|
312
|
-
options.token = token;
|
|
313
|
-
|
|
314
|
-
return options;
|
|
315
|
-
} );
|
|
316
|
-
} );
|
|
317
|
-
},
|
|
318
|
-
|
|
319
|
-
/**
|
|
320
|
-
* Asks a user for a confirmation for updating and tagging versions of the packages.
|
|
321
|
-
*
|
|
322
|
-
* @param {String} versionTag A version tag based on a package version specified in `package.json`.
|
|
323
|
-
* @param {String} npmTag A tag typed by the user when using the release tools.
|
|
324
|
-
* @returns {Promise.<Boolean>}
|
|
325
|
-
*/
|
|
326
|
-
confirmNpmTag( versionTag, npmTag ) {
|
|
327
|
-
const areVersionsEqual = versionTag === npmTag;
|
|
328
|
-
const color = areVersionsEqual ? chalk.magenta : chalk.red;
|
|
329
|
-
|
|
330
|
-
// eslint-disable-next-line max-len
|
|
331
|
-
const message = `The next release bumps the "${ color( versionTag ) }" version. Should it be published to npm as "${ color( npmTag ) }"?`;
|
|
332
|
-
|
|
333
|
-
const confirmQuestion = {
|
|
334
|
-
message,
|
|
335
|
-
type: 'confirm',
|
|
336
|
-
name: 'confirm',
|
|
337
|
-
default: areVersionsEqual
|
|
338
|
-
};
|
|
339
|
-
|
|
340
|
-
return inquirer.prompt( [ confirmQuestion ] )
|
|
341
|
-
.then( answers => answers.confirm );
|
|
342
|
-
}
|
|
343
|
-
};
|
|
344
|
-
|
|
345
|
-
module.exports = cli;
|
|
346
|
-
|
|
347
|
-
function getPrefix( indent ) {
|
|
348
|
-
return ' '.repeat( indent * cli.INDENT_SIZE ) + QUESTION_MARK;
|
|
349
|
-
}
|