Changeset 517


Ignore:
Timestamp:
03/14/14 16:11:32 (11 years ago)
Author:
hendrikvanantwerpen
Message:

Deployment and database management now done through Grunt. Look mom, no shell\!

Location:
Dev/trunk
Files:
351 added
4 deleted
3 edited

Legend:

Unmodified
Added
Removed
  • Dev/trunk/Gruntfile.js

    r516 r517  
    88    // TASKS
    99
     10    // default task
    1011    grunt.registerTask('default', ['compile']);
    11     grunt.registerTask('compile', ['svn-ignore:compile'
     12    // development
     13    grunt.registerTask('compile', ['path-check:svn'
     14                                  ,'svn-ignore:compile'
    1215                                  ,'jshint:lint-sources'
    1316                                  ,'htmlhint:lint'
     
    2225                                //,'amd-check' // too smart about plugins, r.js can't find them
    2326                                  ]);
     27    grunt.registerTask('run', ['path-check:foreman'
     28                              ,'compile'
     29                              ,'foreman:dev']);
    2430    grunt.registerTask('build', ['compile'
    2531                                ,'clean:build'
     
    2733                                ,'dojo:build'
    2834                                ]);
    29     grunt.registerTask('deploy', ['path-check:deploy',
    30                                   'svninfo',
    31                                   'build',
    32                                   'git_deploy:deploy']);
     35    grunt.registerTask('run-build', ['path-check:foreman'
     36                                    ,'build'
     37                                    ,'foreman:build']);
     38    grunt.registerTask('deploy', ['path-check:svn'
     39                                 ,'path-check:git'
     40                                 ,'svninfo'
     41                                 ,'build'
     42                                 ,'git_deploy:deploy']);
     43    // database management
     44    grunt.registerTask('db-backup-cloud-to-dated-local',
     45                       ['path-check:heroku'
     46                       ,'heroku-config'
     47                       ,'http:db-backup-cloud-to-dated-local']);
     48    grunt.registerTask('db-pull-cloud-to-local',
     49                       ['path-check:heroku'
     50                       ,'heroku-config'
     51                       ,'http:db-pull-cloud-to-local']);
     52    grunt.registerTask('db-push-local-to-cloud',
     53                       ['path-check:heroku'
     54                       ,'heroku-config'
     55                       ,'http:db-push-local-to-cloud']);
    3356
    3457    // FILES AND FOLDERS
     
    4669
    4770    // TASK CONFIG
    48    
     71
    4972    grunt.initConfig({
     73        localDbURL: "http://localhost:5984",
     74        timestamp: "<%= grunt.template.today(\"UTC:yyyymmdd't'HHMMss'z'\") %>",
     75
    5076        'amd-check': {
    5177            files: [ srcDir+'client/qed-client/**/*.js' ]
     
    7399                                releaseDir: '../../'+buildDir }}
    74100        },
     101        foreman: {
     102            dev: {
     103                options: {
     104                    cwd: srcDir
     105                }
     106            },
     107            build: {
     108                options: {
     109                    cwd: buildDir
     110                }
     111            }
     112        },
    75113        git_deploy: {
    76114            deploy: {
     
    83121            }
    84122        },
     123        'heroku-config': {
     124            options: {
     125                app: 'quod-erat',
     126                keys: ['CLOUDANT_URL']
     127            }
     128        },
    85129        htmlhint: {
    86130            options: { htmlhintrc: srcDir+".htmlhintrc" },
     
    89133                              src: ['client/*.html', 'client/qed-client/**/*.html'] }]}
    90134        },
     135        http: {
     136            'db-backup-cloud-to-dated-local': {
     137                options: {
     138                    url: "<%= localDbURL %>/_replicate",
     139                    method: 'POST',
     140                    body: {
     141                        source: "<%= herokuConfig.CLOUDANT_URL %>/qed",
     142                        target: "qed-<%= timestamp %>",
     143                        create_target: true
     144                    },
     145                    json: true
     146                }
     147            },
     148            'db-pull-cloud-to-local': {
     149                options: {
     150                    url: "<%= localDbURL %>/_replicate",
     151                    method: 'POST',
     152                    body: {
     153                        source: "<%= herokuConfig.CLOUDANT_URL %>/qed",
     154                        target: "qed"
     155                    },
     156                    json: true
     157                }
     158            },
     159            'db-push-local-to-cloud': {
     160                options: {
     161                    url: "<%= localDbURL %>/_replicate",
     162                    method: 'POST',
     163                    body: {
     164                        source: "qed",
     165                        target: "<%= herokuConfig.CLOUDANT_URL %>/qed"
     166                    },
     167                    json: true
     168                }
     169            }
     170        },
    91171        jshint: {
    92172            'lint-sources': { options: { jshintrc: srcDir+".jshintrc" },
     
    104184        },
    105185        'path-check': {
    106             'deploy': {
    107                 src: [ 'git', 'svn' ]
     186            'heroku': {
     187                src: ['heroku']
     188            },
     189            'foreman': {
     190                src: ['foreman']
     191            },
     192            'svn': {
     193                src: ['svn']
     194            },
     195            'git': {
     196                src: ['git']
    108197            }
    109198        },
     
    164253    grunt.loadNpmTasks('grunt-git-deploy');
    165254    grunt.loadNpmTasks('grunt-htmlhint');
     255    grunt.loadNpmTasks('grunt-http');
    166256    grunt.loadNpmTasks('grunt-jsonlint');
    167257    grunt.loadNpmTasks('grunt-path-check');
  • Dev/trunk/grunt-tasks/svn-ignore.js

    r474 r517  
    66module.exports = function(grunt) {
    77
    8     grunt.registerMultiTask('svn-ignore',
    9                             "Makes sure the specified source files are ignored in Subversion.",
    10                             function(){
    11         var done = this.async();
     8    grunt.registerMultiTask(
     9        'svn-ignore',
     10        "Makes sure the specified source files are ignored in Subversion.",
     11        function(){
     12            var done = this.async();
    1213
    13         var tasks = _.chain(this.filesSrc)
    14                      .groupBy(path.dirname)
    15                      .map(function(files, dir) {
    16                          return _.partial(updateSvnIgnore,
    17                                           dir,
    18                                           _.chain(files)
    19                                            .map(path.basename)
    20                                            .sortBy(_.identity)
    21                                            .value());
    22                      })
    23                      .value();
     14            var tasks = _.chain(this.filesSrc)
     15                         .groupBy(path.dirname)
     16                         .map(function(files, dir) {
     17                             return _.partial(updateSvnIgnore,
     18                                              dir,
     19                                              _.chain(files)
     20                                               .map(path.basename)
     21                                               .sortBy(_.identity)
     22                                               .value());
     23                         })
     24                         .value();
    2425
    25         grunt.util.async.series(tasks,function(error, results){
    26             done(error);
     26            grunt.util.async.series(tasks,function(error, results){
     27                done(error);
     28            });
    2729        });
    28     });
    2930
    30     grunt.registerMultiTask('svn-ignore-clean',
    31                             "Clean generated ignore sections in Subversion.",
    32                             function(){
    33         var done = this.async();
     31    grunt.registerMultiTask(
     32        'svn-ignore-clean',
     33        "Clean generated ignore sections in Subversion.",
     34        function(){
     35            var done = this.async();
    3436
    35         var tasks = _.chain(this.filesSrc)
    36                      .map(function(file) {
    37                          return _.partial(clearSvnIgnore, file);
    38                      })
    39                      .value();
     37            var tasks = _.chain(this.filesSrc)
     38                         .map(function(file) {
     39                             return _.partial(clearSvnIgnore, file);
     40                         })
     41                         .value();
    4042
    41         grunt.util.async.series(tasks,function(error, results){
    42             done(error);
     43            grunt.util.async.series(tasks,function(error, results){
     44                done(error);
     45            });
    4346        });
    44     });
    4547
    4648    function updateSvnIgnore(dir,files,callback) {
     
    123125   
    124126    function readSvnIgnore(dir,callback) {
    125         return svnCommand('svn',
    126                           ['propget', 'svn:ignore', dir],
    127                           callback);
     127        return svn(['propget', 'svn:ignore', dir],
     128                   callback);
    128129    }
    129130
    130131    function writeSvnIgnore(dir,ignore,callback) {
    131         return svnCommand('svn',
    132                           ['propset', 'svn:ignore', ignore, dir],
    133                           callback);
     132        return svn(['propset', 'svn:ignore', ignore, dir],
     133                   callback);
    134134    }
    135135   
    136136    function deleteSvnIgnore(dir,callback) {
    137         return svnCommand('svn',
    138                           ['propdel', 'svn:ignore', dir],
    139                           callback);
     137        return svn(['propdel', 'svn:ignore', dir],
     138                   callback);
    140139    }
    141140   
    142     function svnCommand(cmd,args,callback) {
     141    function svn(args,callback) {
    143142        grunt.util.spawn({
    144             cmd: cmd,
     143            cmd: 'svn',
    145144            args: (args || [])
    146         }, function(error, result, code) {
     145        }, function(error, result) {
    147146            if ( error ) {
    148147                callback(error);
    149                 return;
     148            } else {
     149                callback(null,result.stdout);
    150150            }
    151             callback(null,result.stdout);
    152151        });
    153152    }
  • Dev/trunk/package.json

    r516 r517  
    2323    "grunt-path-check": "~0.9.3",
    2424    "grunt-git-deploy": "~0.1.1",
    25     "grunt-svninfo": "~0.1.4"
     25    "grunt-svninfo": "~0.1.4",
     26    "grunt-http": "^1.1.0"
    2627  },
    2728  "dependencies": {}
Note: See TracChangeset for help on using the changeset viewer.