From c86ca5ba3bc748024799d179ec02edcb1044dc27 Mon Sep 17 00:00:00 2001 From: Ryan Tsao Date: Wed, 14 Nov 2018 13:44:16 -0800 Subject: [PATCH] Improve Sauce Labs CI (#172) --- .buildkite/pipeline.yml | 171 ++++++++++++++++++++++++++--------- .buildkite/run-all-tests.sh | 19 ---- docker-compose-node-last.yml | 140 ---------------------------- docker-compose.yml | 32 ++----- nightwatch-ci.js | 2 +- selenium-environments.js | 25 ----- src/.DS_Store | Bin 6148 -> 0 bytes src/test/browser/index.js | 38 ++++---- test-remotely.sh | 1 - 9 files changed, 154 insertions(+), 274 deletions(-) delete mode 100755 .buildkite/run-all-tests.sh delete mode 100644 docker-compose-node-last.yml delete mode 100644 src/.DS_Store diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 08f4438d..dcfffa5e 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -1,81 +1,164 @@ steps: - name: ':docker: :package: tests' plugins: - 'docker-compose#v1.7.0': - build: browser-tests - image-repository: 027047743804.dkr.ecr.us-east-2.amazonaws.com/uber - agents: - queue: builders - - name: ':docker: :package: tests node8' - plugins: - 'docker-compose#v1.7.0': - build: browser-tests-node-last - config: docker-compose-node-last.yml + 'rtsao/docker-compose#e47c1ae': + build: + - browser-tests + - fusion-server + - sauce-tunnel-healthy + - fusion-server-healthy image-repository: 027047743804.dkr.ecr.us-east-2.amazonaws.com/uber agents: queue: builders - name: ':docker: :package: linters' plugins: - 'docker-compose#v1.7.0': + 'rtsao/docker-compose#e47c1ae': build: browser-tests-linters image-repository: 027047743804.dkr.ecr.us-east-2.amazonaws.com/uber agents: queue: builders - - name: ':docker: :package: linters node8' - plugins: - 'docker-compose#v1.7.0': - build: browser-tests-linters-node-last - config: docker-compose-node-last.yml - image-repository: 027047743804.dkr.ecr.us-east-2.amazonaws.com/uber - agents: - queue: builders - wait - command: yarn flow name: ':flowtype:' plugins: - 'docker-compose#v1.7.0': + 'rtsao/docker-compose#e47c1ae': run: browser-tests-linters agents: queue: workers - - command: yarn flow - name: ':flowtype: node8' - plugins: - 'docker-compose#v1.7.0': - run: browser-tests-linters-node-last - config: docker-compose-node-last.yml - agents: - queue: workers - name: ':eslint:' command: yarn lint plugins: - 'docker-compose#v1.7.0': + 'rtsao/docker-compose#e47c1ae': run: browser-tests-linters agents: queue: workers - - name: ':eslint: node8' - command: yarn lint + - name: ':saucelabs: :selenium: :safari: 9' + command: ./test-remotely.sh safari-9 + concurrency: 5 + concurrency_group: saucelabs plugins: - 'docker-compose#v1.7.0': - run: browser-tests-linters-node-last - config: docker-compose-node-last.yml + 'rtsao/docker-compose#e47c1ae': + run: browser-tests + pull: + - fusion-server + - sauce-tunnel-healthy + - fusion-server-healthy + agents: + queue: workers + - name: ':saucelabs: :selenium: :safari: 11' + command: ./test-remotely.sh safari-11 + concurrency: 5 + concurrency_group: saucelabs + plugins: + 'rtsao/docker-compose#e47c1ae': + run: browser-tests + pull: + - fusion-server + - sauce-tunnel-healthy + - fusion-server-healthy agents: queue: workers - - name: ':saucelabs: :selenium:' - command: .buildkite/run-all-tests.sh - concurrency: 1 + - name: ':saucelabs: :selenium: :safari: 12' + command: ./test-remotely.sh safari-12 + concurrency: 5 concurrency_group: saucelabs plugins: - 'docker-compose#v1.7.0': + 'rtsao/docker-compose#e47c1ae': run: browser-tests + pull: + - fusion-server + - sauce-tunnel-healthy + - fusion-server-healthy agents: queue: workers - - name: ':saucelabs: :selenium: node8' - command: .buildkite/run-all-tests.sh - concurrency: 1 + - name: ':saucelabs: :selenium: :ie: 9' + command: ./test-remotely.sh ie-9 + concurrency: 5 concurrency_group: saucelabs plugins: - 'docker-compose#v1.7.0': - run: browser-tests-node-last - config: docker-compose-node-last.yml + 'rtsao/docker-compose#e47c1ae': + run: browser-tests + pull: + - fusion-server + - sauce-tunnel-healthy + - fusion-server-healthy + agents: + queue: workers + - name: ':saucelabs: :selenium: :ie: 11' + command: ./test-remotely.sh ie-11 + concurrency: 5 + concurrency_group: saucelabs + plugins: + 'rtsao/docker-compose#e47c1ae': + run: browser-tests + pull: + - fusion-server + - sauce-tunnel-healthy + - fusion-server-healthy + agents: + queue: workers + - name: ':saucelabs: :selenium: :edge:' + command: ./test-remotely.sh edge + concurrency: 5 + concurrency_group: saucelabs + plugins: + 'rtsao/docker-compose#e47c1ae': + run: browser-tests + pull: + - fusion-server + - sauce-tunnel-healthy + - fusion-server-healthy + agents: + queue: workers + - name: ':saucelabs: :selenium: :android: Samsung S3' + command: ./test-remotely.sh samsung-S3 + concurrency: 5 + concurrency_group: saucelabs + plugins: + 'rtsao/docker-compose#e47c1ae': + run: browser-tests + pull: + - fusion-server + - sauce-tunnel-healthy + - fusion-server-healthy + agents: + queue: workers + - name: ':saucelabs: :selenium: :android: Samsung G4' + command: ./test-remotely.sh samsung-G4 + concurrency: 5 + concurrency_group: saucelabs + plugins: + 'rtsao/docker-compose#e47c1ae': + run: browser-tests + pull: + - fusion-server + - sauce-tunnel-healthy + - fusion-server-healthy + agents: + queue: workers + - name: ':saucelabs: :selenium: :iphone: 5S' + command: ./test-remotely.sh iPhone-5s + concurrency: 5 + concurrency_group: saucelabs + plugins: + 'rtsao/docker-compose#e47c1ae': + run: browser-tests + pull: + - fusion-server + - sauce-tunnel-healthy + - fusion-server-healthy + agents: + queue: workers + - name: ':saucelabs: :selenium: Kindle Fire' + command: ./test-remotely.sh kindleFire + concurrency: 5 + concurrency_group: saucelabs + plugins: + 'rtsao/docker-compose#e47c1ae': + run: browser-tests + pull: + - fusion-server + - sauce-tunnel-healthy + - fusion-server-healthy agents: queue: workers diff --git a/.buildkite/run-all-tests.sh b/.buildkite/run-all-tests.sh deleted file mode 100755 index 2633e627..00000000 --- a/.buildkite/run-all-tests.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -set -ex - -# run in series due to saucelabs concurrency limits -nightwatch --config nightwatch-ci.js --env chrome-mac -nightwatch --config nightwatch-ci.js --env chrome-windows -nightwatch --config nightwatch-ci.js --env safari-9 -nightwatch --config nightwatch-ci.js --env safari-11 -nightwatch --config nightwatch-ci.js --env safari-12 -nightwatch --config nightwatch-ci.js --env ie-9 -nightwatch --config nightwatch-ci.js --env ie-11 -nightwatch --config nightwatch-ci.js --env edge -nightwatch --config nightwatch-ci.js --env samsung-S3 -nightwatch --config nightwatch-ci.js --env samsung-G4 -nightwatch --config nightwatch-ci.js --env iPhone-5s -# skipping iphone X for now as tests are taking a very long time to complete -# nightwatch --config nightwatch-ci.js --env iPhone-X -nightwatch --config nightwatch-ci.js --env kindleFire diff --git a/docker-compose-node-last.yml b/docker-compose-node-last.yml deleted file mode 100644 index 654fa1bb..00000000 --- a/docker-compose-node-last.yml +++ /dev/null @@ -1,140 +0,0 @@ -version: '2.1' -services: - fusion-server-node-last: - build: - context: . - args: - BASE_IMAGE: 'uber/web-base-image:1.0.9' - command: yarn start --environment=development - expose: - - 3000 - ports: - - '3000:3000' - network_mode: 'host' - healthcheck: - test: - [ - 'CMD-SHELL', - 'curl -H "Accept: text/html" -f http://localhost:3000 || exit 1', - ] - interval: 5s - timeout: 10s - retries: 5 - - chrome-standalone-node-last: - image: selenium/standalone-chrome:latest@sha256:8f265a536bb69b89c029bb05024a11eaa71315b89ad51deda05a4e9d6b942cfd - network_mode: 'host' - restart: always - ports: - - '4444:4444' - - firefox-standalone-node-last: - image: selenium/standalone-firefox:latest@sha256:ee0abb000eb116e1ed3299ad887390539835887369cc2caf52889806315856cb - network_mode: 'host' - restart: always - ports: - - '4444:4444' - - sauce-tunnel-node-last: - image: henrrich/docker-sauce-connect:latest@sha256:9921657d1a3db8832f868ab25491363756abae52025a8d5af888aadc42ed31e9 - restart: always - expose: - - 4445 - ports: - - 4445 - network_mode: 'host' - command: - [ - '-u', - '${SAUCE_USERNAME}', - '-k', - '${SAUCE_ACCESS_KEY}', - '-i', - '${BUILDKITE_BUILD_NUMBER}', - '-p', - ] - environment: - - SAUCE_USERNAME - - SAUCE_ACCESS_KEY - - BUILDKITE_BUILD_NUMBER - healthcheck: - test: - [ - 'CMD-SHELL', - 'grep -R "Sauce Connect is up" /tmp/sc-${BUILDKITE_BUILD_NUMBER}.log || exit 1', - ] - interval: 5s - timeout: 5m - retries: 10 - - # docker-compose run does not wait on healthchecks, so proxy using this service. - sauce-tunnel-healthy-node-last: - build: - context: . - args: - BASE_IMAGE: 'uber/web-base-image:1.0.9' - network_mode: 'host' - depends_on: - sauce-tunnel-node-last: - condition: service_healthy - - # wait for running server. - fusion-server-healthy-node-last: - build: - context: . - args: - BASE_IMAGE: 'uber/web-base-image:1.0.9' - network_mode: 'host' - depends_on: - fusion-server-node-last: - condition: service_healthy - - # For running integration tests in CI - browser-tests-node-last: - build: - context: . - args: - BASE_IMAGE: 'uber/web-base-image:1.0.9' - network_mode: 'host' - depends_on: - - sauce-tunnel-healthy-node-last - - fusion-server-healthy-node-last - environment: - - SAUCE_USERNAME - - SAUCE_ACCESS_KEY - - BUILDKITE_BUILD_NUMBER - - # For running linters and static analysis - browser-tests-linters-node-last: - build: - context: . - args: - BASE_IMAGE: 'uber/web-base-image:1.0.9' - environment: - - SAUCE_USERNAME - - SAUCE_ACCESS_KEY - - BUILDKITE_BUILD_NUMBER - - # For running integration tests locally in chrome - browser-test-chrome-node-last: - build: - context: . - args: - BASE_IMAGE: 'uber/web-base-image:1.0.9' - network_mode: 'host' - depends_on: - - chrome-standalone-node-last - - fusion-server-healthy-node-last - command: ./test-standalone.sh - - # For running integration tests locally in firefox - browser-test-firefox-node-last: - build: - context: . - args: - BASE_IMAGE: 'uber/web-base-image:1.0.9' - network_mode: 'host' - depends_on: - - firefox-standalone-node-last - - fusion-server-healthy-node-last - command: ./test-standalone.sh diff --git a/docker-compose.yml b/docker-compose.yml index 6532beac..ec1810e6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,10 +4,7 @@ services: build: . command: yarn start --environment=development expose: - - 3000 - ports: - - '3000:3000' - network_mode: 'host' + - '3000' healthcheck: test: [ @@ -20,26 +17,17 @@ services: chrome-standalone: image: selenium/standalone-chrome:latest@sha256:8f265a536bb69b89c029bb05024a11eaa71315b89ad51deda05a4e9d6b942cfd - network_mode: 'host' restart: always - ports: - - '4444:4444' firefox-standalone: image: selenium/standalone-firefox:latest@sha256:ee0abb000eb116e1ed3299ad887390539835887369cc2caf52889806315856cb - network_mode: 'host' restart: always - ports: - - '4444:4444' sauce-tunnel: image: henrrich/docker-sauce-connect:latest@sha256:9921657d1a3db8832f868ab25491363756abae52025a8d5af888aadc42ed31e9 restart: always expose: - - 4445 - ports: - - 4445 - network_mode: 'host' + - '4445' command: [ '-u', @@ -47,18 +35,17 @@ services: '-k', '${SAUCE_ACCESS_KEY}', '-i', - '${BUILDKITE_BUILD_NUMBER}', - '-p', + '${BUILDKITE_JOB_ID}', ] environment: - SAUCE_USERNAME - SAUCE_ACCESS_KEY - - BUILDKITE_BUILD_NUMBER + - BUILDKITE_JOB_ID healthcheck: test: [ 'CMD-SHELL', - 'grep -R "Sauce Connect is up" /tmp/sc-${BUILDKITE_BUILD_NUMBER}.log || exit 1', + 'grep -R "Sauce Connect is up" /tmp/sc-${BUILDKITE_JOB_ID}.log || exit 1', ] interval: 5s timeout: 5m @@ -67,7 +54,6 @@ services: # docker-compose run does not wait on healthchecks, so proxy using this service. sauce-tunnel-healthy: build: . - network_mode: 'host' depends_on: sauce-tunnel: condition: service_healthy @@ -75,7 +61,6 @@ services: # wait for running server. fusion-server-healthy: build: . - network_mode: 'host' depends_on: fusion-server: condition: service_healthy @@ -83,14 +68,13 @@ services: # For running integration tests in CI browser-tests: build: . - network_mode: 'host' depends_on: - sauce-tunnel-healthy - fusion-server-healthy environment: - SAUCE_USERNAME - SAUCE_ACCESS_KEY - - BUILDKITE_BUILD_NUMBER + - BUILDKITE_JOB_ID # For running linters and static analysis browser-tests-linters: @@ -98,12 +82,11 @@ services: environment: - SAUCE_USERNAME - SAUCE_ACCESS_KEY - - BUILDKITE_BUILD_NUMBER + - BUILDKITE_JOB_ID # For running integration tests locally in chrome browser-test-chrome: build: . - network_mode: 'host' depends_on: - chrome-standalone - fusion-server-healthy @@ -112,7 +95,6 @@ services: # For running integration tests locally in firefox browser-test-firefox: build: . - network_mode: 'host' depends_on: - firefox-standalone - fusion-server-healthy diff --git a/nightwatch-ci.js b/nightwatch-ci.js index 152bd4c0..0986d2a2 100644 --- a/nightwatch-ci.js +++ b/nightwatch-ci.js @@ -12,7 +12,7 @@ require('@babel/register'); const environments = require('./selenium-environments'); -const JOB_IDENTIFIER = process.env.BUILDKITE_BUILD_NUMBER; +const JOB_IDENTIFIER = process.env.BUILDKITE_JOB_ID; const BINPATH = './node_modules/nightwatch/bin/'; const settings = { diff --git a/selenium-environments.js b/selenium-environments.js index b2f4d445..aa1a0d42 100644 --- a/selenium-environments.js +++ b/selenium-environments.js @@ -9,21 +9,6 @@ /* globals module */ module.exports = { - 'chrome-mac': { - desiredCapabilities: { - browserName: 'chrome', - platform: 'macOS 10.12', - extendedDebugging: true, - }, - }, - - 'chrome-windows': { - desiredCapabilities: { - browserName: 'chrome', - platform: 'Windows 10', - }, - }, - 'safari-11': { desiredCapabilities: { browserName: 'safari', @@ -103,16 +88,6 @@ module.exports = { }, }, - 'iPhone-X': { - desiredCapabilities: { - browserName: 'Safari', - deviceName: 'iPhone X Simulator', - deviceOrientation: 'portrait', - platformVersion: '11.0', - platformName: 'iOS', - }, - }, - kindleFire: { desiredCapabilities: { browserName: 'Browser', diff --git a/src/.DS_Store b/src/.DS_Store deleted file mode 100644 index f37481096c0a8aeaeca5c730755457ea433b2589..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%TB{U3>?#{s^HQi$NdHVU{#eb=nnuXph~4dw7uuXZ!>;SB}%z+09&#r>-Fp^ zbBJRAvOI0>fCYd#T@jxe#-{t~BfE;slqhyai#?v{M;u1gmlMjpMuQe_cxOEGH-~2T z)V4bwjF}be@q#U0`x_H{kk#~4GhThfBYivExO{(RQ-M?<6-WhAf&Zp}wpQBw#xY|m zkP4&%X9e{8Q0R&^uyeFe2ZN0OME#97