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"