diff --git a/circle.yml b/circle.yml index 6262f089ba..c78cb335bd 100644 --- a/circle.yml +++ b/circle.yml @@ -9,6 +9,6 @@ machine: dependencies: pre: - npm install -g protractor gulp -test: +test: override: - ./scripts/shippable/ci.sh diff --git a/config/gulp-tasks/test.js b/config/gulp-tasks/test.js index bf1ab10136..467e6d9b82 100644 --- a/config/gulp-tasks/test.js +++ b/config/gulp-tasks/test.js @@ -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(); }); } }; diff --git a/config/lib/ionic-snapshot.js b/config/lib/ionic-snapshot.js index 525ceb1295..dc4159a471 100755 --- a/config/lib/ionic-snapshot.js +++ b/config/lib/ionic-snapshot.js @@ -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; diff --git a/config/protractor.conf.js b/config/protractor.conf.js index d184440ff4..c71dafaec8 100644 --- a/config/protractor.conf.js +++ b/config/protractor.conf.js @@ -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, diff --git a/scripts/shippable/ci.sh b/scripts/snapshot/run.sh similarity index 70% rename from scripts/shippable/ci.sh rename to scripts/snapshot/run.sh index f6f1618022..ca2c50c0e9 100755 --- a/scripts/shippable/ci.sh +++ b/scripts/snapshot/run.sh @@ -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 \ diff --git a/shippable.yml b/shippable.yml deleted file mode 100644 index 5f616f5573..0000000000 --- a/shippable.yml +++ /dev/null @@ -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