1
1
#!/usr/bin/env node
2
2
/*global cat:true cd:true echo:true exec:true exit:true*/
3
3
4
+ // Usage:
5
+ // stable release: node release.js
6
+ // pre-release: node release.js --pre-release {version}
7
+
4
8
"use strict" ;
5
9
6
- var baseDir , repoDir , prevVersion , newVersion , nextVersion , tagTime ,
10
+ var baseDir , repoDir , prevVersion , newVersion , nextVersion , tagTime , preRelease ,
7
11
fs = require ( "fs" ) ,
8
12
path = require ( "path" ) ,
9
13
// support: node <0.8
@@ -67,8 +71,12 @@ function cloneRepo() {
67
71
if ( exec ( "npm install" ) . code !== 0 ) {
68
72
abort ( "Error installing dependencies." ) ;
69
73
}
70
- if ( exec ( "npm install download.jqueryui.com" ) . code !== 0 ) {
71
- abort ( "Error installing dependencies." ) ;
74
+ // We need download.jqueryui.com in order to generate themes.
75
+ // We only generate themes for stable releases.
76
+ if ( ! preRelease ) {
77
+ if ( exec ( "npm install download.jqueryui.com" ) . code !== 0 ) {
78
+ abort ( "Error installing dependencies." ) ;
79
+ }
72
80
}
73
81
echo ( ) ;
74
82
}
@@ -104,32 +112,37 @@ function getVersions() {
104
112
abort ( "The version must be a pre version." ) ;
105
113
}
106
114
107
- newVersion = currentVersion . substr ( 0 , currentVersion . length - 3 ) ;
108
- parts = newVersion . split ( "." ) ;
109
- major = parseInt ( parts [ 0 ] , 10 ) ;
110
- minor = parseInt ( parts [ 1 ] , 10 ) ;
111
- patch = parseInt ( parts [ 2 ] , 10 ) ;
112
-
113
- // TODO: handle 2.0.0
114
- if ( minor === 0 ) {
115
- abort ( "This script is not smart enough to handle the 2.0.0 release." ) ;
116
- }
115
+ if ( preRelease ) {
116
+ newVersion = preRelease ;
117
+ // Note: prevVersion is not currently used for pre-releases. The TODO
118
+ // below about 1.10.0 applies here as well.
119
+ prevVersion = nextVersion = currentVersion ;
120
+ } else {
121
+ newVersion = currentVersion . substr ( 0 , currentVersion . length - 3 ) ;
122
+ parts = newVersion . split ( "." ) ;
123
+ major = parseInt ( parts [ 0 ] , 10 ) ;
124
+ minor = parseInt ( parts [ 1 ] , 10 ) ;
125
+ patch = parseInt ( parts [ 2 ] , 10 ) ;
126
+
127
+ // TODO: handle 1.10.0
128
+ // Also see comment above about pre-releases
129
+ if ( minor === 0 ) {
130
+ abort ( "This script is not smart enough to handle the 1.10.0 release." ) ;
131
+ }
117
132
118
- prevVersion = patch === 0 ?
119
- [ major , minor - 1 , 0 ] . join ( "." ) :
120
- [ major , minor , patch - 1 ] . join ( "." ) ;
121
- // TODO: Remove version hack after 1.9.0 release
122
- if ( prevVersion === "1.8.0" ) {
123
- prevVersion = "1.8" ;
133
+ prevVersion = patch === 0 ?
134
D7AE
+ [ major , minor - 1 , 0 ] . join ( "." ) :
135
+ [ major , minor , patch - 1 ] . join ( "." ) ;
136
+ nextVersion = [ major , minor , patch + 1 ] . join ( "." ) + "pre" ;
124
137
}
125
- nextVersion = [ major , minor , patch + 1 ] . join ( "." ) + "pre" ;
126
138
127
139
echo ( "We are going from " + prevVersion . cyan + " to " + newVersion . cyan + "." ) ;
128
140
echo ( "After the release, the version will be " + nextVersion . cyan + "." ) ;
129
141
}
130
142
131
143
function buildRelease ( ) {
132
- var pkg ;
144
+ var pkg ,
145
+ releaseTask = preRelease ? "release" : "release_cdn" ;
133
146
134
147
echo ( "Creating " + "release" . cyan + " branch..." ) ;
135
148
git ( "checkout -b release" , "Error creating release branch." ) ;
@@ -151,7 +164,7 @@ function buildRelease() {
151
164
echo ( ) ;
152
165
153
166
echo ( "Building release..." ) ;
154
- if ( exec ( "grunt release_cdn" ) . code !== 0 ) {
167
+ if ( exec ( "grunt " + releaseTask ) . code !== 0 ) {
155
168
abort ( "Error building release." ) ;
156
169
}
157
170
echo ( ) ;
@@ -173,6 +186,11 @@ function pushRelease() {
173
186
}
174
187
175
188
function updateBranchVersion ( ) {
189
+ // Pre-releases don't change the master version
190
+ if ( preRelease ) {
191
+ return ;
192
+ }
193
+
176
194
var pkg ;
177
195
178
196
echo ( "Checking out " + branch . cyan + " branch..." ) ;
@@ -189,11 +207,20 @@ function updateBranchVersion() {
189
207
}
190
208
191
209
function pushBranch ( ) {
210
+ // Pre-releases don't change the master version
211
+ if ( preRelease ) {
212
+ return ;
213
+ }
214
+
192
215
echo ( "Pushing " + branch . cyan + " to GitHub..." ) ;
193
216
git ( "push" , "Error pushing to GitHub." ) ;
194
217
}
195
218
196
219
function generateChangelog ( ) {
220
+ if ( preRelease ) {
221
+ return ;
222
+ }
223
+
197
224
var commits ,
198
225
changelogPath = baseDir + "/changelog" ,
199
226
changelog = cat ( "build/release/changelog-shell" ) + "\n" ,
@@ -232,6 +259,10 @@ function generateChangelog() {
232
259
}
233
260
234
261
function gatherContributors ( ) {
262
+ if ( preRelease ) {
263
+ return ;
264
+ }
265
+
235
266
var contributors ,
236
267
contributorsPath = baseDir + "/contributors" ;
237
268
@@ -262,7 +293,9 @@ function gatherContributors() {
262
293
263
294
function updateTrac ( ) {
264
295
echo ( newVersion . cyan + " was tagged at " + tagTime . cyan + "." ) ;
265
- echo ( "Close the " + newVersion . cyan + " Milestone." ) ;
296
+ if ( ! preRelease ) {
297
+ echo ( "Close the " + newVersion . cyan + " Milestone." ) ;
298
+ }
266
299
echo ( "Create the " + newVersion . cyan + " Version." ) ;
267
300
echo ( "When Trac asks for date and time, match the above. Should only change minutes and seconds." ) ;
268
301
echo ( "Create a Milestone for the next minor release." ) ;
@@ -329,6 +362,16 @@ function writePackage( pkg ) {
329
362
}
330
363
331
364
function bootstrap ( fn ) {
365
+ console . log ( "Determining release type..." ) ;
366
+ preRelease = process . argv . indexOf ( "--pre-release" ) ;
367
+ if ( preRelease !== - 1 ) {
368
+ preRelease = process . argv [ preRelease + 1 ] ;
369
+ console . log ( "pre-release" ) ;
370
+ } else {
371
+ preRelease = null ;
372
+ console . log ( "stable release" ) ;
373
+ }
374
+
332
375
console . log ( "Determining directories..." ) ;
333
376
baseDir = process . cwd ( ) + "/__release" ;
334
377
repoDir = baseDir + "/repo" ;
0 commit comments