2
2
3
3
const yargs = require ( 'yargs' ) ;
4
4
5
+ const auth = require ( '../../lib/auth' ) ;
5
6
const CLI = require ( '../../lib/cli' ) ;
6
7
const ReleasePreparation = require ( '../../lib/prepare_release' ) ;
8
+ const ReleasePromotion = require ( '../../lib/promote_release' ) ;
9
+ const TeamInfo = require ( '../../lib/team_info' ) ;
10
+ const Request = require ( '../../lib/request' ) ;
7
11
const { runPromise } = require ( '../../lib/run' ) ;
8
12
9
13
const PREPARE = 'prepare' ;
10
14
const PROMOTE = 'promote' ;
15
+ const RELEASERS = 'releasers' ;
11
16
12
17
const releaseOptions = {
13
18
prepare : {
@@ -30,7 +35,9 @@ function builder(yargs) {
30
35
describe : 'Version number of the release to be prepared or promoted'
31
36
} )
32
37
. example ( 'git node release --prepare 1.2.3' ,
33
- 'Prepare a new release of Node.js tagged v1.2.3' ) ;
38
+ 'Prepare a new release of Node.js tagged v1.2.3' )
39
+ . example ( 'git node release --promote 1.2.3' ,
40
+ 'Promote a prepared release of Node.js tagged v1.2.3' ) ;
34
41
}
35
42
36
43
function handler ( argv ) {
@@ -67,15 +74,17 @@ module.exports = {
67
74
} ;
68
75
69
76
async function main ( state , argv , cli , dir ) {
77
+ let release ;
78
+
70
79
if ( state === PREPARE ) {
71
- const prep = new ReleasePreparation ( argv , cli , dir ) ;
80
+ release = new ReleasePreparation ( argv , cli , dir ) ;
72
81
73
- if ( prep . warnForWrongBranch ( ) ) return ;
82
+ if ( release . warnForWrongBranch ( ) ) return ;
74
83
75
84
// If the new version was automatically calculated, confirm it.
76
85
if ( ! argv . newVersion ) {
77
86
const create = await cli . prompt (
78
- `Create release with new version ${ prep . newVersion } ?` ,
87
+ `Create release with new version ${ release . newVersion } ?` ,
79
88
{ defaultAnswer : true } ) ;
80
89
81
90
if ( ! create ) {
@@ -84,8 +93,23 @@ async function main(state, argv, cli, dir) {
84
93
}
85
94
}
86
95
87
- return prep . prepare ( ) ;
96
+ return release . prepare ( ) ;
88
97
} else if ( state === PROMOTE ) {
89
- // TODO(codebytere): implement release promotion.
98
+ release = new ReleasePromotion ( argv , cli , dir ) ;
99
+
100
+ cli . startSpinner ( 'Verifying Releaser status' ) ;
101
+ const credentials = await auth ( { github : true } ) ;
102
+ const request = new Request ( credentials ) ;
103
+ const info = new TeamInfo ( cli , request , 'nodejs' , RELEASERS ) ;
104
+
105
+ const releasers = await info . getMembers ( ) ;
106
+ if ( ! releasers . some ( r => r . login === release . username ) ) {
107
+ cli . stopSpinner (
108
+ `${ release . username } is not a Releaser; aborting release` ) ;
109
+ return ;
110
+ }
111
+ cli . stopSpinner ( 'Verified Releaser status' ) ;
112
+
113
+ return release . promote ( ) ;
90
114
}
91
115
}
0 commit comments