diff options
| -rw-r--r-- | .travis.yml | 4 | ||||
| -rw-r--r-- | karma-shared.conf.js | 56 | ||||
| -rw-r--r-- | lib/browser-stack/start-tunnel.js | 47 | ||||
| -rwxr-xr-x | lib/browser-stack/start-tunnel.sh | 1 | ||||
| -rw-r--r-- | package.json | 4 | ||||
| -rwxr-xr-x | travis_build.sh | 4 | 
6 files changed, 108 insertions, 8 deletions
| diff --git a/.travis.yml b/.travis.yml index 4d0bfcdf..0c31fbe8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,11 +7,13 @@ env:      - SAUCE_USERNAME=angular-ci      - SAUCE_ACCESS_KEY=9b988f434ff8-fbca-8aa4-4ae3-35442987      - SAUCE_CONNECT_READY_FILE=/tmp/sauce-connect-ready +    - BROWSER_STACK_USERNAME=VojtaJina +    - BROWSER_STACK_ACCESS_KEY=HAfHZaypxAc3PEUrUU9a      - LOGS_DIR=/tmp/angular-build/logs  before_script:    - mkdir -p $LOGS_DIR -  - ./lib/sauce/sauce_connect_setup.sh +  - ./lib/browser-stack/start-tunnel.sh    - npm install -g grunt-cli    - grunt bower    - grunt bower diff --git a/karma-shared.conf.js b/karma-shared.conf.js index cd51697f..645660f7 100644 --- a/karma-shared.conf.js +++ b/karma-shared.conf.js @@ -15,6 +15,11 @@ module.exports = function(config, specificOptions) {        tunnelIdentifier: process.env.TRAVIS_JOB_NUMBER      }, +    // BrowserStack config for Travis CI +    browserStack: { +      startTunnel: false +    }, +      // For more browsers on Sauce Labs see:      // https://saucelabs.com/docs/platforms/webdriver      customLaunchers: { @@ -49,16 +54,59 @@ module.exports = function(config, specificOptions) {          browserName: 'internet explorer',          platform: 'Windows 2012',          version: '10' +      }, + +      'BS_Chrome': { +        base: 'BrowserStack', +        browser: 'chrome', +        os: 'OS X', +        os_version: 'Mountain Lion' +      }, +      'BS_Safari': { +        base: 'BrowserStack', +        browser: 'safari', +        os: 'OS X', +        os_version: 'Mountain Lion' +      }, +      'BS_Firefox': { +        base: 'BrowserStack', +        browser: 'firefox', +        os: 'Windows', +        os_version: '8' +      }, +      'BS_IE_8': { +        base: 'BrowserStack', +        browser: 'ie', +        browser_version: '8.0', +        os: 'Windows', +        os_version: '7' +      }, +      'BS_IE_9': { +        base: 'BrowserStack', +        browser: 'ie', +        browser_version: '9.0', +        os: 'Windows', +        os_version: '7' +      }, +      'BS_IE_10': { +        base: 'BrowserStack', +        browser: 'ie', +        browser_version: '10.0', +        os: 'Windows', +        os_version: '8' +      }, +      'BS_IE_11': { +        base: 'BrowserStack', +        browser: 'ie', +        browser_version: '11.0', +        os: 'Windows', +        os_version: '8.1'        }      }    });    if (process.env.TRAVIS) { -    // TODO(vojta): remove once SauceLabs supports websockets. -    // This speeds up the capturing a bit, as browsers don't even try to use websocket. -    config.transports = ['xhr-polling']; -      // Debug logging into a file, that we print out at the end of the build.      config.loggers.push({        type: 'file', diff --git a/lib/browser-stack/start-tunnel.js b/lib/browser-stack/start-tunnel.js new file mode 100644 index 00000000..f2b475d8 --- /dev/null +++ b/lib/browser-stack/start-tunnel.js @@ -0,0 +1,47 @@ +var fs = require('fs'); +var http = require('http'); +var BrowserStackTunnel = require('browserstacktunnel-wrapper'); + +var HOSTNAME = 'localhost'; +var PORTS = [9090, 9876]; +var ACCESS_KEY = process.env.BROWSER_STACK_ACCESS_KEY; +var READY_FILE = process.env.SAUCE_CONNECT_READY_FILE; + +// We need to start fake servers, otherwise the tunnel does not start. +var fakeServers = []; +var hosts = []; + +PORTS.forEach(function(port) { +  fakeServers.push(http.createServer(function() {}).listen(port)); +  hosts.push({ +    name: HOSTNAME, +    port: port, +    sslFlag: 0 +  }); +}); + +var tunnel = new BrowserStackTunnel({ +  key: ACCESS_KEY, +  hosts: hosts +}); + + +tunnel.start(function(error) { +  console.log('** callback **') +  if (error) { +    console.error('Can not establish the tunnel', error); +  } else { +    console.log('Tunnel established.'); +    fakeServers.forEach(function(server) { +      server.close(); +    }); + +    if (READY_FILE) { +      fs.writeFile(READY_FILE, ''); +    } +  } +}); + +tunnel.on('error', function(error) { +  console.error(error); +}); diff --git a/lib/browser-stack/start-tunnel.sh b/lib/browser-stack/start-tunnel.sh new file mode 100755 index 00000000..51ad07fb --- /dev/null +++ b/lib/browser-stack/start-tunnel.sh @@ -0,0 +1 @@ +node ./lib/browser-stack/start-tunnel.js & diff --git a/package.json b/package.json index 95266bad..2bdc95ab 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,9 @@      "promises-aplus-tests": "~1.3.2",      "grunt-shell": "~0.4.0",      "semver": "~2.1.0", -    "lodash": "~2.1.0" +    "lodash": "~2.1.0", +    "karma-browserstack-launcher": "~0.0.4", +    "browserstacktunnel-wrapper": "~1.1.1"    },    "licenses": [      { diff --git a/travis_build.sh b/travis_build.sh index 735bdd2c..e51db211 100755 --- a/travis_build.sh +++ b/travis_build.sh @@ -5,5 +5,5 @@ set -e  export SAUCE_ACCESS_KEY=`echo $SAUCE_ACCESS_KEY | rev`  grunt parallel:travis --reporters dots \ -  --browsers SL_Chrome,SL_Safari,SL_Firefox,SL_IE_8,SL_IE_9,SL_IE_10 \ -  --e2e-browsers SL_Chrome +  --browsers BS_Chrome,BS_Safari,BS_Firefox,BS_IE_8,BS_IE_9,BS_IE_10,BS_IE_11 \ +  --e2e-browsers BS_Chrome | 
