Skip to content

Commit f50697b

Browse files
chore(release): add prompt for release to select release type (#10244)
* chore(release): add inquirer to prompt for release * chore(release): wip get release working again and test also adds nightly back in * chore(release): WIP remove commented code
1 parent 2ed0e12 commit f50697b

File tree

3 files changed

+99
-8
lines changed

3 files changed

+99
-8
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
"gulp-util": "3.0.7",
9494
"gulp-watch": "4.3.9",
9595
"html-entities": "1.2.0",
96+
"inquirer": "3.0.1",
9697
"ionic-cz-conventional-changelog": "1.0.0",
9798
"ionic-native": "^2.2.6",
9899
"jasmine-core": "2.5.2",

scripts/gulp/declarations.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ declare module 'gulp-server-livereload';
1414
declare module 'gulp-tslint';
1515
declare module 'gulp-typescript';
1616
declare module 'html-entities';
17+
declare module 'inquirer';
1718
declare module 'path';
1819
declare module 'rollup';
1920
declare module 'rollup-plugin-commonjs';

scripts/gulp/tasks/release.ts

Lines changed: 97 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { exec, spawnSync, spawn } from 'child_process';
22
import { writeFileSync } from 'fs';
33
import * as changelog from 'conventional-changelog';
44
import * as GithubApi from 'github';
5-
import { dest, src, task } from 'gulp';
5+
import { dest, src, start, task } from 'gulp';
6+
import { prompt } from 'inquirer';
67
import { rollup } from 'rollup';
78
import * as commonjs from 'rollup-plugin-commonjs';
89
import * as nodeResolve from 'rollup-plugin-node-resolve';
@@ -13,7 +14,9 @@ import { obj } from 'through2';
1314
import { DIST_BUILD_UMD_BUNDLE_ENTRYPOINT, DIST_BUILD_ROOT, DIST_BUNDLE_ROOT, PROJECT_ROOT, SCRIPTS_ROOT, SRC_ROOT } from '../constants';
1415
import { compileSass, copyFonts, createTimestamp, setSassIonicVersion, writePolyfills } from '../util';
1516

17+
var promptAnswers;
1618

19+
// Nightly: releases a nightly version
1720
task('nightly', (done: (err: any) => void) => {
1821
runSequence('release.pullLatest',
1922
'validate',
@@ -22,27 +25,51 @@ task('nightly', (done: (err: any) => void) => {
2225
done);
2326
});
2427

28+
// Release: prompt, update, publish
2529
task('release', (done: (err: any) => void) => {
2630
runSequence('release.pullLatest',
2731
'validate',
2832
'release.prepareReleasePackage',
29-
'release.copyProdVersion',
30-
'release.prepareChangelog',
31-
'release.publishNpmRelease',
32-
'release.publishGithubRelease',
33+
'release.promptVersion',
34+
'release.update',
35+
'release.publish',
3336
done);
3437
});
3538

39+
// Release.test: prompt and update
3640
task('release.test', (done: (err: any) => void) => {
3741
runSequence('validate',
3842
'release.prepareReleasePackage',
39-
'release.copyProdVersion',
43+
'release.promptVersion',
44+
'release.update',
4045
done);
4146
});
4247

48+
// Release.update: update package.json and changelog
49+
task('release.update', (done: (err: any) => void) => {
50+
if (promptAnswers.confirmRelease === 'yes') {
51+
runSequence('release.copyProdVersion',
52+
'release.prepareChangelog',
53+
done);
54+
} else {
55+
console.log('Did not run release.update tasks, aborted release');
56+
done(null);
57+
}
58+
});
4359

44-
task('release.publishGithubRelease', (done: Function) => {
60+
// Release.publish: publish to GitHub and npm
61+
task('release.publish', (done: (err: any) => void) => {
62+
if (promptAnswers.confirmRelease === 'yes') {
63+
runSequence('release.publishNpmRelease',
64+
'release.publishGithubRelease',
65+
done);
66+
} else {
67+
console.log('Did not run release.publish tasks, aborted release');
68+
done(null);
69+
}
70+
});
4571

72+
task('release.publishGithubRelease', (done: Function) => {
4673
const packageJSON = require('../../../package.json');
4774

4875
const github = new GithubApi({
@@ -85,11 +112,73 @@ task('release.publishNpmRelease', (done: Function) => {
85112
});
86113
});
87114

115+
task('release.promptVersion', (done: Function) => {
116+
prompt([
117+
{
118+
type: 'list',
119+
name: 'release',
120+
message: 'What type of release is this?',
121+
choices: [
122+
{
123+
name: 'Major: Incompatible API changes',
124+
value: 'major'
125+
}, {
126+
name: 'Minor: Backwards-compatible functionality',
127+
value: 'minor'
128+
}, {
129+
name: 'Patch: Backwards-compatible bug fixes',
130+
value: 'patch'
131+
}, {
132+
name: 'Premajor',
133+
value: 'premajor'
134+
}, {
135+
name: 'Preminor',
136+
value: 'preminor'
137+
}, {
138+
name: 'Prepatch',
139+
value: 'prepatch'
140+
}, {
141+
name: 'Prerelease',
142+
value: 'prerelease'
143+
}
144+
]
145+
}, {
146+
type: 'list',
147+
name: 'confirmRelease',
148+
default: 'no',
149+
choices: [
150+
{
151+
name: 'Yes',
152+
value: 'yes'
153+
}, {
154+
name: 'Abort release',
155+
value: 'no'
156+
}
157+
],
158+
message: function(answers) {
159+
var SEP = '---------------------------------';
160+
console.log('\n' + SEP + '\n' + getVersion(answers) + '\n' + SEP + '\n');
161+
return 'Are you sure you want to proceed with the release version above?';
162+
}
163+
}
164+
]).then(function (answers) {
165+
// Continue with the release if version was confirmed
166+
promptAnswers = answers;
167+
done();
168+
});
169+
});
170+
171+
function getVersion(answers) {
172+
const sourcePackageJSON = require(`${PROJECT_ROOT}/package.json`);
173+
174+
return semver.inc(sourcePackageJSON.version, answers.release, true);
175+
}
176+
88177
task('release.copyProdVersion', () => {
89178
// Increment the version and update the source package file
90179
const sourcePackageJSON = require(`${PROJECT_ROOT}/package.json`);
91180

92-
sourcePackageJSON.version = semver.inc(sourcePackageJSON.version, 'major', true);
181+
sourcePackageJSON.version = semver.inc(sourcePackageJSON.version, promptAnswers.release, true);
93182

94183
const sourcePrettyPrintedJson = JSON.stringify(sourcePackageJSON, null, 2);
95184
writeFileSync(`${PROJECT_ROOT}/package.json`, sourcePrettyPrintedJson);

0 commit comments

Comments
 (0)