@samitouri / QOS-React-2 / commits / 0401a0a67c

NEW sauce-tunnel grunt task

Thomas Aylott committed Nov 7, 2013 at 14:57 UTC 0401a0a67ca526c3efd73af9093ad93d30210f86
3 files changed +41 -1
Gruntfile.js
+3
@@ -6,6 +6,7 @@ var browserifyTask = require('./grunt/tasks/browserify');
6 var populistTask = require('./grunt/tasks/populist');
7 var webdriverPhantomJSTask = require('./grunt/tasks/webdriver-phantomjs');
8 var webdriverJasmineTasks = require('./grunt/tasks/webdriver-jasmine');
9 +var sauceTunnelTask = require('./grunt/tasks/sauce-tunnel');
10 var npmTask = require('./grunt/tasks/npm');
11 var releaseTasks = require('./grunt/tasks/release');
12
@@ -46,6 +47,8 @@ module.exports = function(grunt) {
47
48 grunt.registerMultiTask('populist', populistTask);
49
50 + grunt.registerTask('sauce-tunnel', sauceTunnelTask);
51 +
52 grunt.registerMultiTask('webdriver-jasmine', webdriverJasmineTasks);
53
54 grunt.registerMultiTask('npm', npmTask);
grunt/tasks/sauce-tunnel.js new
+36
@@ -0,0 +1,36 @@
1 +var grunt = require('grunt');
2 +var SauceTunnel = require('sauce-tunnel');
3 +
4 +module.exports = function(){
5 + var task = this;
6 + var config = task.data;
7 + var shouldStayAliveForever = task.flags.keepalive;
8 +
9 + var SAUCE_ACCESS_KEY = process.env.SAUCE_ACCESS_KEY;
10 + if (!SAUCE_ACCESS_KEY) grunt.fatal('Requires the environment variable SAUCE_ACCESS_KEY to be set');
11 +
12 + var SAUCE_USERNAME = process.env.SAUCE_USERNAME;
13 + if (!SAUCE_USERNAME) grunt.fatal('Requires the environment variable SAUCE_USERNAME to be set');
14 +
15 + var taskCompletedSuccessfully = task.async();
16 +
17 + var stunnel = new SauceTunnel(SAUCE_USERNAME, SAUCE_ACCESS_KEY, /*identifier*/null, /*tunneled*/true, /*tunnelTimeout*/10e3);
18 + process.on('exit', stunnel.stop.bind(stunnel, function(){}));
19 +
20 + stunnel.on('log:error', grunt.log.error.bind(grunt.log));
21 + stunnel.on('log:writeln', grunt.log.writeln.bind(grunt.log));
22 +
23 + stunnel.on('verbose:ok', grunt.verbose.ok.bind(grunt.verbose));
24 + stunnel.on('verbose:error', grunt.verbose.error.bind(grunt.verbose));
25 + stunnel.on('verbose:debug', grunt.verbose.debug.bind(grunt.verbose));
26 + stunnel.on('verbose:writeln', grunt.verbose.writeln.bind(grunt.verbose));
27 +
28 + stunnel.openTunnel(function(isOpen){
29 + if (shouldStayAliveForever && isOpen){
30 + grunt.verbose.writeln('Keeping the sauce-tunnel open forever because you used the keepalive flag `' + task.name + '`');
31 + return;
32 + }
33 + grunt.verbose.writeln('To keep the sauce-tunnel open forever, use the grunt task `' + task.name + ':keepalive`');
34 + taskCompletedSuccessfully(isOpen);
35 + });
36 +};
package.json
+2 -1
@@ -60,7 +60,8 @@
60 "jasmine-tapreporter": "~0.2.2",
61 "grunt-contrib-connect": "~0.5.0",
62 "es5-shim": "~2.1.0",
63 - "wd": "~0.2.2"
63 + "wd": "~0.2.2",
64 + "sauce-tunnel": "~1.1.0"
65 },
66 "engines": {
67 "node": ">=0.10.0"