[517] | 1 | var _ = require('underscore') |
---|
| 2 | , path = require('path'); |
---|
| 3 | |
---|
| 4 | module.exports = function(grunt) { |
---|
| 5 | |
---|
| 6 | grunt.registerTask( |
---|
| 7 | 'heroku-config', |
---|
| 8 | "Get config values from heroku app and put them in grunt.config.", |
---|
| 9 | function(){ |
---|
| 10 | var done = this.async(); |
---|
| 11 | var options = this.options({ |
---|
| 12 | keys: [], |
---|
| 13 | output: 'herokuConfig' |
---|
| 14 | }); |
---|
| 15 | if ( !options.app ) { |
---|
| 16 | done(new Error(("Must specify the app name."))); |
---|
| 17 | } else { |
---|
| 18 | if ( options.keys.length === 0 ) { |
---|
| 19 | grunt.log.warn("Did not specify any config keys."); |
---|
| 20 | } |
---|
| 21 | var tasks = _.map(options.keys, function(key){ |
---|
| 22 | return _.partial(getConfigValue,options.app,key); |
---|
| 23 | }); |
---|
| 24 | grunt.util.async.series(tasks,function(error,results){ |
---|
| 25 | if ( error ) { |
---|
| 26 | done(error); |
---|
| 27 | } else { |
---|
| 28 | var herokuConfig = {}; |
---|
| 29 | _.each(results,function(result){ |
---|
| 30 | _.extend(herokuConfig,result); |
---|
| 31 | }); |
---|
| 32 | grunt.config.set(options.output,herokuConfig); |
---|
| 33 | done(); |
---|
| 34 | } |
---|
| 35 | }); |
---|
| 36 | } |
---|
| 37 | }); |
---|
| 38 | |
---|
| 39 | function getConfigValue(app,key,callback) { |
---|
| 40 | grunt.util.spawn({ |
---|
| 41 | cmd: 'heroku', |
---|
| 42 | args: ['config:get',key,'--app',app] |
---|
| 43 | }, function(error,result){ |
---|
| 44 | if ( error ) { |
---|
| 45 | callback(error); |
---|
| 46 | } else { |
---|
| 47 | var value = grunt.util.normalizelf(result.stdout) |
---|
| 48 | .split(grunt.util.linefeed)[0]; |
---|
| 49 | result = {}; |
---|
| 50 | result[key] = value; |
---|
| 51 | callback(null,result); |
---|
| 52 | } |
---|
| 53 | }); |
---|
| 54 | } |
---|
| 55 | |
---|
| 56 | grunt.registerMultiTask( |
---|
| 57 | 'foreman', |
---|
| 58 | "Run a foreman command in a directory.", |
---|
| 59 | function(){ |
---|
| 60 | var options = this.options({ |
---|
| 61 | cmd: 'start', |
---|
| 62 | cwd: '.' |
---|
| 63 | }); |
---|
| 64 | var done = this.async(); |
---|
| 65 | grunt.util.spawn({ |
---|
| 66 | cmd: 'foreman', |
---|
| 67 | args: [options.cmd], |
---|
| 68 | opts: { |
---|
| 69 | cwd: options.cwd, |
---|
| 70 | stdio: 'inherit' |
---|
| 71 | } |
---|
| 72 | }, done); |
---|
| 73 | }); |
---|
| 74 | |
---|
| 75 | }; |
---|