Dependências:
- grunhido
- grunhido-cli
- grunhido
AppFog gem (gem install af)
Se você estiver escrevendo este Grunfile do zero (ou seja, não gerado do Yeoman, etc), lembre-se de seguir as instruções de cada módulo para carregar suas próprias tarefas, etc. *
The Config
grunt.initConfig({
shell: {
afDeploy: {
// Your command may vary in terms of what directory
// you run this in. For example,
// my build script builds everything into /dist
command: 'cd dist; af login --email <%= af.username %> --passwd <%= af.password %>; af update <%= af.appName %>;',
options: {
stdout: true // Outputs grunt-shell commands to the terminal
}
}
}
});
A tarefa
grunt.registerTask('afDeploy', function(appName, username, password) {
// You can go as elaborate as you want on
// the argument fallbacks,
// for the sake of this ProTip, I'm just using 'arguments'
if(arguments.length === 0) {
// Log an error
grunt.log.error("afDeploy: No arguments provided. Please provide the App Name, Username and Password.");
// Return false to short circuit the task.
return false;
}
// Set args as config items, 'af' here is arbitrary, it can be anything
// as long as you reference it by this name in your Grunt config.
// As this is how we're able to have <%= af.appName %> mean something
grunt.config.set('af.appName', appName);
grunt.config.set('af.username', username);
grunt.config.set('af.password', password);
var tasks = [
// Whatever your build tasks are, i.e compass:dist, etc.
'shell:afDeploy' // It depends on your build but most likely you'll want to do this as the very last step.
];
// Run tasks
grunt.task.run(tasks);
});
A concha
Para executar seu script de compilação:
grunt afDeploy:myAppName:myAfLoginName:myAfLoginPasswd
Conclusão
Esperançosamente, isso deu a você um pequeno vislumbre de como Grunt é incrível. Tarefas como essas podem ser estendidas e escritas de muitas maneiras, tornando o fluxo de trabalho de desenvolvimento muito mais eficiente.
Desafio
Pense em como você poderia incorporar uma implantação baseada em ambiente!