@@ -2,7 +2,8 @@ import { exec, spawnSync, spawn } from 'child_process';
22import { writeFileSync } from 'fs' ;
33import * as changelog from 'conventional-changelog' ;
44import * as GithubApi from 'github' ;
5- import { dest , src , task } from 'gulp' ;
5+ import { dest , src , start , task } from 'gulp' ;
6+ import { prompt } from 'inquirer' ;
67import { rollup } from 'rollup' ;
78import * as commonjs from 'rollup-plugin-commonjs' ;
89import * as nodeResolve from 'rollup-plugin-node-resolve' ;
@@ -13,7 +14,9 @@ import { obj } from 'through2';
1314import { DIST_BUILD_UMD_BUNDLE_ENTRYPOINT , DIST_BUILD_ROOT , DIST_BUNDLE_ROOT , PROJECT_ROOT , SCRIPTS_ROOT , SRC_ROOT } from '../constants' ;
1415import { compileSass , copyFonts , createTimestamp , setSassIonicVersion , writePolyfills } from '../util' ;
1516
17+ var promptAnswers ;
1618
19+ // Nightly: releases a nightly version
1720task ( '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
2529task ( '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
3640task ( '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+
88177task ( '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