This is an automated email from the ASF dual-hosted git repository.

erisu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-paramedic.git


The following commit(s) were added to refs/heads/master by this push:
     new 62a8466  feat!: remove sauce labs & related logic (#273)
62a8466 is described below

commit 62a8466c4fb95ab0d8d5933879f956db45b5fa96
Author: エリス <[email protected]>
AuthorDate: Thu Dec 4 20:14:26 2025 +0900

    feat!: remove sauce labs & related logic (#273)
---
 README.md                            | 153 +++-------
 conf/pr/android-10.0.config.json     |   9 -
 conf/pr/android-5.1.config.json      |   8 -
 conf/pr/android-6.0.config.json      |   8 -
 conf/pr/android-7.0.config.json      |   9 -
 conf/pr/android-7.1.config.json      |   9 -
 conf/pr/android-8.0.config.json      |   9 -
 conf/pr/android-8.1.config.json      |   9 -
 conf/pr/android-9.0.config.json      |   9 -
 conf/pr/browser-chrome.config.json   |   9 -
 conf/pr/browser-edge.config.json     |   9 -
 conf/pr/browser-firefox.config.json  |   9 -
 conf/pr/browser-safari.config.json   |   9 -
 conf/pr/ios-11.3.config.json         |   9 -
 conf/pr/ios-12.0.config.json         |   9 -
 conf/pr/ios-12.2.config.json         |  10 -
 conf/pr/windows-10-store.config.json |   9 -
 event-cache-plugin/EventCache.js     |  94 ------
 event-cache-plugin/package.json      |  14 -
 event-cache-plugin/paramedic.js      |  48 ---
 event-cache-plugin/plugin.xml        |  35 ---
 lib/ParamedicApp.js                  |  22 --
 lib/ParamedicConfig.js               | 107 -------
 lib/ParamedicSauceLabs.js            | 569 -----------------------------------
 lib/appium/AppiumRunner.js           |  30 +-
 lib/appium/helpers/wdHelper.js       |  58 ++--
 lib/paramedic.js                     |  63 +---
 lib/utils/utilities.js               |  14 -
 main.js                              |  43 ---
 package-lock.json                    | 188 +-----------
 package.json                         |  13 +-
 31 files changed, 90 insertions(+), 1504 deletions(-)

diff --git a/README.md b/README.md
index aa0aedf..9a208c4 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@
 
 `cordova-paramedic` is a tool to automate execution of Cordova plugins tests 
(via 
[`cordova-plugin-test-framework`](https://github.com/apache/cordova-plugin-test-framework)).
 
-You can use Paramedic to build and run a Cordova app with plugin tests, run 
these tests on local and remote emulators on [Sauce 
Labs](https://saucelabs.com/), and report the results. It can be used on a 
local or Continuous Integration environment.
+You can use Paramedic to build and run a Cordova app with plugin tests, run 
these tests on local emulators, and report the results. It can be used on a 
local or Continuous Integration environment.
 
 Cordova Paramedic is currently used to automatically run all plugin tests on 
CI.
 
@@ -37,21 +37,37 @@ Cordova Paramedic is currently used to automatically run 
all plugin tests on CI.
 
 ## Table of Contents
 
-- [Supported Cordova Platforms](#supported-cordova-platforms)
-- [What does it do?](#what-does-it-do)
-- [Installation](#installation)
-- [Usage](#usage)
-  - [Common usages](#common-usages)
-- [Command Line Interface](#command-line-interface)
-  - [What to build and test](#what-to-build-and-test)
-  - [Emulator/Device to use for tests](#emulatordevice-to-use-for-tests)
-  - [Test Result Server](#test-result-server)
-  - [Test Configuration](#test-configuration)
-  - [Sauce Labs](#sauce-labs)
-- [Configuration file](#configuration-file)
-- [API Interface](#api-interface)
-- [Quirks](#quirks)
-  - [Windows](#windows)
+- [Cordova Paramedic (Test Automation)](#cordova-paramedic-test-automation)
+  - [Table of Contents](#table-of-contents)
+  - [Supported Cordova Platforms](#supported-cordova-platforms)
+  - [What does it do?](#what-does-it-do)
+  - [Installation](#installation)
+  - [Usage](#usage)
+    - [Common usages](#common-usages)
+  - [Command Line Interface](#command-line-interface)
+    - [What to build and test](#what-to-build-and-test)
+      - [`--platform` (required)](#--platform-required)
+      - [`--plugin` (required)](#--plugin-required)
+      - [`--verbose` (optional)](#--verbose-optional)
+      - [`--cli` (optional)](#--cli-optional)
+      - [`--justbuild` (optional)](#--justbuild-optional)
+    - [Emulator/Device to use for tests](#emulatordevice-to-use-for-tests)
+      - [`--target` (optional)](#--target-optional)
+    - [Test Result Server](#test-result-server)
+      - [`--useTunnel` (optional)](#--usetunnel-optional)
+      - [`--externalServerUrl` (optional)](#--externalserverurl-optional)
+      - [`--port` (optional)](#--port-optional)
+    - [Test configuration](#test-configuration)
+      - [`--timeout` (optional)](#--timeout-optional)
+      - [`--outputDir` (optional)](#--outputdir-optional)
+      - [`--cleanUpAfterRun` (optional)](#--cleanupafterrun-optional)
+      - [`--logMins` (optional)](#--logmins-optional)
+      - [`--tccDb` (optional)](#--tccdb-optional)
+      - [`--args` (optional)](#--args-optional)
+  - [Configuration file](#configuration-file)
+  - [API Interface](#api-interface)
+  - [Quirks](#quirks)
+    - [Windows](#windows)
 
 <!--<small><i><a href='http://ecotrust-canada.github.io/markdown-toc/'>Table 
of contents generated with markdown-toc</a></i></small>-->
 
@@ -97,62 +113,15 @@ A full Paramedic run will:
             1. Time out if "connection takes to long" TODO (failure) <!-- 
8-479-->
             1. Receive and handle "tests are done" (success) and "device 
disconnected" (failure) events <!-- 8-485-->
         1. (browser) Close the running browser <!-- 6-368 -->
-        1. Run the Appium tests (with sauce = false) <!-- 7-465 -->
         </details>
-    - <details>
-      <summary>... or on Sauce Labs</summary>
-
-        1. Build, package and upload the app to Sauce Labs or (platform = 
browser) open the app in a browser
-        1. (platform = browser) Connect to Sauce Connect (Proxy)
-        1. Connect to Web Driver on Sauce Labs
-        1. Navigate Web Driver to correct page (browser) or webview (apps)
-        1. Click "Auto Tests" if a plugin `*wkwebview*` is installed
-        1. Find out if the "permission buster" should be skipped (plugins 
splashscreen or inappbrowser, browser): `skipBuster`
-        1. Start polling in the background for events using the Web Driver 
(submitting `skipBuster` as well) every 2.5 seconds
-        1. Wait for the tests results
-            1. Time out if "connection takes to long" TODO (failure)  <!-- 
8-479-->
-            1. Receive and handle "tests are done" (success) and "device 
disconnected" (failure) events<!-- 8-485-->
-        1. Log success or failure
-        1. Quit Web Driver
-        1. (platform = browser) Close the open browser <!-- 16-1056 -->
-        1. Close connection to Sauce Connect (Proxy)
-        1. Run the Appium tests on Sauce Labs (with sauce = true) <!-- 7-454 
-->
-        </details>
-    - <details>
-      <summary>Run the Appium tests <!-- 6-379 --></summary>
-
-        1. Skip if action = build <!-- 6-384 -->
-        1. Skip is Appium should be skipped <!-- 6-388 -->
-        1. Skip if platform != android or ios <!-- 6-392 -->
-        1. !sauce: Error when no targetObj TODO <!-- 6-397 -->
-        1. Create Appium options <!-- 7-403 -->
-        1. Create AppiumRunner with options <!-- 7-426 -->
-            1. Prepare the submitted options <!-- AppiumRunner 151 -->
-            1. Create screenshot directory <!-- AppiumRunner 147 -->
-            1. Find the tests in plugin paths <!-- AppiumRunner 307 -->
-            1. Set globals for the tests <!-- AppiumRunner 334 -->
-        1. Skip if no Appium tests were found <!-- 7-427 -->  
-        1. Prepare App in AppiumRunner <!-- 7-433 -->
-            1. Remove server address from app
-            2. Reconfigure app (modify preferences + CSP, add plugin) <!-- 
367, 375, 385 -- >
-            3. Build app
-        1. (sauce) Package and Upload the App to Sauce Labs <!-- 7-436 -->
-        1. Run tests via AppiumRunner <!-- 7-442 -->
-            1. (!sauce) Start iOS Proxy (`ios_webkit_debug_proxy`) <!-- 
AppiumRunner 231 -->
-            1. (!sauce) Install (`npm install appium`) <!-- AppiumRunner 231 
--> and start Appium server <!-- AppiumRunner 252 -->
-            1. Start to run the Appium tests <!-- AppiumRunner 170 -->
-            1. Handle eventual exceptions, return the result
-      </details>
-1. <details>
+2. <details>
     <summary>Clean up</summary>
-
-    1. (!sauce) <!-- 2-107 -->
-        1. Handle timeouts of test execution above
-        1. Collect Device Logs
-        1. Uninstall App
-        1. Kill Emulator Process
-    1. (sauce) Display Sauce run details <!-- 2-118 -->
-    1. Clean up Project <!-- 2-121 -->
+    <!-- 2-107 -->
+     1. Handle timeouts of test execution above
+     2. Collect Device Logs
+     3. Uninstall App
+     4. Kill Emulator Process
+     5. Clean up Project <!-- 2-121 -->
     </details>
 
 ## Installation
@@ -221,12 +190,6 @@ cordova-paramedic --platform android --plugin ./
 cordova-paramedic --platform android --plugin ./ --target 02e7f7e9215da7f8 
--useTunnel
 ```
 
-**Test your current plugin on an Android 7.0 emulator on Sauce Labs:**
-
-```shell
-cordova-paramedic --config conf/pr/android-7.0 --plugin ./
-```
-
 ## Command Line Interface
 
 ### What to build and test
@@ -373,44 +336,6 @@ Add additional parameters to the `cordova build` and 
`cordova run` commands.
 cordova-paramedic --platform ios --plugin cordova-plugin-contacts 
--args=--buildFlag='-UseModernBuildSystem=0'
 ```
 
-### Sauce Labs
-
-#### `--shouldUseSauce` (optional)
-
-Run tests on [Sauce Labs](https://saucelabs.com/). You'll need to specify 
Sauce Labs username and access key using either `--sauceUser` and `--sauceKey` 
arguments or `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables.
-
-#### `--sauceUser` (optional)
-
-Sauce Labs username. Alternatively set via the `SAUCE_USERNAME` environment 
variable.
-
-#### `--sauceKey` (optional)
-
-Sauce Labs access key. Alternatively set via the `SAUCE_ACCESS_KEY` 
environment variable.
-
-```shell
-cordova-paramedic --platform ios --plugin cordova-plugin-contacts 
--shouldUseSauce --sauceUser ***** --sauceKey ***** --buildName 
"paramedic-test-01"
-```
-
-#### `--buildName` (optional)
-
-Build name to show on Sauce Labs dashboard. If omitted, will use "Paramedic 
sauce test" and a timestamp.
-
-#### `--sauceDeviceName` (optional)
-
-Name of the Sauce Labs emulator or browser. For example, "iPhone Simulator" or 
"firefox". Please refer to the [Sauce Labs platforms 
list](https://saucelabs.com/platforms) to see available device names.
-
-#### `--saucePlatformVersion` (optional)
-
-Platform version of the Sauce Labs emulator OS, or version of the browser (if 
testing `browser` platform). For example, "9.3" or "54.0". Please refer to the 
[Sauce Labs platforms list](https://saucelabs.com/platforms) to see available 
platform versions.
-
-#### `--sauceAppiumVersion` (optional)
-
-Appium version to use when running on Sauce Labs. For example, "1.5.3".
-
-```shell
-cordova-paramedic --platform ios --plugin cordova-plugin-contacts 
--shouldUseSauce --sauceUser ***** --sauceKey ***** --sauceDeviceName 'iPad 
Simulator" --saucePlatformVersion 9.1 --appiumVersion 1.5.2
-```
-
 ## Configuration file
 
 Configuration file is used when no parameters are passed to 
`cordova-paramedic` call or explicitly specified via `--config` parameter:
diff --git a/conf/pr/android-10.0.config.json b/conf/pr/android-10.0.config.json
deleted file mode 100644
index 48105cb..0000000
--- a/conf/pr/android-10.0.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "platform": "android@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "saucePlatformVersion": "10.0",
-    "sauceDeviceName": "Android GoogleAPI Emulator",
-    "verbose": true
-}
diff --git a/conf/pr/android-5.1.config.json b/conf/pr/android-5.1.config.json
deleted file mode 100644
index a5b6ed8..0000000
--- a/conf/pr/android-5.1.config.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-    "platform": "android@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "saucePlatformVersion": "5.1",
-    "verbose": true
-}
diff --git a/conf/pr/android-6.0.config.json b/conf/pr/android-6.0.config.json
deleted file mode 100644
index df3dc7f..0000000
--- a/conf/pr/android-6.0.config.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-    "platform": "android@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "saucePlatformVersion": "6.0",
-    "verbose": true
-}
diff --git a/conf/pr/android-7.0.config.json b/conf/pr/android-7.0.config.json
deleted file mode 100644
index e3c2255..0000000
--- a/conf/pr/android-7.0.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "platform": "android@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "saucePlatformVersion": "7.0",
-    "sauceDeviceName": "Android GoogleAPI Emulator",
-    "verbose": true
-}
diff --git a/conf/pr/android-7.1.config.json b/conf/pr/android-7.1.config.json
deleted file mode 100644
index 9081246..0000000
--- a/conf/pr/android-7.1.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "platform": "android@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "saucePlatformVersion": "7.1",
-    "sauceDeviceName": "Android GoogleAPI Emulator",
-    "verbose": true
-}
diff --git a/conf/pr/android-8.0.config.json b/conf/pr/android-8.0.config.json
deleted file mode 100644
index 97cb711..0000000
--- a/conf/pr/android-8.0.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "platform": "android@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "saucePlatformVersion": "8.0",
-    "sauceDeviceName": "Android GoogleAPI Emulator",
-    "verbose": true
-}
diff --git a/conf/pr/android-8.1.config.json b/conf/pr/android-8.1.config.json
deleted file mode 100644
index ec58a24..0000000
--- a/conf/pr/android-8.1.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "platform": "android@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "saucePlatformVersion": "8.1",
-    "sauceDeviceName": "Android GoogleAPI Emulator",
-    "verbose": true
-}
diff --git a/conf/pr/android-9.0.config.json b/conf/pr/android-9.0.config.json
deleted file mode 100644
index 53fb72e..0000000
--- a/conf/pr/android-9.0.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "platform": "android@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "saucePlatformVersion": "9.0",
-    "sauceDeviceName": "Android GoogleAPI Emulator",
-    "verbose": true
-}
diff --git a/conf/pr/browser-chrome.config.json 
b/conf/pr/browser-chrome.config.json
deleted file mode 100644
index 51d8539..0000000
--- a/conf/pr/browser-chrome.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "platform": "browser@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "sauceDeviceName": "chrome",
-    "saucePlatformVersion": "59.0",
-    "verbose": true
-}
diff --git a/conf/pr/browser-edge.config.json b/conf/pr/browser-edge.config.json
deleted file mode 100644
index 7f9284b..0000000
--- a/conf/pr/browser-edge.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "platform": "browser@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "sauceDeviceName": "MicrosoftEdge",
-    "saucePlatformVersion": "15.15063",
-    "verbose": true
-}
diff --git a/conf/pr/browser-firefox.config.json 
b/conf/pr/browser-firefox.config.json
deleted file mode 100644
index 5d75458..0000000
--- a/conf/pr/browser-firefox.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "platform": "browser@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "sauceDeviceName": "firefox",
-    "saucePlatformVersion": "54.0",
-    "verbose": true
-}
diff --git a/conf/pr/browser-safari.config.json 
b/conf/pr/browser-safari.config.json
deleted file mode 100644
index 1aacf7d..0000000
--- a/conf/pr/browser-safari.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "platform": "browser@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "sauceDeviceName": "safari",
-    "saucePlatformVersion": "11.1",
-    "verbose": true
-}
diff --git a/conf/pr/ios-11.3.config.json b/conf/pr/ios-11.3.config.json
deleted file mode 100644
index b9a1a7e..0000000
--- a/conf/pr/ios-11.3.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "platform": "ios@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "saucePlatformVersion": "11.3",
-    "sauceAppiumVersion": "1.8.1",
-    "verbose": true
-}
diff --git a/conf/pr/ios-12.0.config.json b/conf/pr/ios-12.0.config.json
deleted file mode 100644
index 7362b58..0000000
--- a/conf/pr/ios-12.0.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "platform": "ios@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "saucePlatformVersion": "12.0",
-    "sauceAppiumVersion": "1.9.1",
-    "verbose": true
-}
diff --git a/conf/pr/ios-12.2.config.json b/conf/pr/ios-12.2.config.json
deleted file mode 100644
index 7faa03f..0000000
--- a/conf/pr/ios-12.2.config.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    "platform": "ios@latest",
-    "action": "run",
-    "cleanUpAfterRun": true,
-    "shouldUseSauce": true,
-    "saucePlatformVersion": "12.2",
-    "sauceAppiumVersion": "1.13.0",
-    "sauceDeviceName": "iPhone XR Simulator",
-    "verbose": true
-}
diff --git a/conf/pr/windows-10-store.config.json 
b/conf/pr/windows-10-store.config.json
deleted file mode 100644
index 645b707..0000000
--- a/conf/pr/windows-10-store.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "platform": "windows@latest",
-    "action": "run",
-    "args": " -- --appx=uap --archs=x64",
-    "cleanUpAfterRun": true,
-    "logMins": 15,
-    "shouldUseSauce": true,
-    "verbose": true
-}
diff --git a/event-cache-plugin/EventCache.js b/event-cache-plugin/EventCache.js
deleted file mode 100644
index 0309c6f..0000000
--- a/event-cache-plugin/EventCache.js
+++ /dev/null
@@ -1,94 +0,0 @@
-/* global window, cordova, device */
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-var platformMap = {
-    'ipod touch':'ios',
-    'iphone':'ios'
-};
-
-function JasmineParamedicProxy() {
-    this.specExecuted = 0;
-    this.specFailed = 0;
-    window._jasmineParamedicProxyCache = [];
-}
-
-function cacheEvent (eventName, eventObject) {
-    window._jasmineParamedicProxyCache.push({
-        eventName: eventName,
-        eventObject: eventObject
-    });
-}
-
-JasmineParamedicProxy.prototype.jasmineStarted = function (o) {
-    cacheEvent('jasmineStarted', o);
-};
-
-JasmineParamedicProxy.prototype.specStarted = function (o) {
-    cacheEvent('specStarted', o);
-};
-
-JasmineParamedicProxy.prototype.specDone = function (o) {
-    if (o.status !== 'disabled') {
-        this.specExecuted++;
-    }
-    if (o.status === 'failed') {
-        this.specFailed++;
-    }
-
-    cacheEvent('specDone', o);
-};
-
-JasmineParamedicProxy.prototype.suiteStarted = function (o) {
-    cacheEvent('suiteStarted', o);
-};
-
-JasmineParamedicProxy.prototype.suiteDone = function (o) {
-    cacheEvent('suiteDone', o);
-};
-
-JasmineParamedicProxy.prototype.jasmineDone = function (o) {
-    var p = 'Desktop';
-    var devmodel = 'none';
-    var version = cordova.version;
-    if (typeof device !== 'undefined') {
-        p = device.platform.toLowerCase();
-        devmodel = device.model || device.name;
-        version = device.version.toLowerCase();
-    }
-
-    o = o || {};
-
-    // include platform info
-    /*o.cordova = {
-        platform: (platformMap.hasOwnProperty(p) ? platformMap[p] : p),
-        version: version,
-        model: devmodel
-    };*/
-
-    // include common spec results
-    o.specResults = {
-        specExecuted : this.specExecuted,
-        specFailed   : this.specFailed
-    };
-
-    cacheEvent('jasmineDone', o);
-};
-
-module.exports = JasmineParamedicProxy;
diff --git a/event-cache-plugin/package.json b/event-cache-plugin/package.json
deleted file mode 100644
index 7d1d16d..0000000
--- a/event-cache-plugin/package.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "name": "cordova-paramedic-event-cache",
-  "version": "0.5.0",
-  "license": "Apache 2.0",
-  "description": "Cordova Paramedic Event Cache Plugin",
-  "main": "paramedic.js",
-  "engines" : {
-      "node" : ">=0.11.2"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/apache/cordova-paramedic.git"
-  }
-}
diff --git a/event-cache-plugin/paramedic.js b/event-cache-plugin/paramedic.js
deleted file mode 100644
index 1bd297e..0000000
--- a/event-cache-plugin/paramedic.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/* global jasmine, cordova */
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-/* global window */
-
-// CB-11430 Inject SAUCELABS_ENV global variable to indicate we're running on 
Saucelabs
-window.SAUCELABS_ENV = true;
-
-function Paramedic() {
-
-}
-
-Paramedic.prototype.initialize = function() {
-    this.injectJasmineReporter();
-};
-
-Paramedic.prototype.injectJasmineReporter = function () {
-    var EventCache = 
require('cordova-plugin-paramedic-event-cache.EventCache');
-    var eventCache = new EventCache();
-    var testsModule = 
cordova.require("cordova-plugin-test-framework.cdvtests");
-    var defineAutoTestsOriginal = testsModule.defineAutoTests;
-
-    testsModule.defineAutoTests = function () {
-        defineAutoTestsOriginal();
-        jasmine.getEnv().addReporter(eventCache);
-    };
-};
-
-new Paramedic().initialize();
-
-module.exports = Paramedic;
diff --git a/event-cache-plugin/plugin.xml b/event-cache-plugin/plugin.xml
deleted file mode 100644
index df85801..0000000
--- a/event-cache-plugin/plugin.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-
-<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0";
-           id="cordova-plugin-paramedic-event-cache"
-      version="1.0.0-dev">
-
-    <name>Paramedic Event Cache</name>
-    <description>Cordova Paramedic Event Cache Plugin</description>
-    <license>Apache 2.0</license>
-
-    <js-module src="EventCache.js" name="EventCache" />
-
-    <js-module src="paramedic.js" name="paramedic">
-        <runs/>
-    </js-module>
-
-</plugin>
diff --git a/lib/ParamedicApp.js b/lib/ParamedicApp.js
index e9cbae7..c57a065 100644
--- a/lib/ParamedicApp.js
+++ b/lib/ParamedicApp.js
@@ -70,10 +70,6 @@ class ParamedicApp {
 
         const ciFrameworkPlugins = 
['github:apache/cordova-plugin-test-framework', path.join(__dirname, '..', 
'paramedic-plugin')];
 
-        if (this.config.shouldUseSauce() && !this.config.getUseTunnel()) {
-            ciFrameworkPlugins.push(path.join(__dirname, '..', 
'event-cache-plugin'));
-        }
-
         if (this.isWindows) {
             ciFrameworkPlugins.push(path.join(__dirname, '..', 
'debug-mode-plugin'));
         }
@@ -116,24 +112,6 @@ class ParamedicApp {
                     } else {
                         logger.info('cordova-paramedic: couldn\'t apply the 
patch. It must be good news: does cordova-android not hard-code gradle daemon 
anymore?');
                     }
-                } else if (this.isBrowser && this.config.shouldUseSauce()) {
-                    logger.info('cordova-paramedic: I like patching stuff, 
so...');
-                    logger.info('cordova-paramedic: monkey patching browser 
platform to disable browser pop-up.');
-                    let cordovaRunFile = path.join(this.tempFolder.name, 
'platforms', 'browser', 'cordova', 'run');
-                    // we need to supply some replacement string so this 
method can properly return a result
-                    if (appPatcher.monkeyPatch(cordovaRunFile, /return 
cordovaServe\.launchBrowser\(.*\);/, '// no pop-up please')) {
-                        logger.info('cordova-paramedic: success!');
-                        this.runner.browserPatched = true;
-                    } else {
-                        cordovaRunFile = path.join(this.tempFolder.name, 
'platforms', 'browser', 'cordova', 'lib', 'run.js');
-                        if (appPatcher.monkeyPatch(cordovaRunFile, /return 
server\.launchBrowser\(\{'target': args\.target, 'url': projectUrl\}\);/, '// 
no pop-up please')) {
-                            logger.info('cordova-paramedic: success!');
-                            this.runner.browserPatched = true;
-                        } else {
-                            logger.info('cordova-paramedic: couldn\'t apply 
the patch. Not a big deal, though: things should work anyway.');
-                            this.runner.browserPatched = false;
-                        }
-                    }
                 }
             });
     }
diff --git a/lib/ParamedicConfig.js b/lib/ParamedicConfig.js
index 474bed8..dee6a16 100644
--- a/lib/ParamedicConfig.js
+++ b/lib/ParamedicConfig.js
@@ -20,41 +20,13 @@
 const DEFAULT_START_PORT = 7008;
 const DEFAULT_END_PORT = 7208;
 const DEFAULT_TIMEOUT = 60 * 60 * 1000; // 60 minutes in msec - this will 
become a param
-const DEFAULT_SAUCE_DEVICE_NAME_ANDROID = 'Android GoogleAPI Emulator';
-const DEFAULT_SAUCE_PLATFORM_VERSION_ANDROID = '8.0';
-const DEFAULT_SAUCE_DEVICE_NAME_IOS = 'iPhone Simulator';
-const DEFAULT_SAUCE_PLATFORM_VERSION_IOS = '9.3';
-const DEFAULT_SAUCE_APPIUM_VERSION = '1.9.1';
-const DEFAULT_BUILD_NAME = 'Paramedic sauce test';
 const DEFAULT_CLI = 'cordova'; // use globally installed cordova by default
 
-const { utilities } = require('./utils');
-
 class ParamedicConfig {
     constructor (json) {
         this._config = json;
     }
 
-    getDefaultSauceDeviceName () {
-        if (this.getPlatformId() === utilities.ANDROID) {
-            return DEFAULT_SAUCE_DEVICE_NAME_ANDROID;
-        } else if (this.getPlatformId() === utilities.IOS) {
-            return DEFAULT_SAUCE_DEVICE_NAME_IOS;
-        } else {
-            throw new Error('Don\'t know a default device name for platform: ' 
+ this.getPlatformId());
-        }
-    }
-
-    getDefaultSaucePlatformVersion () {
-        if (this.getPlatformId() === utilities.ANDROID) {
-            return DEFAULT_SAUCE_PLATFORM_VERSION_ANDROID;
-        } else if (this.getPlatformId() === utilities.IOS) {
-            return DEFAULT_SAUCE_PLATFORM_VERSION_IOS;
-        } else {
-            throw new Error('Don\'t know a default platform version for 
platform: ' + this.getPlatformId());
-        }
-    }
-
     getUseTunnel () {
         return this._config.useTunnel;
     }
@@ -127,77 +99,6 @@ class ParamedicConfig {
         return this._config.justbuild;
     }
 
-    shouldUseSauce () {
-        return this._config.shouldUseSauce;
-    }
-
-    setShouldUseSauce (sus) {
-        this._config.shouldUseSauce = sus;
-    }
-
-    getBuildName () {
-        return this._config.buildName || this.getDefaultBuildName();
-    }
-
-    setBuildName (buildName) {
-        this._config.buildName = buildName;
-    }
-
-    getDefaultBuildName () {
-        return DEFAULT_BUILD_NAME + ' ' + Date.now();
-    }
-
-    getSauceUser () {
-        return this._config.sauceUser || 
process.env[utilities.SAUCE_USER_ENV_VAR];
-    }
-
-    setSauceUser (sauceUser) {
-        this._config.sauceUser = sauceUser;
-    }
-
-    getSauceKey () {
-        return this._config.sauceKey || 
process.env[utilities.SAUCE_KEY_ENV_VAR];
-    }
-
-    setSauceKey (sauceKey) {
-        this._config.sauceKey = sauceKey;
-    }
-
-    getSauceDeviceName () {
-        return this._config.sauceDeviceName || 
this.getDefaultSauceDeviceName();
-    }
-
-    setSauceDeviceName (sauceDeviceName) {
-        this._config.sauceDeviceName = sauceDeviceName.toString();
-    }
-
-    getSaucePlatformVersion () {
-        return this._config.saucePlatformVersion || 
this.getDefaultSaucePlatformVersion();
-    }
-
-    setSaucePlatformVersion (saucePlatformVersion) {
-        this._config.saucePlatformVersion = saucePlatformVersion.toString();
-    }
-
-    getSauceAppiumVersion () {
-        return this._config.sauceAppiumVersion || DEFAULT_SAUCE_APPIUM_VERSION;
-    }
-
-    setSauceAppiumVersion (sauceAppiumVersion) {
-        this._config.sauceAppiumVersion = sauceAppiumVersion.toString();
-    }
-
-    getSauceTunnelId () {
-        if (typeof this._config.sauceTunnelId === 'boolean') {
-            this._config.sauceTunnelId = undefined;
-        }
-        return this._config.sauceTunnelId;
-    }
-
-    setSauceTunnelId (tid) {
-        this._config.sauceTunnelId = tid;
-    }
-
     runMainTests () {
         return !this._config.skipMainTests;
     }
@@ -296,14 +197,6 @@ ParamedicConfig.parseFromArguments = function (argv) {
         logMins: argv.logMins ? argv.logMins : null,
         tccDb: argv.tccDbPath ? argv.tccDb : null,
         cleanUpAfterRun: !!argv.cleanUpAfterRun,
-        shouldUseSauce: !!argv.shouldUseSauce || false,
-        buildName: argv.buildName,
-        sauceUser: argv.sauceUser,
-        sauceKey: argv.sauceKey,
-        sauceDeviceName: argv.sauceDeviceName && 
argv.sauceDeviceName.toString(),
-        saucePlatformVersion: argv.saucePlatformVersion && 
argv.saucePlatformVersion.toString(),
-        sauceAppiumVersion: argv.sauceAppiumVersion && 
argv.sauceAppiumVersion.toString(),
-        sauceTunnelId: argv.sauceTunnelId,
         skipAppiumTests: argv.skipAppium,
         skipMainTests: argv.skipMainTests,
         ci: argv.ci,
diff --git a/lib/ParamedicSauceLabs.js b/lib/ParamedicSauceLabs.js
deleted file mode 100644
index 3723d18..0000000
--- a/lib/ParamedicSauceLabs.js
+++ /dev/null
@@ -1,569 +0,0 @@
-#!/usr/bin/env node
-
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-const path = require('path');
-const cp = require('child_process');
-const Q = require('q');
-const shell = require('shelljs');
-const randomstring = require('randomstring');
-const fs = require('fs');
-const wd = require('wd');
-const SauceLabs = require('saucelabs');
-const sauceConnectLauncher = require('sauce-connect-launcher');
-const { logger, exec, execPromise, utilities } = require('./utils');
-const appPatcher = require('./appium/helpers/appPatcher');
-
-class ParamedicSauceLabs {
-    constructor (config, runner) {
-        this.config = config;
-        this.runner = runner;
-
-        this.platformId = this.config.getPlatformId();
-        this.isAndroid = this.platformId === utilities.ANDROID;
-        this.isBrowser = this.platformId === utilities.BROWSER;
-        this.isIos = this.platformId === utilities.IOS;
-    }
-
-    checkSauceRequirements () {
-        if (!this.isAndroid && !this.isIos && !this.isBrowser) {
-            logger.warn('Saucelabs only supports Android and iOS (and 
browser), falling back to testing locally.');
-            this.config.setShouldUseSauce(false);
-        } else if (!this.config.getSauceKey()) {
-            throw new Error('Saucelabs key not set. Please set it via 
environmental variable ' +
-                utilities.SAUCE_KEY_ENV_VAR + ' or pass it with the --sauceKey 
parameter.');
-        } else if (!this.config.getSauceUser()) {
-            throw new Error('Saucelabs user not set. Please set it via 
environmental variable ' +
-                utilities.SAUCE_USER_ENV_VAR + ' or pass it with the 
--sauceUser parameter.');
-        } else if (!this.runner.shouldWaitForTestResult()) {
-            // don't throw, just silently disable Sauce
-            this.config.setShouldUseSauce(false);
-        }
-    }
-
-    packageApp () {
-        switch (this.platformId) {
-        case utilities.IOS: {
-            return Q.Promise((resolve, reject) => {
-                const zipCommand = 'zip -r ' + this.getPackageName() + ' ' + 
this.getBinaryName();
-                shell.pushd(this.getPackageFolder());
-                shell.rm('-rf', this.getPackageName());
-                console.log('Running command: ' + zipCommand + ' in dir: ' + 
shell.pwd());
-                exec(zipCommand, (code) => {
-                    shell.popd();
-                    if (code) {
-                        reject('zip command returned with error code ' + code);
-                    } else {
-                        resolve();
-                    }
-                });
-            });
-        }
-        case utilities.ANDROID:
-            break; // don't need to zip the app for Android
-        case utilities.BROWSER:
-            break; // don't need to bundle the app on Browser platform at all
-        default:
-            throw new Error('Don\'t know how to package the app for platform: 
' + this.platformId);
-        }
-        return Q.resolve();
-    }
-
-    uploadApp () {
-        logger.normal('cordova-paramedic: uploading ' + this.getAppName() + ' 
to Sauce Storage');
-
-        const sauceUser = this.config.getSauceUser();
-        const key = this.config.getSauceKey();
-        const uploadURI = encodeURI('https://saucelabs.com/rest/v1/storage/' + 
sauceUser + '/' + this.getAppName() + '?overwrite=true');
-        const filePath = this.getPackagedPath();
-        const uploadCommand =
-            'curl -u ' + sauceUser + ':' + key +
-            ' -X POST -H "Content-Type: application/octet-stream" ' +
-            uploadURI + ' --data-binary "@' + filePath + '"';
-
-        return execPromise(uploadCommand);
-    }
-
-    getPackagedPath () {
-        return path.join(this.getPackageFolder(), this.getPackageName());
-    }
-
-    getPackageFolder () {
-        const packageDirs = this.getPackageFolders();
-        let foundDir = null;
-
-        packageDirs.forEach((dir) => {
-            if (fs.existsSync(dir) && fs.statSync(dir).isDirectory()) {
-                foundDir = dir;
-            }
-        });
-
-        if (foundDir) return foundDir;
-
-        throw new Error('Couldn\'t locate a built app directory. Looked here: 
' + packageDirs);
-    }
-
-    getPackageFolders () {
-        let packageFolders;
-
-        switch (this.platformId) {
-        case utilities.ANDROID:
-            packageFolders = [
-                path.join(this.runner.tempFolder.name, 'platforms', 'android', 
'app', 'build', 'outputs', 'apk', 'debug'),
-                path.join(this.runner.tempFolder.name, 'platforms', 'android', 
'build', 'outputs', 'apk')
-            ];
-            break;
-
-        case utilities.IOS:
-            packageFolders = [path.join(this.runner.tempFolder.name, 
'platforms', 'ios', 'build', 'Debug-iphonesimulator')];
-            break;
-
-        default:
-            throw new Error('Don\t know where the package folder is for the 
platform: ' + this.platformId);
-        }
-
-        return packageFolders;
-    }
-
-    getPackageName () {
-        let packageName;
-
-        switch (this.platformId) {
-        case utilities.IOS:
-            packageName = 'HelloCordova.zip';
-            break;
-
-        case utilities.ANDROID:
-            packageName = this.getBinaryName();
-            break;
-
-        default:
-            throw new Error('Don\'t know what the package name is for 
platform: ' + this.platformId);
-        }
-
-        return packageName;
-    }
-
-    getBinaryName () {
-        let binaryName;
-
-        switch (this.platformId) {
-        case utilities.ANDROID: {
-            shell.pushd(this.getPackageFolder());
-            const apks = shell.ls('*debug.apk');
-
-            if (apks.length > 0) {
-                binaryName = apks.reduce((previous, current) => {
-                    // if there is any apk for x86, take it
-                    if (current.indexOf('x86') >= 0) return current;
-
-                    // if not, just take the first one
-                    return previous;
-                });
-            } else {
-                throw new Error('Couldn\'t locate built apk');
-            }
-
-            shell.popd();
-            break;
-        }
-        case utilities.IOS:
-            binaryName = 'HelloCordova.app';
-            break;
-
-        default:
-            throw new Error('Don\'t know the binary name for the platform: ' + 
this.platformId);
-        }
-
-        return binaryName;
-    }
-
-    // Returns a name of the file at the SauceLabs storage
-    getAppName () {
-        // exit if we did this before
-        if (this.appName) return this.appName;
-
-        let appName = randomstring.generate();
-
-        switch (this.platformId) {
-        case utilities.ANDROID:
-            appName += '.apk';
-            break;
-
-        case utilities.IOS:
-            appName += '.zip';
-            break;
-
-        default:
-            throw new Error('Don\'t know the app name for the platform: ' + 
this.platformId);
-        }
-
-        this.appName = appName; // save for additional function calls
-        return appName;
-    }
-
-    displaySauceDetails (buildName) {
-        if (!this.config.shouldUseSauce()) return Q();
-
-        if (!buildName) {
-            buildName = this.config.getBuildName();
-        }
-
-        const d = Q.defer();
-
-        logger.normal('Getting saucelabs jobs details...\n');
-
-        const sauce = new SauceLabs({
-            username: this.config.getSauceUser(),
-            password: this.config.getSauceKey()
-        });
-
-        sauce.getJobs((err, jobs) => {
-            if (err) {
-                console.log(err);
-            }
-
-            let found = false;
-            for (const job in jobs) {
-                if (Object.prototype.hasOwnProperty.call(jobs, job) && 
jobs[job].name && jobs[job].name.indexOf(buildName) === 0) {
-                    const jobUrl = 'https://saucelabs.com/beta/tests/' + 
jobs[job].id;
-                    
logger.normal('============================================================================================');
-                    logger.normal('Job name: ' + jobs[job].name);
-                    logger.normal('Job ID: ' + jobs[job].id);
-                    logger.normal('Job URL: ' + jobUrl);
-                    logger.normal('Video: ' + jobs[job].video_url);
-                    logger.normal('Appium logs: ' + jobs[job].log_url);
-                    if (this.isAndroid) {
-                        logger.normal('Logcat logs: ' + 
'https://saucelabs.com/jobs/' + jobs[job].id + '/logcat.log');
-                    }
-                    
logger.normal('============================================================================================');
-                    logger.normal('');
-                    found = true;
-                }
-            }
-
-            if (!found) {
-                logger.warn('Can not find saucelabs job. Logs and video will 
be unavailable.');
-            }
-            d.resolve();
-        });
-
-        return d.promise;
-    }
-
-    getSauceCaps () {
-        this.runner.sauceBuildName = this.runner.sauceBuildName || 
this.config.getBuildName();
-        const caps = {
-            name: this.runner.sauceBuildName,
-            idleTimeout: '100', // in seconds
-            maxDuration: utilities.SAUCE_MAX_DURATION,
-            tunnelIdentifier: this.config.getSauceTunnelId()
-        };
-
-        switch (this.platformId) {
-        case utilities.ANDROID:
-            caps.platformName = 'Android';
-            caps.appPackage = 'io.cordova.hellocordova';
-            caps.appActivity = 'io.cordova.hellocordova.MainActivity';
-            caps.app = 'sauce-storage:' + this.getAppName();
-            caps.deviceType = 'phone';
-            caps.deviceOrientation = 'portrait';
-            caps.appiumVersion = this.config.getSauceAppiumVersion();
-            caps.deviceName = this.config.getSauceDeviceName();
-            caps.platformVersion = this.config.getSaucePlatformVersion();
-            break;
-
-        case utilities.IOS:
-            caps.platformName = 'iOS';
-            caps.autoAcceptAlerts = true;
-            caps.waitForAppScript = 'true;';
-            caps.app = 'sauce-storage:' + this.getAppName();
-            caps.deviceType = 'phone';
-            caps.deviceOrientation = 'portrait';
-            caps.appiumVersion = this.config.getSauceAppiumVersion();
-            caps.deviceName = this.config.getSauceDeviceName();
-            caps.platformVersion = this.config.getSaucePlatformVersion();
-            break;
-
-        case utilities.BROWSER:
-            caps.browserName = this.config.getSauceDeviceName() || 'chrome';
-            caps.version = this.config.getSaucePlatformVersion() || '45.0';
-            caps.platform = caps.browserName.indexOf('Edge') > 0 ? 'Windows 
10' : 'macOS 10.13';
-            // setting from env.var here and not in the config
-            // because for any other platform we don't need to put the sauce 
connect up
-            // unless the tunnel id is explicitly passed (means that user 
wants it anyway)
-            if (!caps.tunnelIdentifier && 
process.env[utilities.SAUCE_TUNNEL_ID_ENV_VAR]) {
-                caps.tunnelIdentifier = 
process.env[utilities.SAUCE_TUNNEL_ID_ENV_VAR];
-            } else if (!caps.tunnelIdentifier) {
-                throw new Error('Testing browser platform on Sauce Labs 
requires Sauce Connect tunnel. Please specify tunnel identifier via 
--sauceTunnelId');
-            }
-            break;
-
-        default:
-            throw new Error('Don\'t know the Sauce caps for the platform: ' + 
this.platformId);
-        }
-
-        return caps;
-    }
-
-    connectWebdriver () {
-        const user = this.config.getSauceUser();
-        const key = this.config.getSauceKey();
-        const caps = this.getSauceCaps();
-
-        logger.normal('cordova-paramedic: connecting webdriver');
-        const spamDots = setInterval(() => {
-            process.stdout.write('.');
-        }, 1000);
-
-        wd.configureHttp({
-            timeout: utilities.WD_TIMEOUT,
-            retryDelay: utilities.WD_RETRY_DELAY,
-            retries: utilities.WD_RETRIES
-        });
-
-        const driver = wd.promiseChainRemote(utilities.SAUCE_HOST, 
utilities.SAUCE_PORT, user, key);
-        return driver
-            .init(caps)
-            .then(() => {
-                clearInterval(spamDots);
-                process.stdout.write('\n');
-            }, (error) => {
-                clearInterval(spamDots);
-                process.stdout.write('\n');
-                throw (error);
-            });
-    }
-
-    connectSauceConnect () {
-        const isBrowser = this.isBrowser;
-
-        // on platforms other than browser, only run sauce connect if user 
explicitly asks for it
-        if (!isBrowser && !this.config.getSauceTunnelId()) return Q();
-        // on browser, run sauce connect in any case
-        if (isBrowser && !this.config.getSauceTunnelId()) {
-            
this.config.setSauceTunnelId(process.env[utilities.SAUCE_TUNNEL_ID_ENV_VAR] || 
this.config.getBuildName());
-        }
-
-        return Q.Promise((resolve, reject) => {
-            logger.info('cordova-paramedic: Starting Sauce Connect...');
-            sauceConnectLauncher({
-                username: this.config.getSauceUser(),
-                accessKey: this.config.getSauceKey(),
-                tunnelIdentifier: this.config.getSauceTunnelId(),
-                connectRetries: utilities.SAUCE_CONNECT_CONNECTION_RETRIES,
-                connectRetryTimeout: 
utilities.SAUCE_CONNECT_CONNECTION_TIMEOUT,
-                downloadRetries: utilities.SAUCE_CONNECT_DOWNLOAD_RETRIES,
-                downloadRetryTimeout: utilities.SAUCE_CONNECT_DOWNLOAD_TIMEOUT
-            }, (err, sauceConnectProcess) => {
-                if (err) reject(err);
-
-                this.sauceConnectProcess = sauceConnectProcess;
-                logger.info('cordova-paramedic: Sauce Connect ready');
-                resolve();
-            });
-        });
-    }
-
-    runSauceTests () {
-        logger.warn('... on SauceLabs');
-        
logger.warn('---------------------------------------------------------');
-
-        let isTestPassed = false;
-        let pollForResults;
-        let driver;
-        let runProcess = null;
-
-        if (!this.config.runMainTests()) {
-            logger.normal('Skipping main tests...');
-            return Q(utilities.TEST_PASSED);
-        }
-
-        logger.info('cordova-paramedic: running tests with sauce');
-
-        return Q()
-            .then(() => {
-                // Build + "Upload" app
-                if (!this.isBrowser) {
-                    return this.buildApp()
-                        .then(() => this.packageApp())
-                        .then(() => this.uploadApp());
-                }
-
-                // for browser, we need to serve the app for Sauce Connect
-                // we do it by just running "cordova run" and ignoring the 
chrome instance that pops up
-                return Q().then(() => {
-                    appPatcher.addCspSource(this.runner.tempFolder.name, 
'connect-src', 'http://*');
-                    appPatcher.permitAccess(this.runner.tempFolder.name, '*');
-                    return this.runner.getCommandForStartingTests();
-                }).then((command) => {
-                    console.log('$ ' + command);
-                    runProcess = cp.exec(command, () => {
-                        // a precaution not to try to kill some other process
-                        runProcess = null;
-                    });
-                });
-            })
-            .then(() => this.connectSauceConnect())
-            .then(() => {
-                driver = this.connectWebdriver();
-
-                if (this.isBrowser) {
-                    return 
driver.get('http://localhost:8000/cdvtests/index.html');
-                }
-
-                return driver;
-            })
-            .then(() => {
-                if (this.config.getUseTunnel() || this.isBrowser) {
-                    return driver;
-                }
-
-                return driver
-                    .getWebviewContext()
-                    .then((webview) => driver.context(webview));
-            })
-            .then(() => {
-                if (this.isIos) {
-                    logger.normal('cordova-paramedic: navigating to a test 
page');
-                    return driver
-                        .sleep(1000)
-                        .elementByXPath('//*[text() = "Auto Tests"]')
-                        .click();
-                }
-
-                return driver;
-            })
-            .then(() => {
-                logger.normal('cordova-paramedic: connecting to app');
-
-                const plugins = this.config.getPlugins();
-                let skipBuster = false;
-
-                // skip permission buster for splashscreen and inappbrowser 
plugins
-                // it hangs the test run on Android 7 for some reason
-                for (let i = 0; i < plugins.length; i++) {
-                    if (plugins[i].indexOf('cordova-plugin-splashscreen') >= 0 
|| plugins[i].indexOf('cordova-plugin-inappbrowser') >= 0) {
-                        skipBuster = true;
-                    }
-                }
-                // always skip buster for browser platform
-                if (this.isBrowser) {
-                    skipBuster = true;
-                }
-
-                if (!this.config.getUseTunnel()) {
-                    let polling = false;
-
-                    pollForResults = setInterval(() => {
-                        if (!polling) {
-                            polling = true;
-                            driver.pollForEvents(this.platformId, skipBuster)
-                                .then((events) => {
-                                    for (let i = 0; i < events.length; i++) {
-                                        
this.runner.server.emit(events[i].eventName, events[i].eventObject);
-                                    }
-
-                                    polling = false;
-                                })
-                                .fail((error) => {
-                                    logger.warn('cordova-paramedic, 
pollForResults error: ' + error);
-                                    polling = false;
-                                });
-                        }
-                    }, 2500);
-                }
-
-                return this.runner.waitForTests();
-            })
-            .then((result) => {
-                logger.normal('cordova-paramedic: Tests finished');
-                isTestPassed = result;
-            }, (error) => {
-                logger.normal('cordova-paramedic: Tests failed to complete; 
ending session. The error is:\n' + error.stack);
-            })
-            .fin(() => {
-                if (pollForResults) {
-                    clearInterval(pollForResults);
-                }
-                if (driver && typeof driver.quit === 'function') {
-                    return driver.quit();
-                }
-            })
-            .fin(() => {
-                if (this.isBrowser && !this.runner.browserPatched) {
-                // we need to kill chrome
-                    this.runner.killEmulatorProcess();
-                }
-                if (runProcess) {
-                // as well as we need to kill the spawned node process serving 
our app
-                    return Q.Promise((resolve) => {
-                        utilities.killProcess(runProcess.pid, () => {
-                            resolve();
-                        });
-                    });
-                }
-            })
-            .fin(() => {
-                if (this.sauceConnectProcess) {
-                    logger.info('cordova-paramedic: Closing Sauce Connect 
process...');
-                    return Q.Promise((resolve) => {
-                        this.sauceConnectProcess.close(() => {
-                            logger.info('cordova-paramedic: Successfully 
closed Sauce Connect process');
-                            resolve();
-                        });
-                    });
-                }
-            })
-            .then(() => {
-                return isTestPassed;
-            });
-    }
-
-    buildApp () {
-        const command = this.getCommandForBuilding();
-
-        logger.normal('cordova-paramedic: running command ' + command);
-
-        return execPromise(command)
-            .then((output) => {
-                if (output.indexOf('BUILD FAILED') >= 0) {
-                    throw new Error('Unable to build the project.');
-                }
-            }, (output) => {
-            // this trace is automatically available in verbose mode
-            // so we check for this flag to not trace twice
-                if (!this.config.verbose) {
-                    logger.normal(output);
-                }
-
-                throw new Error('Unable to build the project.');
-            });
-    }
-
-    getCommandForBuilding () {
-        let cmd = this.config.getCli() + ' build ' + this.platformId + 
utilities.PARAMEDIC_COMMON_CLI_ARGS;
-        if (this.config.getArgs()) {
-            cmd += ' ' + this.config.getArgs();
-        }
-        return cmd;
-    }
-}
-
-module.exports = ParamedicSauceLabs;
diff --git a/lib/appium/AppiumRunner.js b/lib/appium/AppiumRunner.js
index ff32e90..78e20a1 100644
--- a/lib/appium/AppiumRunner.js
+++ b/lib/appium/AppiumRunner.js
@@ -247,13 +247,7 @@ class AppiumRunner {
         global.UNORM = unorm;
         global.UDID = this.options.udid;
         global.VERBOSE = this.options.verbose;
-        global.USE_SAUCE = this.options.sauce;
-        global.SAUCE_USER = this.options.sauceUser;
-        global.SAUCE_KEY = this.options.sauceKey;
-        global.SAUCE_CAPS = this.options.sauceCaps;
         global.VERBOSE = this.options.verbose;
-        global.SAUCE_SERVER_HOST = utilities.SAUCE_HOST;
-        global.SAUCE_SERVER_PORT = utilities.SAUCE_PORT;
     }
 
     prepareApp () {
@@ -297,19 +291,17 @@ class AppiumRunner {
         return d.promise;
     }
 
-    runTests (useSauce) {
+    runTests () {
         return Q().then(() => {
-            if (!useSauce) {
-                this.startIosProxy();
-                // check if Appium is already running
-                return portChecker.check(4723).then((isInUse) => {
-                    if (!isInUse) {
-                        return installAppiumServer()
-                            .then(this.startAppiumServer.bind(this));
-                    }
-                    logger.info('paramedic-appium: Appium port is taken, looks 
like it is already running. Jumping straight to running tests.');
-                });
-            }
+            this.startIosProxy();
+            // check if Appium is already running
+            return portChecker.check(4723).then((isInUse) => {
+                if (!isInUse) {
+                    return installAppiumServer()
+                        .then(this.startAppiumServer.bind(this));
+                }
+                logger.info('paramedic-appium: Appium port is taken, looks 
like it is already running. Jumping straight to running tests.');
+            });
         })
             .then(this.startTests.bind(this))
             .then(() => this.passed);
@@ -331,8 +323,6 @@ function getFullAppPath (appPath) {
 }
 
 function getPackagePath (options) {
-    if (options.sauce) return options.sauceAppPath;
-
     const fullAppPath = getFullAppPath(options.appPath);
 
     switch (options.platform) {
diff --git a/lib/appium/helpers/wdHelper.js b/lib/appium/helpers/wdHelper.js
index 6c97c92..45e3534 100644
--- a/lib/appium/helpers/wdHelper.js
+++ b/lib/appium/helpers/wdHelper.js
@@ -37,7 +37,6 @@ module.exports.getDriver = function (platform) {
     let automationName;
     let driverConfig = {};
     let serverConfig = {};
-    let driver;
 
     switch (platform.toLowerCase()) {
     case utilities.ANDROID:
@@ -60,42 +59,31 @@ module.exports.getDriver = function (platform) {
         retries: utilities.WD_RETRIES
     });
 
-    if (global.USE_SAUCE) {
-        serverConfig = {
-            host: global.SAUCE_SERVER_HOST,
-            port: global.SAUCE_SERVER_PORT
-        };
-
-        driverConfig = global.SAUCE_CAPS;
-
-        driver = global.WD.promiseChainRemote(serverConfig.host, 
serverConfig.port, global.SAUCE_USER, global.SAUCE_KEY);
-    } else {
-        serverConfig = {
-            host: APPIUM_SERVER_HOST,
-            port: APPIUM_SERVER_PORT
-        };
-
-        driverConfig = {
-            browserName: '',
-            platformName: normalizedPlatform,
-            platformVersion: global.PLATFORM_VERSION || '',
-            deviceName: global.DEVICE_NAME || '',
-            app: global.PACKAGE_PATH,
-            autoAcceptAlerts: true,
-            automationName
-        };
-
-        if (platform.toLowerCase() === utilities.IOS) {
-            driverConfig.wdaLaunchTimeout = 150000;
-        }
-
-        if (global.UDID) {
-            driverConfig.udid = global.UDID;
-        }
+    serverConfig = {
+        host: APPIUM_SERVER_HOST,
+        port: APPIUM_SERVER_PORT
+    };
+
+    driverConfig = {
+        browserName: '',
+        platformName: normalizedPlatform,
+        platformVersion: global.PLATFORM_VERSION || '',
+        deviceName: global.DEVICE_NAME || '',
+        app: global.PACKAGE_PATH,
+        autoAcceptAlerts: true,
+        automationName
+    };
+
+    if (platform.toLowerCase() === utilities.IOS) {
+        driverConfig.wdaLaunchTimeout = 150000;
+    }
 
-        driver = global.WD.promiseChainRemote(serverConfig);
+    if (global.UDID) {
+        driverConfig.udid = global.UDID;
     }
 
+    const driver = global.WD.promiseChainRemote(serverConfig);
+
     module.exports.configureLogging(driver);
     const spamDots = setInterval(function () {
         process.stdout.write('.');
@@ -247,7 +235,7 @@ module.exports.pollForEvents = function (driver, platform, 
skipBuster, windowOff
 
             // not found
             if (isBrowser && retries > 0) {
-            // the odds are that we're hitting "bad gateway" error on Sauce, 
refreshing the page should fix it
+            // the odds are that we're hitting "bad gateway", refreshing the 
page should fix it
                 return driver
                     .get('http://localhost:8000/cdvtests/index.html')
                     .then(function () {
diff --git a/lib/paramedic.js b/lib/paramedic.js
index 22c1282..4e47013 100644
--- a/lib/paramedic.js
+++ b/lib/paramedic.js
@@ -32,7 +32,6 @@ const ParamediciOSPermissions = 
require('./ParamediciOSPermissions');
 const ParamedicTargetChooser = require('./ParamedicTargetChooser');
 const ParamedicAppUninstall = require('./ParamedicAppUninstall');
 const ParamedicApp = require('./ParamedicApp');
-const ParamedicSauceLabs = require('./ParamedicSauceLabs');
 
 // this will add custom promise chain methods to the driver prototype
 require('./appium/helpers/wdHelper');
@@ -48,7 +47,6 @@ class ParamedicRunner {
         this.tempFolder = null;
         this.config = config;
         this.targetObj = undefined;
-        this.paramedicSauceLabs = null;
 
         this.isBrowser = this.config.getPlatformId() === utilities.BROWSER;
         this.isWindows = this.config.getPlatformId() === utilities.WINDOWS;
@@ -71,8 +69,8 @@ class ParamedicRunner {
         })
             .then(() => {
                 if (this.config.runMainTests()) {
-                // start server
-                    const noListener = (this.isBrowser) && 
this.config.shouldUseSauce();
+                    // start server
+                    const noListener = false;
                     return Server.startServer(this.config.getPorts(), 
this.config.getExternalServerUrl(), this.config.getUseTunnel(), noListener);
                 }
             })
@@ -106,12 +104,7 @@ class ParamedicRunner {
                 isTestPassed = result;
                 logger.normal('Completed tests at ' + (new 
Date()).toLocaleTimeString());
 
-                // If we run --shouldUseSauce immedatly fetch and return Sauce 
details.
-                if (this.config.shouldUseSauce()) {
-                    return 
this.paramedicSauceLabs.displaySauceDetails.apply(this.paramedicSauceLabs, 
[this.sauceBuildName]); // eslint-disable-line
-                }
-
-                // When --shouldUseSauce and --justbuild is not set, fetch 
logs from the device.
+                // When --justbuild is not set, fetch logs from the device.
                 if (this.config.getAction() !== 'build') {
                 // collect logs and uninstall app
                     this.collectDeviceLogs();
@@ -143,10 +136,6 @@ class ParamedicRunner {
         }
         
logger.warn('---------------------------------------------------------');
 
-        if (this.config.shouldUseSauce()) {
-            this.paramedicSauceLabs = new ParamedicSauceLabs(this.config, 
this);
-            
this.paramedicSauceLabs.checkSauceRequirements.apply(this.paramedicSauceLabs);
-        }
         if (!this.config.runMainTests() && !this.config.runAppiumTests()) {
             throw new Error('No tests to run: both --skipAppiumTests and 
--skipMainTests are used');
         }
@@ -292,7 +281,7 @@ class ParamedicRunner {
             });
     }
 
-    runAppiumTests (useSauce) {
+    runAppiumTests () {
         
logger.warn('---------------------------------------------------------');
         logger.warn('5. Run Appium tests');
         
logger.warn('---------------------------------------------------------');
@@ -313,11 +302,11 @@ class ParamedicRunner {
             // just skip Appium tests
             return Q(utilities.TEST_PASSED);
         }
-        if (!useSauce && (!this.targetObj || !this.targetObj.target)) {
+        if (!this.targetObj || !this.targetObj.target) {
             throw new Error('Cannot determine local device name for Appium');
         }
 
-        logger.normal('Running Appium tests ' + (useSauce ? 'on Sauce Labs' : 
'locally'));
+        logger.normal('Running Appium tests locally');
 
         const options = {
             platform: platform,
@@ -329,18 +318,9 @@ class ParamedicRunner {
             screenshotPath: path.join(process.cwd(), 'appium_screenshots'),
             output: this.config.getOutputDir(),
             verbose: this.config.isVerbose(),
-            sauce: useSauce,
             cli: this.config.getCli()
         };
 
-        if (useSauce) {
-            options.sauceAppPath = 'sauce-storage:' + 
this.paramedicSauceLabs.getAppName.apply(this.paramedicSauceLabs);
-            options.sauceUser = this.config.getSauceUser();
-            options.sauceKey = this.config.getSauceKey();
-            options.sauceCaps = 
this.paramedicSauceLabs.getSauceCaps.apply(this.paramedicSauceLabs);
-            options.sauceCaps.name += '_Appium';
-        }
-
         const appiumRunner = new AppiumRunner(options);
         if (appiumRunner.options.testPaths && 
appiumRunner.options.testPaths.length === 0) {
             logger.warn('Couldn\'t find Appium tests, skipping...');
@@ -349,13 +329,7 @@ class ParamedicRunner {
 
         return Q()
             .then(() => appiumRunner.prepareApp())
-            .then(() => {
-                if (useSauce) {
-                    return 
this.paramedicSauceLabs.packageApp.apply(this.paramedicSauceLabs)
-                        .then(() => 
this.paramedicSauceLabs.uploadApp.apply(this.paramedicSauceLabs));
-                }
-            })
-            .then(() => appiumRunner.runTests(useSauce));
+            .then(() => appiumRunner.runTests());
     }
 
     runTests () {
@@ -364,23 +338,12 @@ class ParamedicRunner {
         
logger.warn('---------------------------------------------------------');
         logger.warn('4. Run (Jasmine) tests...');
 
-        // Sauce Labs
-        if (this.config.shouldUseSauce()) {
-            return 
this.paramedicSauceLabs.runSauceTests.apply(this.paramedicSauceLabs)
-                .then((result) => {
-                    isTestPassed = result;
-                })
-                .then(() => this.runAppiumTests(true))
-                .then(isAppiumTestPassed => isTestPassed === 
utilities.TEST_PASSED && isAppiumTestPassed === utilities.TEST_PASSED);
-        // Not Sauce Labs
-        } else {
-            return this.runLocalTests()
-                .then((result) => {
-                    isTestPassed = result;
-                })
-                .then(() => this.runAppiumTests())
-                .then(isAppiumTestPassed => isTestPassed === 
utilities.TEST_PASSED && isAppiumTestPassed === utilities.TEST_PASSED);
-        }
+        return this.runLocalTests()
+            .then((result) => {
+                isTestPassed = result;
+            })
+            .then(() => this.runAppiumTests())
+            .then(isAppiumTestPassed => isTestPassed === utilities.TEST_PASSED 
&& isAppiumTestPassed === utilities.TEST_PASSED);
     }
 
     waitForTests () {
diff --git a/lib/utils/utilities.js b/lib/utils/utilities.js
index d7c6b5f..e8dee19 100644
--- a/lib/utils/utilities.js
+++ b/lib/utils/utilities.js
@@ -249,20 +249,6 @@ module.exports = {
     PARAMEDIC_COMMON_ARGS: ['--no-telemetry', '--no-update-notifier'],
     PARAMEDIC_PLUGIN_ADD_ARGS: '',
     PARAMEDIC_PLATFORM_ADD_ARGS: '',
-    SAUCE_USER_ENV_VAR: 'SAUCE_USERNAME',
-    SAUCE_KEY_ENV_VAR: 'SAUCE_ACCESS_KEY',
-    SAUCE_TUNNEL_ID_ENV_VAR: 'TRAVIS_JOB_NUMBER',
-    // retry to establish a tunnel multiple times.
-    SAUCE_CONNECT_CONNECTION_RETRIES: 5,
-    // time to wait between connection retries in ms.
-    SAUCE_CONNECT_CONNECTION_TIMEOUT: 50000,
-    // retry to download the sauce connect archive multiple times.
-    SAUCE_CONNECT_DOWNLOAD_RETRIES: 5,
-    // time to wait between download retries in ms.
-    SAUCE_CONNECT_DOWNLOAD_TIMEOUT: 1000,
-    SAUCE_HOST: 'ondemand.saucelabs.com',
-    SAUCE_PORT: 80,
-    SAUCE_MAX_DURATION: 5400, // in seconds
     DEFAULT_ENCODING: 'utf-8',
     WD_TIMEOUT: 30 * 60 * 1000,
     WD_RETRY_DELAY: 15000,
diff --git a/main.js b/main.js
index 1190dd2..6aca4e0 100755
--- a/main.js
+++ b/main.js
@@ -40,7 +40,6 @@ var USAGE           = "Error missing args. \n" +
                     "\tbe installed and tested together.\n" +
     "\n" +
     "--args: (optional) add command line args to the \"cordova build\" and 
\"cordov run\" commands \n" +
-    "--buildName : (optional) Build name to show in Saucelabs dashboard\n" +
     "--ci : (optional) Skip tests that require user interaction\n" +
     "--cleanUpAfterRun : (optional) cleans up the application after the run\n" 
+
     "--cli : (optional) A path to Cordova CLI\n" +
@@ -49,13 +48,6 @@ var USAGE           = "Error missing args. \n" +
     "--justbuild : (optional) just builds the project, without running the 
tests \n" +
     "--logMins : (optional) Windows only - specifies number of minutes to get 
logs\n" +
     "--outputDir : (optional) path to save Junit results file & Device logs\n" 
+
-    "--sauceAppiumVersion : (optional) Appium version to use when running on 
Saucelabs. For example, \"1.5.3\"\n" +
-    "--sauceDeviceName : (optional) Name of the SauceLabs emulator/browser. 
For example, \"iPhone Simulator\" or \"firefox\"\n" +
-    "--sauceKey : (optional) Saucelabs access key\n" +
-    "--saucePlatformVersion : (optional) Version of the emulator OS or version 
of the browser. For example, \"9.3\" or \"54.0\"\n" +
-    "--sauceTunnelId : (optional) Tunnel identifier to use. Only usable if you 
have Sauce Connect up\n" + 
-    "--sauceUser : (optional) Saucelabs username\n" +
-    "--shouldUseSauce : (optional) run tests on Sauce Labs\n" +
     "--skipAppiumTests : (optional) Do not run Appium tests\n" +
     "--skipMainTests : (optional) Do not run main (cordova-test-framework) 
tests\n" +
     "--startport/--endport `PORTNUM` : (optional) ports to find available and 
use for posting results from emulator back to paramedic server (default is from 
8008 to 8009)\n" +
@@ -111,41 +103,6 @@ if (argv.version) {
         paramedicConfig.setAction(argv.action);
     }
 
-    if (argv.shouldUseSauce) {
-        if (argv.shouldUseSauce === 'false') {
-            argv.shouldUseSauce = false;
-        }
-        paramedicConfig.setShouldUseSauce(argv.shouldUseSauce);
-    }
-
-    if (argv.buildName) {
-        paramedicConfig.setBuildName(argv.buildName);
-    }
-
-    if (argv.sauceUser) {
-        paramedicConfig.setSauceUser(argv.sauceUser);
-    }
-
-    if (argv.sauceKey) {
-        paramedicConfig.setSauceKey(argv.sauceKey);
-    }
-
-    if (argv.sauceDeviceName) {
-        paramedicConfig.setSauceDeviceName(argv.sauceDeviceName);
-    }
-
-    if (argv.saucePlatformVersion) {
-        paramedicConfig.setSaucePlatformVersion(argv.saucePlatformVersion);
-    }
-
-    if (argv.sauceAppiumVersion) {
-        paramedicConfig.setSauceAppiumVersion(argv.sauceAppiumVersion);
-    }
-
-    if (argv.sauceTunnelId) {
-        paramedicConfig.setSauceTunnelId(argv.sauceTunnelId);
-    }
-
     if (argv.useTunnel) {
         if (argv.useTunnel === 'false') {
             argv.useTunnel = false;
diff --git a/package-lock.json b/package-lock.json
index b3d9611..258cbc7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,8 +20,6 @@
         "minimist": "^1.2.5",
         "q": "^1.5.1",
         "randomstring": "^1.2.1",
-        "sauce-connect-launcher": "^1.3.2",
-        "saucelabs": "^1.2.0",
         "shelljs": "^0.8.4",
         "socket.io": "^4.6.2",
         "tcp-port-used": "^1.0.2",
@@ -204,25 +202,6 @@
         "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
-    "node_modules/adm-zip": {
-      "version": "0.4.16",
-      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz";,
-      "integrity": 
"sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==",
-      "engines": {
-        "node": ">=0.3.0"
-      }
-    },
-    "node_modules/agent-base": {
-      "version": "6.0.2",
-      "resolved": 
"https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz";,
-      "integrity": 
"sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
-      "dependencies": {
-        "debug": "4"
-      },
-      "engines": {
-        "node": ">= 6.0.0"
-      }
-    },
     "node_modules/ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz";,
@@ -6692,19 +6671,6 @@
         "url": "https://github.com/sponsors/ljharb";
       }
     },
-    "node_modules/es6-promise": {
-      "version": "4.2.8",
-      "resolved": 
"https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz";,
-      "integrity": 
"sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
-    },
-    "node_modules/es6-promisify": {
-      "version": "5.0.0",
-      "resolved": 
"https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz";,
-      "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
-      "dependencies": {
-        "es6-promise": "^4.0.3"
-      }
-    },
     "node_modules/escalade": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz";,
@@ -7651,18 +7617,6 @@
         "npm": ">=1.3.7"
       }
     },
-    "node_modules/https-proxy-agent": {
-      "version": "5.0.0",
-      "resolved": 
"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz";,
-      "integrity": 
"sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
-      "dependencies": {
-        "agent-base": "6",
-        "debug": "4"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
     "node_modules/human-signals": {
       "version": "2.1.0",
       "resolved": 
"https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz";,
@@ -8995,6 +8949,7 @@
       "version": "2.6.3",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz";,
       "integrity": 
"sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+      "dev": true,
       "dependencies": {
         "glob": "^7.1.3"
       },
@@ -9069,64 +9024,6 @@
       "resolved": 
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";,
       "integrity": 
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
-    "node_modules/sauce-connect-launcher": {
-      "version": "1.3.2",
-      "resolved": 
"https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.3.2.tgz";,
-      "integrity": 
"sha512-wf0coUlidJ7rmeClgVVBh6Kw55/yalZCY/Un5RgjSnTXRAeGqagnTsTYpZaqC4dCtrY4myuYpOAZXCdbO7lHfQ==",
-      "hasInstallScript": true,
-      "dependencies": {
-        "adm-zip": "~0.4.3",
-        "async": "^2.1.2",
-        "https-proxy-agent": "^5.0.0",
-        "lodash": "^4.16.6",
-        "rimraf": "^2.5.4"
-      },
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/saucelabs": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz";,
-      "integrity": 
"sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==",
-      "dependencies": {
-        "https-proxy-agent": "^2.2.1"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/saucelabs/node_modules/agent-base": {
-      "version": "4.3.0",
-      "resolved": 
"https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz";,
-      "integrity": 
"sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
-      "dependencies": {
-        "es6-promisify": "^5.0.0"
-      },
-      "engines": {
-        "node": ">= 4.0.0"
-      }
-    },
-    "node_modules/saucelabs/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz";,
-      "integrity": 
"sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/saucelabs/node_modules/https-proxy-agent": {
-      "version": "2.2.4",
-      "resolved": 
"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz";,
-      "integrity": 
"sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
-      "dependencies": {
-        "agent-base": "^4.3.0",
-        "debug": "^3.1.0"
-      },
-      "engines": {
-        "node": ">= 4.5.0"
-      }
-    },
     "node_modules/sax": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz";,
@@ -10084,19 +9981,6 @@
       "dev": true,
       "requires": {}
     },
-    "adm-zip": {
-      "version": "0.4.16",
-      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz";,
-      "integrity": 
"sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg=="
-    },
-    "agent-base": {
-      "version": "6.0.2",
-      "resolved": 
"https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz";,
-      "integrity": 
"sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
-      "requires": {
-        "debug": "4"
-      }
-    },
     "ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz";,
@@ -16492,19 +16376,6 @@
         "is-symbol": "^1.0.2"
       }
     },
-    "es6-promise": {
-      "version": "4.2.8",
-      "resolved": 
"https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz";,
-      "integrity": 
"sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
-    },
-    "es6-promisify": {
-      "version": "5.0.0",
-      "resolved": 
"https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz";,
-      "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
-      "requires": {
-        "es6-promise": "^4.0.3"
-      }
-    },
     "escalade": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz";,
@@ -17201,15 +17072,6 @@
         "sshpk": "^1.7.0"
       }
     },
-    "https-proxy-agent": {
-      "version": "5.0.0",
-      "resolved": 
"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz";,
-      "integrity": 
"sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
-      "requires": {
-        "agent-base": "6",
-        "debug": "4"
-      }
-    },
     "human-signals": {
       "version": "2.1.0",
       "resolved": 
"https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz";,
@@ -18187,6 +18049,7 @@
       "version": "2.6.3",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz";,
       "integrity": 
"sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+      "dev": true,
       "requires": {
         "glob": "^7.1.3"
       }
@@ -18224,53 +18087,6 @@
       "resolved": 
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";,
       "integrity": 
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
-    "sauce-connect-launcher": {
-      "version": "1.3.2",
-      "resolved": 
"https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.3.2.tgz";,
-      "integrity": 
"sha512-wf0coUlidJ7rmeClgVVBh6Kw55/yalZCY/Un5RgjSnTXRAeGqagnTsTYpZaqC4dCtrY4myuYpOAZXCdbO7lHfQ==",
-      "requires": {
-        "adm-zip": "~0.4.3",
-        "async": "^2.1.2",
-        "https-proxy-agent": "^5.0.0",
-        "lodash": "^4.16.6",
-        "rimraf": "^2.5.4"
-      }
-    },
-    "saucelabs": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz";,
-      "integrity": 
"sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==",
-      "requires": {
-        "https-proxy-agent": "^2.2.1"
-      },
-      "dependencies": {
-        "agent-base": {
-          "version": "4.3.0",
-          "resolved": 
"https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz";,
-          "integrity": 
"sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
-          "requires": {
-            "es6-promisify": "^5.0.0"
-          }
-        },
-        "debug": {
-          "version": "3.2.7",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz";,
-          "integrity": 
"sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "https-proxy-agent": {
-          "version": "2.2.4",
-          "resolved": 
"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz";,
-          "integrity": 
"sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
-          "requires": {
-            "agent-base": "^4.3.0",
-            "debug": "^3.1.0"
-          }
-        }
-      }
-    },
     "sax": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz";,
diff --git a/package.json b/package.json
index 6e94453..c9ba98b 100644
--- a/package.json
+++ b/package.json
@@ -13,20 +13,15 @@
   "repository": "github:apache/cordova-paramedic",
   "bugs": "https://github.com/apache/cordova-paramedic/issues";,
   "scripts": {
-    "test": "npm run lint & npm run test-local && npm run test-saucelabs",
-    "test-on-windows": "npm run lint & npm run test-local-on-windows && npm 
run test-saucelabs-on-windows",
+    "test": "npm run lint & npm run test-local",
+    "test-on-windows": "npm run lint & npm run test-local-on-windows",
     "lint": "eslint lib",
     "test-local": "npm run test-browser && npm run test-android && npm run 
test-ios",
     "test-local-on-windows": "npm run test-browser && npm run test-android",
     "test-android": "node main.js --platform android --plugin 
./spec/testable-plugin/",
     "test-ios": "node main.js --platform ios --plugin ./spec/testable-plugin/ 
--verbose",
     "test-windows": "node main.js --platform windows --plugin 
./spec/testable-plugin/",
-    "test-browser": "node main.js --platform browser --plugin 
./spec/testable-plugin/",
-    "test-saucelabs": "npm run test-saucelabs-browser && npm run 
test-saucelabs-ios && npm run test-saucelabs-android",
-    "test-saucelabs-on-windows": "npm run test-saucelabs-browser && npm run 
test-saucelabs-android",
-    "test-saucelabs-browser": "node main.js --config ./pr/browser-chrome 
--plugin ./spec/testable-plugin/ --shouldUseSauce",
-    "test-saucelabs-ios": "node main.js --config ./pr/ios-10.0 --plugin 
./spec/testable-plugin/ --shouldUseSauce",
-    "test-saucelabs-android": "node main.js --config ./pr/android-7.0 --plugin 
./spec/testable-plugin/ --shouldUseSauce"
+    "test-browser": "node main.js --platform browser --plugin 
./spec/testable-plugin/"
   },
   "keywords": [
     "cordova",
@@ -47,8 +42,6 @@
     "minimist": "^1.2.5",
     "q": "^1.5.1",
     "randomstring": "^1.2.1",
-    "sauce-connect-launcher": "^1.3.2",
-    "saucelabs": "^1.2.0",
     "shelljs": "^0.8.4",
     "socket.io": "^4.6.2",
     "tcp-port-used": "^1.0.2",


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to