Skip to content

Commit 1c40592

Browse files
committed
Add release task
- Updates Changelog - Copy build results to release folder - Updates the version numbers in the release folder Matches current behaviour in the and task
1 parent 463d77d commit 1c40592

File tree

2 files changed

+107
-4
lines changed

2 files changed

+107
-4
lines changed

Gruntfile.js

Lines changed: 103 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ module.exports = function(grunt) {
2626
],
2727
// Task configuration.
2828
clean: {
29-
build: ['build']
29+
build: ['build'],
30+
release: ['release']
31+
},
32+
changelog: {
33+
dest: 'CHANGELOG'
3034
},
3135
concat: {
3236
core: {
@@ -103,6 +107,30 @@ module.exports = function(grunt) {
103107
dest: 'build/<%= pkg.name %>-wsh.js'
104108
}
105109
},
110+
copy: {
111+
release: {
112+
files: {
113+
'build': 'release',
114+
'release/npm/package.json': 'package.json'
115+
}
116+
}
117+
},
118+
includereplace: {
119+
release: {
120+
options: {
121+
// Global variables available in all files
122+
globals: {
123+
VERSION: '<%= pkg.version %>'
124+
},
125+
prefix: '@',
126+
suffix: '@'
127+
},
128+
// Files to perform replacements and includes with
129+
src: 'build/**/*.*',
130+
// Destinaion directory to copy files to
131+
dest: 'release/'
132+
}
133+
},
106134
jshint: {
107135
options: {
108136
curly: true,
@@ -165,12 +193,16 @@ module.exports = function(grunt) {
165193
grunt.loadNpmTasks('grunt-contrib-jshint');
166194
grunt.loadNpmTasks('grunt-contrib-watch');
167195
grunt.loadNpmTasks('grunt-contrib-clean');
196+
grunt.loadNpmTasks('grunt-contrib-copy');
197+
grunt.loadNpmTasks('grunt-include-replace');
168198

169199
// Default task.
170200
grunt.registerTask('default', ['test']);
171201

172-
grunt.registerTask('test', ['clean', 'jshint', 'concat', 'yuitest']);
202+
grunt.registerTask('test', ['clean:build', 'jshint', 'concat', 'yuitest']);
173203

204+
grunt.registerTask('release', ['test', 'clean:release', 'copy:release', 'includereplace', 'changelog']);
205+
174206
//Run the YUITest suite
175207
grunt.registerMultiTask('yuitest', 'Run the YUITests for the project', function() {
176208
/*jshint evil:true, node: true */
@@ -226,4 +258,73 @@ module.exports = function(grunt) {
226258
TestRunner.subscribe(TestRunner.COMPLETE_EVENT, reportResults);
227259
TestRunner.run();
228260
});
261+
262+
grunt.registerMultiTask('changelog', 'Write the changlog file', function() {
263+
var done = this.async();
264+
var lastTag;
265+
var files = this.filesSrc;
266+
267+
268+
grunt.util.spawn({
269+
cmd: 'git',
270+
args: ['tag']
271+
}, function(error, result, code) {
272+
//Find the latest git tag
273+
var tags = result.stdout.split("\n"),
274+
semver = tags[0].replace('v','').split('.'),
275+
major = parseInt(semver[0], 10),
276+
minor = parseInt(semver[1], 10),
277+
patch = parseInt(semver[2], 10);
278+
279+
//A simple array sort can't be used because of the comparison of
280+
//the strings '0.9.9' > '0.9.10'
281+
for (var i = 1, len = tags.length; i < len; i++) {
282+
semver = tags[i].replace('v','').split('.');
283+
284+
var currentMajor = parseInt(semver[0], 10);
285+
if (currentMajor < major) {
286+
continue;
287+
} else if (currentMajor > major) {
288+
major = currentMajor;
289+
}
290+
291+
var currentMinor = parseInt(semver[1], 10);
292+
if (currentMinor < minor) {
293+
continue;
294+
} else if (currentMinor > minor) {
295+
minor = currentMinor;
296+
}
297+
298+
var currentPatch = parseInt(semver[2], 10);
299+
if (currentPatch < patch) {
300+
continue;
301+
} else if (currentPatch > patch) {
302+
patch = currentPatch;
303+
}
304+
}
305+
306+
lastTag = 'v' + major + '.' + minor + '.' + patch;
307+
308+
grunt.verbose.write('Last tag: ' + lastTag).writeln();
309+
310+
//
311+
grunt.util.spawn({
312+
cmd: 'git',
313+
args: ['log', '--pretty=format:"* %s (%an)"', lastTag + '..HEAD']
314+
}, function(error, result, code) {
315+
var prettyPrint = result.stdout.split('\"\n\"').join('\n').replace(/\"$/, '').replace(/^\"/, '');
316+
317+
grunt.verbose.writeln().write(prettyPrint).writeln();
318+
319+
var template = '<%= grunt.template.today("mmmm d, yyyy") %> - v<%= pkg.version %>\n\n' +
320+
prettyPrint + '\n\n' +
321+
grunt.file.read(files[0]);
322+
323+
grunt.file.write(files[0], grunt.template.process(template));
324+
325+
done();
326+
});
327+
});
328+
329+
});
229330
};

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "csslint",
3-
"version": "v0.9.11-dev",
3+
"version": "0.9.10",
44
"description": "CSSLint",
55
"author": {
66
"name": "Nicholas C. Zakas"
@@ -42,6 +42,8 @@
4242
"grunt-contrib-concat": "~0.1.3",
4343
"grunt-contrib-watch": "~0.3.1",
4444
"yuitest": "~0.7.8",
45-
"grunt-contrib-clean": "~0.4.0"
45+
"grunt-contrib-clean": "~0.4.0",
46+
"grunt-contrib-copy": "~0.4.1",
47+
"grunt-include-replace": "~0.1.1"
4648
}
4749
}

0 commit comments

Comments
 (0)