chore(): add cirlceci saucelabs testing

This commit is contained in:
Andrew Joslin
2014-05-29 21:27:35 -06:00
parent c041461b21
commit 0f5ff4ed92
6 changed files with 40 additions and 41 deletions

View File

@@ -9,6 +9,6 @@ machine:
dependencies:
pre:
- npm install -g protractor gulp
test:
test:
override:
- ./scripts/shippable/ci.sh

View File

@@ -2,6 +2,7 @@ var _ = require('lodash');
var buildConfig = require('../build.config');
var connect = require('connect');
var cp = require('child_process');
var gutil = require('gulp-util');
var http = require('http');
var karma = require('karma').server;
var uuid = require('node-uuid');
@@ -16,10 +17,12 @@ module.exports = function(gulp, argv) {
*/
var sauceInstance;
gulp.task('sauce-connect', function(done) {
gutil.log('sauce-connect parameters: ', _.pick(process.env, ['SAUCE_USER', 'SAUCE_KEY', 'SAUCE_TUNNEL_ID']));
require('sauce-connect-launcher')({
username: process.env.SAUCE_USER,
accessKey: process.env.SAUCE_KEY,
tunnelIdentifier: process.env.SAUCE_TUNNEL_ID
tunnelIdentifier: process.env.SAUCE_TUNNEL_ID || 0,
verbose: true
}, function(err, instance) {
if (err) return done('Failed to launch sauce connect!');
sauceInstance = instance;
@@ -27,9 +30,9 @@ module.exports = function(gulp, argv) {
});
});
gulp.task('sauce-disconnect', function(done) {
sauceInstance && sauceInstance.close(done) || done();
});
function sauceDisconnect(done) {
sauceInstance ? sauceInstance.close(done) : done();
}
/*
@@ -45,31 +48,30 @@ module.exports = function(gulp, argv) {
gulp.task('karma-watch', function(done) {
karmaConf.singleRun = false;
karma.start(karmaConf, done);
});
gulp.task('karma-sauce', ['sauce-connect'], function(done) {
return karma.start(karmaSauceConf, function() {
sauceDisconnect(done);
});
gulp.task('karm-sauce', ['run-karma-sauce'], sauceDisconnect);
gulp.task('run-karma-sauce', ['sauce-connect'], function(done) {
return karma.start(karmaSauceConf, done);
});
/*
* Protractor Snapshot Tests
*/
var connectServer;
gulp.task('snapshot-server', function() {
var protractorHttpServer;
gulp.task('protractor-server', function() {
var app = connect().use(connect.static(__dirname + '/../../dist/ionic-demo'));
connectServer = http.createServer(app).listen(buildConfig.protractorPort);
protractorHttpServer = http.createServer(app).listen(buildConfig.protractorPort);
});
gulp.task('snapshot', ['snapshot-server'], function(done) {
snapshot(done, 'config/protractor.conf.js');
});
gulp.task('snapshot-sauce', ['sauce-connect', 'snapshot-server'], function(done) {
gulp.task('snapshot-sauce', ['run-snapshot-sauce'], sauceDisconnect);
gulp.task('run-snapshot-sauce', ['sauce-connect', 'protractor-server'], function(done) {
snapshot(done, 'config/protractor-sauce.conf.js');
});
@@ -97,11 +99,20 @@ module.exports = function(gulp, argv) {
}
function protractor(done, args) {
cp.spawn('protractor', args, { stdio: 'inherit' })
.on('exit', function(code) {
connectServer && connectServer.close();
if (code) return done('Protector test(s) failed. Exit code: ' + code);
done();
var child = cp.spawn('protractor', args, {
stdio: [process.stdin, process.stdout, 'pipe']
});
var finish = _.once(function(err) {
err && done(err) || done();
protractorHttpServer.close();
});
child.stderr.on('data', function(data) {
finish('Protractor tests failed. Error:', data.toString());
});
child.on('exit', function() {
finish();
});
}
};

View File

@@ -19,7 +19,7 @@ var IonicSnapshot = function(options) {
self.appId = options.appId || 'test_app';
self.testId = options.testId || 'test_id';
self.domain = options.domain || 'ionic-snapshot.appspot.com';
self.sleepBetweenSpecs = options.sleepBetweenSpecs || 400;
self.sleepBetweenSpecs = options.sleepBetweenSpecs || 600;
self.startTime = Date.now();
self.totalCompares = 0;
self.totalRMS = 0;

View File

@@ -9,7 +9,8 @@ exports.config = {
// Options to be passed to Jasmine-node.
jasmineNodeOpts: {
showColors: true, // Use colors in the command line report.
defaultTimeoutInterval: 120000
defaultTimeoutInterval: 120000,
isVerbose: true
},
baseUrl: 'http://localhost:' + buildConfig.protractorPort,

View File

@@ -1,22 +1,24 @@
#!/bin/bash
function init {
# Set variables if they aren't, for local testing
if [[ "$SNAPSHOT_BROWSER" == "" ]]; then
export SNAPSHOT_BROWSER=chrome
export SNAPSHOT_BROWSER_ID=chrome_desktop_test
export SNAPSHOT_WIDTH=400
export SNAPSHOT_HEIGHT=800
export SNAPSHOT_TEST_ID=$RANDOM
export SAUCE_TUNNEL_ID=$RANDOM
export SAUCE_BUILD_ID=$RANDOM
else
export SNAPSHOT_TEST_ID=$CIRCLE_SHA1
export SAUCE_TUNNEL_ID=$CIRCLE_BUILD_NUM
export SAUCE_BUILD_ID=$CIRCLE_SHA1
fi
}
function run {
cd ../..
export SNAPSHOT_TEST_ID=$(git rev-parse HEAD)
export SAUCE_TUNNEL_ID=$CIRCLE_BUILD_DUM
export SAUCE_BUILD_ID=$CIRCLE_SHA1
gulp demos --demo-version=nightly
gulp snapshot-sauce \

View File

@@ -1,15 +0,0 @@
language: node_js
node_js:
- 0.10.26
env:
- SNAPSHOT_BROWSER=chrome SNAPSHOT_BROWSER=safari
- SNAPSHOT_BROWSER_ID=chrome_desktop_narrow SNAPSHOT_BROWSER_ID=safari_desktop_narrow
- SNAPSHOT_WIDTH=400
- SNAPSHOT_HEIGHT=800
branches:
only:
- master
before_install:
- npm install -g protractor gulp
script:
- ./scripts/shippable/ci.sh