Evan You пре 12 година
родитељ
комит
0d3248dc45
4 измењених фајлова са 113 додато и 56 уклоњено
  1. 10 56
      Gruntfile.js
  2. 20 0
      tasks/casper.js
  3. 19 0
      tasks/jsc.js
  4. 64 0
      tasks/release.js

+ 10 - 56
Gruntfile.js

@@ -6,6 +6,8 @@ module.exports = function( grunt ) {
 
     grunt.initConfig({
 
+        pkg: grunt.file.readJSON('package.json'),
+
         componentbuild: {
             build: {
                 options: {
@@ -53,9 +55,11 @@ module.exports = function( grunt ) {
                     compress: true,
                     mangle: true,
                     banner:
-                        '// Vue.js - v' + require('./package.json').version + '\n' +
-                        '// (c) 2013 Evan You\n' +
-                        '// https://github.com/yyx990803/vue\n'
+                        '/*\n' +
+                        ' VueJS v<%= version %>\n' +
+                        ' (c) 2013 Evan You\n' +
+                        ' License: MIT\n' +
+                        '*/\n'
                 },
                 files: {
                     'dist/vue.min.js': 'dist/vue.js'
@@ -78,57 +82,8 @@ module.exports = function( grunt ) {
     grunt.loadNpmTasks( 'grunt-component-build' )
     grunt.loadNpmTasks( 'grunt-mocha' )
 
-    grunt.registerTask( 'version', function (version) {
-        if (!version || !semver.valid(version)) {
-            return grunt.fail.warn('Invalid semver version.')
-        }
-        var current = require('./package.json').version
-        if (semver.lt(version, current)) {
-            return grunt.fail.warn('Version is older than current.')
-        }
-        ;['package', 'bower', 'component'].forEach(function (file) {
-            file = './' + file + '.json'
-            var json = fs.readFileSync(file, 'utf-8')
-            json = json.replace(/"version"\s*:\s*"(.+?)"/, '"version": "' + version + '"')
-            fs.writeFileSync(file, json)
-        })
-    })
-
-    grunt.registerTask( 'release', function (version) {
-        grunt.task.run(['default', 'version:' + version])
-    })
-
-    grunt.registerTask( 'casper', function (id) {
-        var done = this.async(),
-            file = id ? id + '.js' : ''
-        grunt.util.spawn({
-            cmd: 'casperjs',
-            args: ['test', '--concise', 'specs/' + file],
-            opts: {
-                stdio: ['ignore', process.stdout, 'ignore'],
-                cwd: path.resolve('test/functional')
-            }
-        }, function (err, res) {
-            if (err) grunt.fail.fatal(res.stdout || 'CasperJS test failed')
-            grunt.log.writeln(res.stdout)
-            done()
-        })
-    })
-
-    grunt.registerTask( 'jsc', function () {
-        var done = this.async()
-        grunt.util.spawn({
-            cmd: './node_modules/jscoverage/bin/jscoverage',
-            args: ['./test/vue.test.js'],
-            opts: {
-                stdio: 'inherit'
-            }
-        }, function (err, res) {
-            if (err) grunt.fail.fatal(res.stdout || 'Jscoverage instrumentation failed')
-            grunt.log.writeln(res.stdout)
-            fs.unlinkSync('./test/vue.test.js')
-            done()
-        })
+    grunt.file.recurse('tasks', function (path) {
+        require('./' + path)(grunt)
     })
 
     grunt.registerTask( 'test', [
@@ -140,8 +95,7 @@ module.exports = function( grunt ) {
 
     grunt.registerTask( 'default', [
         'jshint',
-        'test',
-        'uglify'
+        'test'
     ])
     
 }

+ 20 - 0
tasks/casper.js

@@ -0,0 +1,20 @@
+var path = require('path')
+
+module.exports = function (grunt) {
+    grunt.registerTask( 'casper', function (id) {
+        var done = this.async(),
+            file = id ? id + '.js' : ''
+        grunt.util.spawn({
+            cmd: 'casperjs',
+            args: ['test', '--concise', 'specs/' + file],
+            opts: {
+                stdio: ['ignore', process.stdout, 'ignore'],
+                cwd: path.resolve('test/functional')
+            }
+        }, function (err, res) {
+            if (err) grunt.fail.fatal(res.stdout || 'CasperJS test failed')
+            grunt.log.writeln(res.stdout)
+            done()
+        })
+    })
+}

+ 19 - 0
tasks/jsc.js

@@ -0,0 +1,19 @@
+var fs = require('fs')
+
+module.exports = function (grunt) {
+    grunt.registerTask( 'jsc', function () {
+        var done = this.async()
+        grunt.util.spawn({
+            cmd: './node_modules/jscoverage/bin/jscoverage',
+            args: ['./test/vue.test.js'],
+            opts: {
+                stdio: 'inherit'
+            }
+        }, function (err, res) {
+            if (err) grunt.fail.fatal(res.stdout || 'Jscoverage instrumentation failed')
+            grunt.log.writeln(res.stdout)
+            fs.unlinkSync('./test/vue.test.js')
+            done()
+        })
+    })
+}

+ 64 - 0
tasks/release.js

@@ -0,0 +1,64 @@
+var semver = require('semver'),
+    readline = require('readline'),
+    exec = require('child_process').exec
+
+module.exports = function (grunt) {
+
+    grunt.registerTask('version', function (version) {
+        ;['package', 'bower', 'component'].forEach(function (file) {
+            file = './' + file + '.json'
+            var json = grunt.file.read(file)
+            json = json.replace(/"version"\s*:\s*"(.+?)"/, '"version": "' + version + '"')
+            grunt.file.write(file, json)
+        })
+    })
+
+    grunt.registerTask('git', function (version) {
+        exec(
+            'git add -A;' +
+            'git commit -m "Release v' + version + '";' + 
+            'git tag v' + version + ';' +
+            'git push;' + 
+            'git push origin v' + version,
+            this.async()
+        )
+    })
+
+    grunt.registerTask('release', function (version) {
+
+        var done = this.async(),
+            current = grunt.config('pkg.version'),
+            next = semver.inc(current, version || 'patch')
+
+        if (!next) {
+            if (!semver.valid(version)) {
+                return grunt.fail.warn('Invalid version.')
+            }
+            if (semver.lt(version, current)) {
+                return grunt.fail.warn('Version is older than current.')
+            }
+        }
+
+        readline.createInterface({
+            input: process.stdin,
+            output: process.stdout
+        }).question('Releasing version v' + next + '. Continue? (Y/n)', function (answer) {
+            if (!answer || answer.toLowerCase() === 'y') {
+                console.log(
+                    '\n\x1b[1m\x1b[34m' +
+                    'Releasing: v' + next +
+                    '\x1b[39m\x1b[22m'
+                )
+                grunt.config.set('version', next)
+                grunt.task.run([
+                    'jshint',
+                    'test',
+                    'version:' + next,
+                    'uglify',
+                    'git:' + next
+                ])
+            }
+            done()
+        })
+    })
+}