github.com/saucelabs/saucectl@v0.175.1/api/saucectl.schema.json (about)

     1  {
     2    "$schema": "https://json-schema.org/draft/2020-12/schema",
     3    "title": "SauceCTL Runner Configuration",
     4    "description": "Configuration file for saucectl.",
     5    "type": "object",
     6    "properties": {
     7      "kind": {
     8        "enum": [
     9          "apitest",
    10          "cypress",
    11          "espresso",
    12          "imagerunner",
    13          "playwright",
    14          "puppeteer-replay",
    15          "testcafe",
    16          "xcuitest",
    17          "playwright-cucumberjs"
    18        ]
    19      }
    20    },
    21    "allOf": [
    22      {
    23        "if": {
    24          "properties": {
    25            "kind": {
    26              "const": "cypress"
    27            },
    28            "apiVersion": {
    29              "const": "v1alpha"
    30            }
    31          }
    32        },
    33        "then": {
    34          "$schema": "https://json-schema.org/draft/2020-12/schema",
    35          "title": "saucectl cypress runner configuration",
    36          "description": "Configuration file for cypress using saucectl",
    37          "type": "object",
    38          "allOf": [
    39            {
    40              "$schema": "https://json-schema.org/draft/2020-12/schema",
    41              "title": "saucectl artifacts schema",
    42              "description": "Subschema for controlling artifacts",
    43              "type": "object",
    44              "properties": {
    45                "artifacts": {
    46                  "description": "Manage test output, such as logs, videos, and screenshots.",
    47                  "type": "object",
    48                  "properties": {
    49                    "cleanup": {
    50                      "description": "Whether to remove all contents of artifacts directory",
    51                      "type": "boolean"
    52                    },
    53                    "download": {
    54                      "description": "Settings related to downloading test artifacts from Sauce Labs.",
    55                      "type": "object",
    56                      "properties": {
    57                        "match": {
    58                          "description": "Specifies which artifacts to download based on whether they match the file pattern provided. Supports the wildcard character '*'.",
    59                          "type": "array"
    60                        },
    61                        "when": {
    62                          "description": "Specifies when and under what circumstances to download artifacts.",
    63                          "enum": [
    64                            "always",
    65                            "fail",
    66                            "never",
    67                            "pass"
    68                          ]
    69                        },
    70                        "directory": {
    71                          "description": "Specifies the path to the folder in which to download artifacts. A separate subdirectory is generated in this location for each suite.",
    72                          "type": "string"
    73                        }
    74                      },
    75                      "required": [
    76                        "when",
    77                        "match",
    78                        "directory"
    79                      ],
    80                      "additionalProperties": false
    81                    },
    82                    "retain": {
    83                      "description": "Compress folders into zip files, which can then be downloaded as artifacts.",
    84                      "type": "object",
    85                      "additionalProperties": {
    86                        "type": "string"
    87                      }
    88                    }
    89                  },
    90                  "additionalProperties": false
    91                }
    92              },
    93              "additionalProperties": true
    94            },
    95            {
    96              "$schema": "https://json-schema.org/draft/2020-12/schema",
    97              "title": "saucectl npm specific schema",
    98              "description": "Subschema for npm specific settings",
    99              "type": "object",
   100              "properties": {
   101                "npm": {
   102                  "description": "Settings specific to npm.",
   103                  "type": "object",
   104                  "properties": {
   105                    "packages": {
   106                      "description": "Specifies any npm packages that are required to run tests.",
   107                      "type": "object"
   108                    },
   109                    "dependencies": {
   110                      "description": "Specify local npm dependencies for saucectl to upload. These dependencies must already be installed in the local node_modules directory.",
   111                      "type": "array"
   112                    },
   113                    "registry": {
   114                      "description": "Override the default and official NPM registry URL with a custom one.",
   115                      "type": "string",
   116                      "deprecated": true
   117                    },
   118                    "strictSSL": {
   119                      "description": "Whether or not to do SSL key validation when making requests to the registry via https.",
   120                      "type": "boolean"
   121                    },
   122                    "registries": {
   123                      "description": "Specify all the registries you want to configure",
   124                      "type": "array",
   125                      "minimum": 0,
   126                      "items": {
   127                        "type": "object",
   128                        "properties": {
   129                          "scope": {
   130                            "description": "Scope for the registry entry",
   131                            "type": "string"
   132                          },
   133                          "url": {
   134                            "description": "URL for the registry entry",
   135                            "type": "string"
   136                          },
   137                          "authToken": {
   138                            "description": "Authentication token for the registry entry",
   139                            "type": "string"
   140                          },
   141                          "auth": {
   142                            "description": "Base64-encoded authentication string for the registry entry",
   143                            "type": "string"
   144                          },
   145                          "username": {
   146                            "description": "Username for authentication with the registry",
   147                            "type": "string"
   148                          },
   149                          "password": {
   150                            "description": "Password for authentication with the registry",
   151                            "type": "string"
   152                          },
   153                          "email": {
   154                            "description": "Email for authentication with the registry",
   155                            "type": "string"
   156                          }
   157                        },
   158                        "required": [
   159                          "url"
   160                        ]
   161                      }
   162                    }
   163                  },
   164                  "additionalProperties": false
   165                }
   166              },
   167              "additionalProperties": true
   168            },
   169            {
   170              "$schema": "https://json-schema.org/draft/2020-12/schema",
   171              "title": "saucectl sauce specific schema",
   172              "description": "Subschema for sauce specific settings",
   173              "type": "object",
   174              "properties": {
   175                "sauce": {
   176                  "description": "All settings related to how tests are run and identified in the Sauce Labs platform.",
   177                  "type": "object",
   178                  "properties": {
   179                    "concurrency": {
   180                      "description": "Sets the maximum number of suites to execute at the same time. Excess suites are queued and run in order as each suite completes.",
   181                      "type": "integer",
   182                      "minimum": 1
   183                    },
   184                    "metadata": {
   185                      "description": "The set of properties that allows you to provide additional information about your project that helps you distinguish it in the various environments in which it is used and reviewed.",
   186                      "type": "object",
   187                      "properties": {
   188                        "build": {
   189                          "description": "Sauce Labs can aggregate all jobs under one view based on their association with a build.",
   190                          "type": "string"
   191                        },
   192                        "tags": {
   193                          "description": "Tag your jobs so you can find them easier in Sauce Labs.",
   194                          "type": "array"
   195                        }
   196                      },
   197                      "additionalProperties": false
   198                    },
   199                    "region": {
   200                      "description": "Which Sauce Labs data center to target.",
   201                      "enum": [
   202                        "us-west-1",
   203                        "us-east-4",
   204                        "eu-central-1"
   205                      ]
   206                    },
   207                    "sauceignore": {
   208                      "description": "Path to the .sauceignore file.",
   209                      "default": ".sauceignore"
   210                    },
   211                    "tunnel": {
   212                      "description": "SauceCTL supports using Sauce Connect to establish a secure connection when running your tests on Sauce Labs. To do so, launch a tunnel; then provide the identifier in this property.",
   213                      "properties": {
   214                        "name": {
   215                          "description": "The tunnel name.",
   216                          "type": "string"
   217                        },
   218                        "owner": {
   219                          "description": "The owner (username) of the tunnel. Must be specified if the user that created the tunnel differs from the user that is running the tests.",
   220                          "type": "string"
   221                        },
   222                        "timeout": {
   223                          "description": "How long to wait for the specified tunnel to be ready. Supports duration values like '10s', '30m' etc.",
   224                          "type": "string",
   225                          "pattern": "^(?:\\d+h)?(?:\\d+m)?(?:\\d+s)?(?:\\d+ms)?$",
   226                          "examples": [
   227                            "1m",
   228                            "30s"
   229                          ]
   230                        }
   231                      },
   232                      "required": [
   233                        "name"
   234                      ],
   235                      "additionalProperties": false
   236                    },
   237                    "retries": {
   238                      "description": "The number of times to retry a failing suite.",
   239                      "type": "integer",
   240                      "minimum": 0
   241                    },
   242                    "visibility": {
   243                      "description": "Set the visibility level of test results for suites run on Sauce Labs.",
   244                      "default": "team",
   245                      "type": "string",
   246                      "oneOf": [
   247                        {
   248                          "const": "public",
   249                          "title": "Accessible to everyone."
   250                        },
   251                        {
   252                          "const": "public restricted",
   253                          "title": "Share your test's results page and video, but keeps the logs only for you."
   254                        },
   255                        {
   256                          "const": "share",
   257                          "title": "Only accessible to people with a valid link."
   258                        },
   259                        {
   260                          "const": "team",
   261                          "title": "Only accessible to people under the same root account as you."
   262                        },
   263                        {
   264                          "const": "private",
   265                          "title": "Only you (the owner) will be able to view assets and test results page."
   266                        }
   267                      ]
   268                    },
   269                    "launchOrder": {
   270                      "description": "Control starting order of suites. The default is the order in which suites are written in the config file.",
   271                      "type": "string",
   272                      "oneOf": [
   273                        {
   274                          "const": "fail rate",
   275                          "title": "Suites that historically have the highest failure rate start first."
   276                        }
   277                      ]
   278                    }
   279                  },
   280                  "additionalProperties": false
   281                }
   282              },
   283              "additionalProperties": true
   284            },
   285            {
   286              "$schema": "https://json-schema.org/draft/2020-12/schema",
   287              "title": "saucectl reporters specific schema",
   288              "description": "Subschema for reporters specific settings",
   289              "type": "object",
   290              "properties": {
   291                "reporters": {
   292                  "type": "object",
   293                  "properties": {
   294                    "junit": {
   295                      "type": "object",
   296                      "description": "The JUnit reporter merges test results from all jobs in the JUnit format into a single report.",
   297                      "properties": {
   298                        "enabled": {
   299                          "description": "Toggles the reporter on/off.",
   300                          "type": "boolean"
   301                        },
   302                        "filename": {
   303                          "description": "Filename for the generated JUnit report.",
   304                          "type": "string",
   305                          "default": "saucectl-report.xml"
   306                        }
   307                      }
   308                    },
   309                    "json": {
   310                      "type": "object",
   311                      "description": "The JSON reporter merges test results from all jobs in the JSON format into a single report.",
   312                      "properties": {
   313                        "enabled": {
   314                          "description": "Toggles the reporter on/off.",
   315                          "type": "boolean"
   316                        },
   317                        "webhookURL": {
   318                          "description": "Webhook URL to pass JSON report.",
   319                          "type": "string"
   320                        },
   321                        "filename": {
   322                          "description": "Filename for the generated JSON report.",
   323                          "type": "string",
   324                          "default": "saucectl-report.json"
   325                        }
   326                      }
   327                    },
   328                    "spotlight": {
   329                      "type": "object",
   330                      "description": "The spotlight reporter prints an overview of failed, or otherwise interesting, jobs.",
   331                      "properties": {
   332                        "enabled": {
   333                          "description": "Toggles the reporter on/off.",
   334                          "type": "boolean"
   335                        }
   336                      }
   337                    }
   338                  },
   339                  "additionalProperties": false
   340                }
   341              },
   342              "additionalProperties": true
   343            }
   344          ],
   345          "properties": {
   346            "apiVersion": {
   347              "const": "v1alpha"
   348            },
   349            "kind": {
   350              "const": "cypress"
   351            },
   352            "showConsoleLog": {
   353              "description": "Shows suites console.log locally. By default console.log is only shown on failures.",
   354              "type": "boolean"
   355            },
   356            "defaults": {
   357              "description": "Settings that are applied onto every suite by default, if no value is set on a suite explicitly.",
   358              "type": "object",
   359              "properties": {
   360                "timeout": {
   361                  "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
   362                }
   363              },
   364              "additionalProperties": false
   365            },
   366            "rootDir": {
   367              "description": "The directory of files that need to be bundled and uploaded for the tests to run.",
   368              "type": "string"
   369            },
   370            "cypress": {
   371              "description": "Contains details specific to the Cypress project.",
   372              "type": "object",
   373              "properties": {
   374                "configFile": {
   375                  "description": "The designated cypress configuration file. SauceCTL determines related files based on the location of the config file. By default saucectl defers to the test file location defined in cypress.json.",
   376                  "type": "string",
   377                  "examples": [
   378                    "cypress.json"
   379                  ]
   380                },
   381                "key": {
   382                  "description": "The secret key that grants permission to record your tests in the Cypress dashboard.",
   383                  "type": "string"
   384                },
   385                "record": {
   386                  "description": "Whether to record your test results in the Cypress dashboard.",
   387                  "type": "boolean"
   388                },
   389                "version": {
   390                  "$ref": "#/allOf/8/then/properties/playwright/properties/version",
   391                  "enum": [
   392                    "package.json",
   393                    "9.7.0"
   394                  ]
   395                },
   396                "reporters": {
   397                  "description": "Set of reporter to use.",
   398                  "type": "array",
   399                  "minimum": 0,
   400                  "items": {
   401                    "type": "object",
   402                    "properties": {
   403                      "name": {
   404                        "description": "Name of the reporter. You may have to install the associated npm dependency through npm.packages field.",
   405                        "type": "string",
   406                        "examples": [
   407                          "dot",
   408                          "nyan"
   409                        ]
   410                      },
   411                      "options": {
   412                        "description": "Options to pass to the reporter."
   413                      }
   414                    },
   415                    "additionalProperties": false
   416                  }
   417                }
   418              },
   419              "required": [
   420                "configFile",
   421                "version"
   422              ],
   423              "additionalProperties": false
   424            },
   425            "env": {
   426              "description": "Set one or more environment variables. Values can be environment variables themselves. Not supported when running espresso/xcuitest!",
   427              "type": "object"
   428            },
   429            "suites": {
   430              "description": "The set of properties providing details about the test suites to run.",
   431              "type": "array",
   432              "minItems": 1,
   433              "items": {
   434                "type": "object",
   435                "properties": {
   436                  "name": {
   437                    "description": "The name of the test suite, which will be reflected in the test results in Sauce Labs.",
   438                    "type": "string"
   439                  },
   440                  "browser": {
   441                    "$ref": "#/allOf/8/then/properties/suites/items/properties/browserName",
   442                    "enum": [
   443                      "chrome",
   444                      "firefox",
   445                      "microsoftedge"
   446                    ]
   447                  },
   448                  "browserVersion": {
   449                    "description": "Which version of the browser to use.",
   450                    "type": "string"
   451                  },
   452                  "platformName": {
   453                    "$ref": "#/allOf/4/then/properties/suites/items/properties/platform",
   454                    "enum": [
   455                      "macOS 11.00",
   456                      "macOS 12",
   457                      "macOS 13",
   458                      "Windows 10",
   459                      "Windows 11"
   460                    ]
   461                  },
   462                  "screenResolution": {
   463                    "description": "Specifies a browser window screen resolution, which may be useful if you are attempting to simulate a browser on a particular device type.",
   464                    "type": "string"
   465                  },
   466                  "config": {
   467                    "description": "Provides details related to the Cypress test configuration.",
   468                    "type": "object",
   469                    "properties": {
   470                      "testFiles": {
   471                        "description": "One or more paths to the Cypress test files to run for this suite, if not otherwise specified explicitly in cypress.json.",
   472                        "type": "array"
   473                      },
   474                      "excludedTestFiles": {
   475                        "$ref": "#/allOf/3/then/properties/suites/items/properties/excludedTestFiles"
   476                      },
   477                      "env": {
   478                        "$ref": "#/allOf/0/then/properties/env"
   479                      }
   480                    },
   481                    "required": [
   482                      "testFiles"
   483                    ]
   484                  },
   485                  "shard": {
   486                    "description": "When sharding is configured, saucectl automatically splits the tests (e.g. by spec or concurrency) so that they can easily run in parallel.",
   487                    "enum": [
   488                      "",
   489                      "concurrency",
   490                      "spec"
   491                    ]
   492                  },
   493                  "headless": {
   494                    "description": "Controls whether or not tests are run in headless mode (default: false)",
   495                    "type": "boolean"
   496                  },
   497                  "timeout": {
   498                    "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
   499                  },
   500                  "preExec": {
   501                    "description": "Specifies which commands to execute before starting the tests.",
   502                    "type": "array"
   503                  },
   504                  "timeZone": {
   505                    "description": "Specifies the timeZone for the suite.",
   506                    "type": "string"
   507                  },
   508                  "passThreshold": {
   509                    "description": "The minimum number of successful attempts for a suite to be considered as 'passed'.",
   510                    "type": "integer",
   511                    "minimum": 1
   512                  },
   513                  "smartRetry": {
   514                    "description": "Optimize suite retries by configuring the strategy.",
   515                    "type": "object",
   516                    "properties": {
   517                      "failedOnly": {
   518                        "description": "Optimize suite retries by retrying failed tests, classes or spec files only.",
   519                        "type": "boolean",
   520                        "default": false
   521                      }
   522                    }
   523                  }
   524                },
   525                "required": [
   526                  "name",
   527                  "browser",
   528                  "config"
   529                ],
   530                "additionalProperties": false
   531              }
   532            }
   533          },
   534          "required": [
   535            "apiVersion",
   536            "kind",
   537            "cypress",
   538            "suites"
   539          ],
   540          "additionalProperties": true
   541        }
   542      },
   543      {
   544        "if": {
   545          "properties": {
   546            "kind": {
   547              "const": "cypress"
   548            },
   549            "apiVersion": {
   550              "const": "v1"
   551            }
   552          }
   553        },
   554        "then": {
   555          "$schema": "https://json-schema.org/draft/2020-12/schema",
   556          "title": "saucectl cypress runner configuration",
   557          "description": "Configuration file for cypress using saucectl",
   558          "type": "object",
   559          "allOf": [
   560            {
   561              "$schema": "https://json-schema.org/draft/2020-12/schema",
   562              "title": "saucectl artifacts schema",
   563              "description": "Subschema for controlling artifacts",
   564              "type": "object",
   565              "properties": {
   566                "artifacts": {
   567                  "description": "Manage test output, such as logs, videos, and screenshots.",
   568                  "type": "object",
   569                  "properties": {
   570                    "cleanup": {
   571                      "description": "Whether to remove all contents of artifacts directory",
   572                      "type": "boolean"
   573                    },
   574                    "download": {
   575                      "description": "Settings related to downloading test artifacts from Sauce Labs.",
   576                      "type": "object",
   577                      "properties": {
   578                        "match": {
   579                          "description": "Specifies which artifacts to download based on whether they match the file pattern provided. Supports the wildcard character '*'.",
   580                          "type": "array"
   581                        },
   582                        "when": {
   583                          "description": "Specifies when and under what circumstances to download artifacts.",
   584                          "enum": [
   585                            "always",
   586                            "fail",
   587                            "never",
   588                            "pass"
   589                          ]
   590                        },
   591                        "directory": {
   592                          "description": "Specifies the path to the folder in which to download artifacts. A separate subdirectory is generated in this location for each suite.",
   593                          "type": "string"
   594                        }
   595                      },
   596                      "required": [
   597                        "when",
   598                        "match",
   599                        "directory"
   600                      ],
   601                      "additionalProperties": false
   602                    },
   603                    "retain": {
   604                      "description": "Compress folders into zip files, which can then be downloaded as artifacts.",
   605                      "type": "object",
   606                      "additionalProperties": {
   607                        "type": "string"
   608                      }
   609                    }
   610                  },
   611                  "additionalProperties": false
   612                }
   613              },
   614              "additionalProperties": true
   615            },
   616            {
   617              "$schema": "https://json-schema.org/draft/2020-12/schema",
   618              "title": "saucectl npm specific schema",
   619              "description": "Subschema for npm specific settings",
   620              "type": "object",
   621              "properties": {
   622                "npm": {
   623                  "description": "Settings specific to npm.",
   624                  "type": "object",
   625                  "properties": {
   626                    "packages": {
   627                      "description": "Specifies any npm packages that are required to run tests.",
   628                      "type": "object"
   629                    },
   630                    "dependencies": {
   631                      "description": "Specify local npm dependencies for saucectl to upload. These dependencies must already be installed in the local node_modules directory.",
   632                      "type": "array"
   633                    },
   634                    "registry": {
   635                      "description": "Override the default and official NPM registry URL with a custom one.",
   636                      "type": "string",
   637                      "deprecated": true
   638                    },
   639                    "strictSSL": {
   640                      "description": "Whether or not to do SSL key validation when making requests to the registry via https.",
   641                      "type": "boolean"
   642                    },
   643                    "registries": {
   644                      "description": "Specify all the registries you want to configure",
   645                      "type": "array",
   646                      "minimum": 0,
   647                      "items": {
   648                        "type": "object",
   649                        "properties": {
   650                          "scope": {
   651                            "description": "Scope for the registry entry",
   652                            "type": "string"
   653                          },
   654                          "url": {
   655                            "description": "URL for the registry entry",
   656                            "type": "string"
   657                          },
   658                          "authToken": {
   659                            "description": "Authentication token for the registry entry",
   660                            "type": "string"
   661                          },
   662                          "auth": {
   663                            "description": "Base64-encoded authentication string for the registry entry",
   664                            "type": "string"
   665                          },
   666                          "username": {
   667                            "description": "Username for authentication with the registry",
   668                            "type": "string"
   669                          },
   670                          "password": {
   671                            "description": "Password for authentication with the registry",
   672                            "type": "string"
   673                          },
   674                          "email": {
   675                            "description": "Email for authentication with the registry",
   676                            "type": "string"
   677                          }
   678                        },
   679                        "required": [
   680                          "url"
   681                        ]
   682                      }
   683                    }
   684                  },
   685                  "additionalProperties": false
   686                }
   687              },
   688              "additionalProperties": true
   689            },
   690            {
   691              "$schema": "https://json-schema.org/draft/2020-12/schema",
   692              "title": "saucectl sauce specific schema",
   693              "description": "Subschema for sauce specific settings",
   694              "type": "object",
   695              "properties": {
   696                "sauce": {
   697                  "description": "All settings related to how tests are run and identified in the Sauce Labs platform.",
   698                  "type": "object",
   699                  "properties": {
   700                    "concurrency": {
   701                      "description": "Sets the maximum number of suites to execute at the same time. Excess suites are queued and run in order as each suite completes.",
   702                      "type": "integer",
   703                      "minimum": 1
   704                    },
   705                    "metadata": {
   706                      "description": "The set of properties that allows you to provide additional information about your project that helps you distinguish it in the various environments in which it is used and reviewed.",
   707                      "type": "object",
   708                      "properties": {
   709                        "build": {
   710                          "description": "Sauce Labs can aggregate all jobs under one view based on their association with a build.",
   711                          "type": "string"
   712                        },
   713                        "tags": {
   714                          "description": "Tag your jobs so you can find them easier in Sauce Labs.",
   715                          "type": "array"
   716                        }
   717                      },
   718                      "additionalProperties": false
   719                    },
   720                    "region": {
   721                      "description": "Which Sauce Labs data center to target.",
   722                      "enum": [
   723                        "us-west-1",
   724                        "eu-central-1"
   725                      ]
   726                    },
   727                    "sauceignore": {
   728                      "description": "Path to the .sauceignore file.",
   729                      "default": ".sauceignore"
   730                    },
   731                    "tunnel": {
   732                      "description": "SauceCTL supports using Sauce Connect to establish a secure connection when running your tests on Sauce Labs. To do so, launch a tunnel; then provide the identifier in this property.",
   733                      "properties": {
   734                        "name": {
   735                          "description": "The tunnel name.",
   736                          "type": "string"
   737                        },
   738                        "owner": {
   739                          "description": "The owner (username) of the tunnel. Must be specified if the user that created the tunnel differs from the user that is running the tests.",
   740                          "type": "string"
   741                        }
   742                      },
   743                      "required": [
   744                        "name"
   745                      ],
   746                      "additionalProperties": false
   747                    },
   748                    "retries": {
   749                      "description": "The number of times to retry a failing suite.",
   750                      "type": "integer",
   751                      "minimum": 0
   752                    },
   753                    "visibility": {
   754                      "description": "Set the visibility level of test results for suites run on Sauce Labs.",
   755                      "default": "team",
   756                      "type": "string",
   757                      "oneOf": [
   758                        {
   759                          "const": "public",
   760                          "title": "Accessible to everyone."
   761                        },
   762                        {
   763                          "const": "public restricted",
   764                          "title": "Share your test's results page and video, but keeps the logs only for you."
   765                        },
   766                        {
   767                          "const": "share",
   768                          "title": "Only accessible to people with a valid link."
   769                        },
   770                        {
   771                          "const": "team",
   772                          "title": "Only accessible to people under the same root account as you."
   773                        },
   774                        {
   775                          "const": "private",
   776                          "title": "Only you (the owner) will be able to view assets and test results page."
   777                        }
   778                      ]
   779                    },
   780                    "launchOrder": {
   781                      "description": "Control starting order of suites. The default is the order in which suites are written in the config file.",
   782                      "type": "string",
   783                      "oneOf": [
   784                        {
   785                          "const": "fail rate",
   786                          "title": "Suites that historically have the highest failure rate start first."
   787                        }
   788                      ]
   789                    }
   790                  },
   791                  "additionalProperties": false
   792                }
   793              },
   794              "additionalProperties": true
   795            },
   796            {
   797              "$schema": "https://json-schema.org/draft/2020-12/schema",
   798              "title": "saucectl reporters specific schema",
   799              "description": "Subschema for reporters specific settings",
   800              "type": "object",
   801              "properties": {
   802                "reporters": {
   803                  "type": "object",
   804                  "properties": {
   805                    "junit": {
   806                      "type": "object",
   807                      "description": "The JUnit reporter merges test results from all jobs in the JUnit format into a single report.",
   808                      "properties": {
   809                        "enabled": {
   810                          "description": "Toggles the reporter on/off.",
   811                          "type": "boolean"
   812                        },
   813                        "filename": {
   814                          "description": "Filename for the generated JUnit report.",
   815                          "type": "string",
   816                          "default": "saucectl-report.xml"
   817                        }
   818                      }
   819                    },
   820                    "json": {
   821                      "type": "object",
   822                      "description": "The JSON reporter merges test results from all jobs in the JSON format into a single report.",
   823                      "properties": {
   824                        "enabled": {
   825                          "description": "Toggles the reporter on/off.",
   826                          "type": "boolean"
   827                        },
   828                        "webhookURL": {
   829                          "description": "Webhook URL to pass JSON report.",
   830                          "type": "string"
   831                        },
   832                        "filename": {
   833                          "description": "Filename for the generated JSON report.",
   834                          "type": "string",
   835                          "default": "saucectl-test-result.xml"
   836                        }
   837                      }
   838                    }
   839                  },
   840                  "additionalProperties": false
   841                }
   842              },
   843              "additionalProperties": true
   844            }
   845          ],
   846          "properties": {
   847            "apiVersion": {
   848              "const": "v1"
   849            },
   850            "kind": {
   851              "const": "cypress"
   852            },
   853            "showConsoleLog": {
   854              "description": "Shows suites console.log locally. By default console.log is only shown on failures.",
   855              "type": "boolean"
   856            },
   857            "defaults": {
   858              "description": "Settings that are applied onto every suite by default, if no value is set on a suite explicitly.",
   859              "type": "object",
   860              "properties": {
   861                "timeout": {
   862                  "description": "Instructs how long (in ms, s, m, or h) saucectl should wait for a suite to complete.",
   863                  "type": "string",
   864                  "pattern": "^(?:\\d+h)?(?:\\d+m)?(?:\\d+s)?(?:\\d+ms)?$",
   865                  "examples": [
   866                    "1h",
   867                    "10m",
   868                    "90s"
   869                  ]
   870                }
   871              },
   872              "additionalProperties": false
   873            },
   874            "rootDir": {
   875              "description": "The directory of files that need to be bundled and uploaded for the tests to run.",
   876              "type": "string"
   877            },
   878            "cypress": {
   879              "description": "Contains details specific to the Cypress project.",
   880              "type": "object",
   881              "properties": {
   882                "configFile": {
   883                  "description": "The designated cypress configuration file.",
   884                  "type": "string",
   885                  "examples": [
   886                    "cypress.config.js"
   887                  ]
   888                },
   889                "key": {
   890                  "description": "The secret key that grants permission to record your tests in the Cypress dashboard.",
   891                  "type": "string"
   892                },
   893                "record": {
   894                  "description": "Whether to record your test results in the Cypress dashboard.",
   895                  "type": "boolean"
   896                },
   897                "version": {
   898                  "enum": [
   899                    "package.json",
   900                    "13.7.3",
   901                    "13.6.6",
   902                    "13.6.3",
   903                    "13.6.0",
   904                    "13.4.0",
   905                    "13.3.0",
   906                    "12.17.4",
   907                    "12.17.2",
   908                    "12.14.0",
   909                    "12.11.0"
   910                  ],
   911                  "description": "Which framework version to use."
   912                },
   913                "reporters": {
   914                  "description": "Set of reporter to use.",
   915                  "type": "array",
   916                  "minimum": 0,
   917                  "items": {
   918                    "type": "object",
   919                    "properties": {
   920                      "name": {
   921                        "description": "Name of the reporter. You may have to install the associated npm dependency through npm.packages field.",
   922                        "type": "string",
   923                        "examples": [
   924                          "dot",
   925                          "nyan"
   926                        ]
   927                      },
   928                      "options": {
   929                        "description": "Options to pass to the reporter."
   930                      }
   931                    },
   932                    "additionalProperties": false
   933                  }
   934                }
   935              },
   936              "required": [
   937                "configFile",
   938                "version"
   939              ],
   940              "additionalProperties": false
   941            },
   942            "env": {
   943              "description": "Set one or more environment variables. Values can be environment variables themselves. Not supported when running espresso/xcuitest!",
   944              "type": "object"
   945            },
   946            "suites": {
   947              "description": "The set of properties providing details about the test suites to run.",
   948              "type": "array",
   949              "minItems": 1,
   950              "items": {
   951                "type": "object",
   952                "properties": {
   953                  "name": {
   954                    "description": "The name of the test suite, which will be reflected in the test results in Sauce Labs.",
   955                    "type": "string"
   956                  },
   957                  "browser": {
   958                    "enum": [
   959                      "chrome",
   960                      "firefox",
   961                      "microsoftedge",
   962                      "webkit"
   963                    ],
   964                    "description": "The name of the browser in which to run the tests."
   965                  },
   966                  "browserVersion": {
   967                    "description": "Which version of the browser to use.",
   968                    "type": "string"
   969                  },
   970                  "platformName": {
   971                    "enum": [
   972                      "macOS 11.00",
   973                      "macOS 12",
   974                      "macOS 13",
   975                      "Windows 10",
   976                      "Windows 11"
   977                    ],
   978                    "description": "A specific operating system on which to run the tests. Sauce Labs will try to choose a reasonable default if not explicitly specified."
   979                  },
   980                  "screenResolution": {
   981                    "description": "Specifies a browser window screen resolution, which may be useful if you are attempting to simulate a browser on a particular device type.",
   982                    "type": "string"
   983                  },
   984                  "config": {
   985                    "description": "Provides details related to the Cypress test configuration.",
   986                    "type": "object",
   987                    "properties": {
   988                      "testingType": {
   989                        "description": "Specify the type of tests to execute; either e2e or component. Defaults to e2e",
   990                        "enum": [
   991                          "e2e",
   992                          "component"
   993                        ],
   994                        "default": "e2e"
   995                      },
   996                      "specPattern": {
   997                        "description": "One or more paths to the Cypress test files to run for this suite.",
   998                        "type": "array"
   999                      },
  1000                      "excludeSpecPattern": {
  1001                        "description": "Exclude test files for this suite.",
  1002                        "type": "array"
  1003                      },
  1004                      "env": {
  1005                        "$ref": "#/allOf/1/then/properties/env"
  1006                      }
  1007                    },
  1008                    "required": [
  1009                      "specPattern"
  1010                    ]
  1011                  },
  1012                  "shard": {
  1013                    "description": "When sharding is configured, saucectl automatically splits the tests (e.g. by spec or concurrency) so that they can easily run in parallel.",
  1014                    "enum": [
  1015                      "",
  1016                      "concurrency",
  1017                      "spec"
  1018                    ]
  1019                  },
  1020                  "shardGrepEnabled": {
  1021                    "description": "When sharding is configured and the suite is configured to filter using cypress-grep, let saucectl filter tests before executing.",
  1022                    "type": "boolean"
  1023                  },
  1024                  "headless": {
  1025                    "description": "Controls whether or not tests are run in headless mode (default: false)",
  1026                    "type": "boolean"
  1027                  },
  1028                  "timeout": {
  1029                    "$ref": "#/allOf/1/then/properties/defaults/properties/timeout"
  1030                  },
  1031                  "preExec": {
  1032                    "description": "Specifies which commands to execute before starting the tests.",
  1033                    "type": "array"
  1034                  },
  1035                  "timeZone": {
  1036                    "description": "Specifies the timeZone for the suite.",
  1037                    "type": "string"
  1038                  },
  1039                  "passThreshold": {
  1040                    "description": "The minimum number of successful attempts for a suite to be considered as 'passed'.",
  1041                    "type": "integer",
  1042                    "minimum": 1
  1043                  },
  1044                  "smartRetry": {
  1045                    "description": "Optimize suite retries by configuring the strategy.",
  1046                    "type": "object",
  1047                    "properties": {
  1048                      "failedOnly": {
  1049                        "description": "Optimize suite retries by retrying failed tests, classes or spec files only.",
  1050                        "type": "boolean",
  1051                        "default": false
  1052                      }
  1053                    }
  1054                  }
  1055                },
  1056                "required": [
  1057                  "name",
  1058                  "browser",
  1059                  "config"
  1060                ],
  1061                "additionalProperties": false
  1062              }
  1063            }
  1064          },
  1065          "required": [
  1066            "apiVersion",
  1067            "kind",
  1068            "cypress",
  1069            "suites"
  1070          ],
  1071          "additionalProperties": true
  1072        }
  1073      },
  1074      {
  1075        "if": {
  1076          "properties": {
  1077            "kind": {
  1078              "const": "espresso"
  1079            }
  1080          }
  1081        },
  1082        "then": {
  1083          "$schema": "https://json-schema.org/draft/2020-12/schema",
  1084          "title": "saucectl espresso runner configuration",
  1085          "description": "Configuration file for espresso using saucectl",
  1086          "type": "object",
  1087          "allOf": [
  1088            {
  1089              "$ref": "#/allOf/0/then/allOf/2"
  1090            },
  1091            {
  1092              "$ref": "#/allOf/0/then/allOf/0"
  1093            },
  1094            {
  1095              "$ref": "#/allOf/0/then/allOf/3"
  1096            }
  1097          ],
  1098          "properties": {
  1099            "apiVersion": {
  1100              "const": "v1alpha"
  1101            },
  1102            "kind": {
  1103              "const": "espresso"
  1104            },
  1105            "showConsoleLog": {
  1106              "$ref": "#/allOf/0/then/properties/showConsoleLog"
  1107            },
  1108            "defaults": {
  1109              "description": "Settings that are applied onto every suite by default, if no value is set on a suite explicitly.",
  1110              "type": "object",
  1111              "properties": {
  1112                "timeout": {
  1113                  "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
  1114                }
  1115              },
  1116              "additionalProperties": false
  1117            },
  1118            "espresso": {
  1119              "description": "Contains details specific to the Espresso project.",
  1120              "type": "object",
  1121              "properties": {
  1122                "app": {
  1123                  "description": "Local path or remote url to the application. If a remote url is defined, the app will be downloaded to a local temp directory before uploading to the SauceLabs Mobile App Storage service. Supports environment variables as values.",
  1124                  "type": "string"
  1125                },
  1126                "appDescription": {
  1127                  "description": "Description for the app",
  1128                  "type": "string"
  1129                },
  1130                "testApp": {
  1131                  "description": "Local path or remote url to the test application. If a remote url is defined, the app will be downloaded to a local temp directory before uploading to the SauceLabs Mobile App Storage service. Supports environment variables as values.",
  1132                  "type": "string"
  1133                },
  1134                "testAppDescription": {
  1135                  "description": "Description for the testApp",
  1136                  "type": "string"
  1137                },
  1138                "otherApps": {
  1139                  "description": "A list of applications to be installed alongside the main app. Applications can be defined as a local path or a remote url. If a remote url is defined, the app will be downloaded to a local temp directory before uploading to the SauceLabs Mobile App Storage service. Supports environment variables as values.",
  1140                  "type": "array",
  1141                  "maxItems": 7
  1142                }
  1143              },
  1144              "required": [
  1145                "app",
  1146                "testApp"
  1147              ],
  1148              "additionalProperties": false
  1149            },
  1150            "suites": {
  1151              "description": "The set of properties providing details about the test suites to run.",
  1152              "type": "array",
  1153              "minItems": 1,
  1154              "items": {
  1155                "type": "object",
  1156                "properties": {
  1157                  "name": {
  1158                    "description": "The name of the test suite, which will be reflected in the test results in Sauce Labs.",
  1159                    "type": "string"
  1160                  },
  1161                  "testApp": {
  1162                    "description": "Local path or remote url to the test application. If a remote url is defined, the app will be downloaded to a local temp directory before uploading to the SauceLabs Mobile App Storage service. Supports environment variables as values.",
  1163                    "type": "string"
  1164                  },
  1165                  "testAppDescription": {
  1166                    "description": "Description for the testApp",
  1167                    "type": "string"
  1168                  },
  1169                  "testOptions": {
  1170                    "description": "Allows you to control various details on how tests are executed.",
  1171                    "type": "object",
  1172                    "properties": {
  1173                      "class": {
  1174                        "description": "Only run the specified classes.",
  1175                        "type": "array"
  1176                      },
  1177                      "notClass": {
  1178                        "description": "Run all classes except those specified here.",
  1179                        "type": "array"
  1180                      },
  1181                      "func": {
  1182                        "description": "Run all test classes that extend InstrumentationTestCase.",
  1183                        "type": "boolean"
  1184                      },
  1185                      "unit": {
  1186                        "description": "Run all test classes that do not extend either InstrumentationTestCase or PerformanceTestCase.",
  1187                        "type": "boolean"
  1188                      },
  1189                      "perf": {
  1190                        "description": "Run all test classes that extend PerformanceTestCase.",
  1191                        "type": "boolean"
  1192                      },
  1193                      "package": {
  1194                        "description": "Only run tests in the specified package.",
  1195                        "type": "string"
  1196                      },
  1197                      "notPackage": {
  1198                        "description": "Run all tests except those in this package.",
  1199                        "type": "string"
  1200                      },
  1201                      "size": {
  1202                        "description": "Run only tests that are annotated with the matching size value.",
  1203                        "enum": [
  1204                          "small",
  1205                          "medium",
  1206                          "large"
  1207                        ]
  1208                      },
  1209                      "annotation": {
  1210                        "description": "Only run tests with this annotation.",
  1211                        "type": "string"
  1212                      },
  1213                      "notAnnotation": {
  1214                        "description": "Run all tests except those with this annotation.",
  1215                        "type": "string"
  1216                      },
  1217                      "filter": {
  1218                        "description": "Only run tests that pass all of the custom filters.",
  1219                        "type": "array",
  1220                        "examples": [
  1221                          [
  1222                            "com.android.foo.MyCustomFilter",
  1223                            "com.android.foo.MyOtherCustomFilter"
  1224                          ]
  1225                        ]
  1226                      },
  1227                      "runnerBuilder": {
  1228                        "description": "Use custom builders to run tests.",
  1229                        "type": "array",
  1230                        "examples": [
  1231                          [
  1232                            "com.android.foo.MyCustomBuilder",
  1233                            "com.android.foo.MyOtherCustomBuilder"
  1234                          ]
  1235                        ]
  1236                      },
  1237                      "listener": {
  1238                        "description": "Observe the test run with one or more RunListener.",
  1239                        "type": "array",
  1240                        "examples": [
  1241                          [
  1242                            "com.android.foo.MyRunListener",
  1243                            "com.android.foo.MyOtherRunListener"
  1244                          ]
  1245                        ]
  1246                      },
  1247                      "newRunListenerMode": {
  1248                        "description": "Use the new list of RunListeners during a test run.",
  1249                        "type": "boolean"
  1250                      },
  1251                      "numShards": {
  1252                        "description": "When sharding is configured, saucectl automatically creates the sharded jobs for each of the devices defined for the suite based on the number of shards you specify. For example, for a suite testing a single emulator version that specifies 2 shards, saucectl clones the suite and runs one shard index on the first suite, and the other shard index on the identical clone suite.",
  1253                        "type": "integer",
  1254                        "minimum": 0
  1255                      },
  1256                      "clearPackageData": {
  1257                        "description": "Removes all shared states from the testing device's CPU and memory at the completion of each test. Real devices only. Has to be used in conjunction with the 'useTestOrchestrator' flag.",
  1258                        "type": "boolean"
  1259                      },
  1260                      "useTestOrchestrator": {
  1261                        "description": "Run each of your tests in its own Instrumentation instance to remove most of the app's shared state from the device CPU and memory between tests. Real devices only. Use this setting in conjunction with clearPackageData: true to completely remove all shared state.",
  1262                        "type": "boolean"
  1263                      }
  1264                    },
  1265                    "dependencies": {
  1266                      "clearPackageData": [
  1267                        "useTestOrchestrator"
  1268                      ]
  1269                    },
  1270                    "additionalProperties": true
  1271                  },
  1272                  "emulators": {
  1273                    "description": "Defines details for running this suite on virtual devices using an emulator.",
  1274                    "type": "array",
  1275                    "items": {
  1276                      "properties": {
  1277                        "name": {
  1278                          "description": "The name of the emulator. To ensure name accuracy, check the list of supported virtual devices (https://app.saucelabs.com/live/web-testing/virtual).",
  1279                          "type": "string"
  1280                        },
  1281                        "orientation": {
  1282                          "description": "The screen orientation to use.",
  1283                          "enum": [
  1284                            "landscape",
  1285                            "portrait"
  1286                          ]
  1287                        },
  1288                        "platformVersions": {
  1289                          "description": "The set of one or more versions of the device platform on which to run the test suite.",
  1290                          "type": "array",
  1291                          "minItems": 1
  1292                        }
  1293                      },
  1294                      "required": [
  1295                        "name",
  1296                        "platformVersions"
  1297                      ],
  1298                      "additionalProperties": false
  1299                    }
  1300                  },
  1301                  "devices": {
  1302                    "description": "Define details for running this suite on real devices.",
  1303                    "type": "array",
  1304                    "items": {
  1305                      "properties": {
  1306                        "id": {
  1307                          "description": "Request a specific device for this test suite by its ID. You can look up device IDs in the Sauce Labs app or using our Devices API (https://docs.saucelabs.com/dev/api/rdc#get-devices).",
  1308                          "type": "string",
  1309                          "examples": [
  1310                            "Google_Pixel_5_real",
  1311                            "Google_Pixel_5_real_us"
  1312                          ]
  1313                        },
  1314                        "name": {
  1315                          "description": "Match the device name in full or partially (regex), which may provide a larger pool of available devices of the type you want.",
  1316                          "type": "string",
  1317                          "examples": [
  1318                            "Google Pixel .*",
  1319                            "Samsung .*"
  1320                          ]
  1321                        },
  1322                        "platformVersion": {
  1323                          "description": "The version of the Android operating system.",
  1324                          "type": "string"
  1325                        },
  1326                        "options": {
  1327                          "description": "Further specify desired device attributes within the pool of devices that match the name and version criteria.",
  1328                          "type": "object",
  1329                          "properties": {
  1330                            "carrierConnectivity": {
  1331                              "description": "Limit the device selection to those that are connected to a cellular network.",
  1332                              "type": "boolean"
  1333                            },
  1334                            "deviceType": {
  1335                              "description": "Limit the device selection to a specific type of device.",
  1336                              "enum": [
  1337                                "ANY",
  1338                                "PHONE",
  1339                                "TABLET"
  1340                              ]
  1341                            },
  1342                            "private": {
  1343                              "description": "Limit the device selection to only match from your organization's private pool.",
  1344                              "type": "boolean"
  1345                            }
  1346                          },
  1347                          "additionalProperties": false
  1348                        }
  1349                      },
  1350                      "oneOf": [
  1351                        {
  1352                          "required": [
  1353                            "id"
  1354                          ]
  1355                        },
  1356                        {
  1357                          "required": [
  1358                            "name"
  1359                          ]
  1360                        }
  1361                      ],
  1362                      "additionalProperties": false
  1363                    }
  1364                  },
  1365                  "timeout": {
  1366                    "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
  1367                  },
  1368                  "appSettings": {
  1369                    "description": "Overwrite real device settings.",
  1370                    "type": "object",
  1371                    "properties": {
  1372                      "audioCapture": {
  1373                        "description": "Overwrite app settings for real device to capture audio.",
  1374                        "type": "boolean"
  1375                      },
  1376                      "instrumentation": {
  1377                        "description": "Overwrite app settings for real device instrumentation.",
  1378                        "type": "object",
  1379                        "properties": {
  1380                          "networkCapture": {
  1381                            "description": "Overwrite app settings for real device to capture network.",
  1382                            "type": "boolean"
  1383                          }
  1384                        }
  1385                      }
  1386                    }
  1387                  },
  1388                  "passThreshold": {
  1389                    "$ref": "#/allOf/0/then/properties/suites/items/properties/passThreshold"
  1390                  },
  1391                  "smartRetry": {
  1392                    "$ref": "#/allOf/0/then/properties/suites/items/properties/smartRetry"
  1393                  }
  1394                },
  1395                "anyOf": [
  1396                  {
  1397                    "required": [
  1398                      "emulators"
  1399                    ]
  1400                  },
  1401                  {
  1402                    "required": [
  1403                      "devices"
  1404                    ]
  1405                  }
  1406                ],
  1407                "required": [
  1408                  "name"
  1409                ],
  1410                "additionalProperties": false
  1411              }
  1412            }
  1413          },
  1414          "required": [
  1415            "apiVersion",
  1416            "kind",
  1417            "espresso",
  1418            "suites"
  1419          ],
  1420          "additionalProperties": true
  1421        }
  1422      },
  1423      {
  1424        "if": {
  1425          "properties": {
  1426            "kind": {
  1427              "const": "playwright"
  1428            }
  1429          }
  1430        },
  1431        "then": {
  1432          "$schema": "https://json-schema.org/draft/2020-12/schema",
  1433          "title": "saucectl playwright runner configuration",
  1434          "description": "Configuration file for playwright using saucectl",
  1435          "type": "object",
  1436          "allOf": [
  1437            {
  1438              "$ref": "#/allOf/0/then/allOf/0"
  1439            },
  1440            {
  1441              "$ref": "#/allOf/0/then/allOf/1"
  1442            },
  1443            {
  1444              "$ref": "#/allOf/0/then/allOf/2"
  1445            },
  1446            {
  1447              "$ref": "#/allOf/0/then/allOf/3"
  1448            }
  1449          ],
  1450          "properties": {
  1451            "apiVersion": {
  1452              "const": "v1alpha"
  1453            },
  1454            "kind": {
  1455              "const": "playwright"
  1456            },
  1457            "showConsoleLog": {
  1458              "$ref": "#/allOf/0/then/properties/showConsoleLog"
  1459            },
  1460            "defaults": {
  1461              "description": "Settings that are applied onto every suite by default, if no value is set on a suite explicitly.",
  1462              "type": "object",
  1463              "properties": {
  1464                "timeout": {
  1465                  "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
  1466                }
  1467              },
  1468              "additionalProperties": false
  1469            },
  1470            "env": {
  1471              "$ref": "#/allOf/0/then/properties/env"
  1472            },
  1473            "rootDir": {
  1474              "$ref": "#/allOf/0/then/properties/rootDir"
  1475            },
  1476            "playwright": {
  1477              "description": "Contains details specific to the Playwright project.",
  1478              "type": "object",
  1479              "properties": {
  1480                "version": {
  1481                  "$ref": "#/allOf/8/then/properties/playwright/properties/version",
  1482                  "enum": [
  1483                    "package.json",
  1484                    "1.43.1",
  1485                    "1.41.2",
  1486                    "1.41.0",
  1487                    "1.40.1",
  1488                    "1.39.0",
  1489                    "1.38.1",
  1490                    "1.37.1",
  1491                    "1.36.2",
  1492                    "1.35.1",
  1493                    "1.33.0"
  1494                  ]
  1495                },
  1496                "configFile": {
  1497                  "description": "The path to playwright config file",
  1498                  "type": "string"
  1499                }
  1500              },
  1501              "required": [
  1502                "version"
  1503              ],
  1504              "additionalProperties": false
  1505            },
  1506            "suites": {
  1507              "description": "The set of properties providing details about the test suites to run.",
  1508              "type": "array",
  1509              "minItems": 1,
  1510              "items": {
  1511                "type": "object",
  1512                "properties": {
  1513                  "name": {
  1514                    "description": "The name of the test suite, which will be reflected in the test results in Sauce Labs.",
  1515                    "type": "string"
  1516                  },
  1517                  "playwrightVersion": {
  1518                    "$ref": "#/allOf/8/then/properties/playwright/properties/version"
  1519                  },
  1520                  "testMatch": {
  1521                    "description": "Paths to the playwright test files. Regex values are supported to indicate all files of a certain type or in a certain directory, etc.",
  1522                    "type": "array"
  1523                  },
  1524                  "excludedTestFiles": {
  1525                    "description": "Exclude test files to skip the tests.",
  1526                    "type": "array"
  1527                  },
  1528                  "platformName": {
  1529                    "$ref": "#/allOf/4/then/properties/suites/items/properties/platform",
  1530                    "enum": [
  1531                      "macOS 11.00",
  1532                      "macOS 12",
  1533                      "macOS 13",
  1534                      "Windows 10",
  1535                      "Windows 11"
  1536                    ]
  1537                  },
  1538                  "params": {
  1539                    "description": "Details any additional parameters you wish to set for the test suite.",
  1540                    "type": "object",
  1541                    "properties": {
  1542                      "browserName": {
  1543                        "$ref": "#/allOf/8/then/properties/suites/items/properties/browserName",
  1544                        "enum": [
  1545                          "chromium",
  1546                          "firefox",
  1547                          "webkit",
  1548                          "chrome"
  1549                        ]
  1550                      },
  1551                      "headless": {
  1552                        "description": "Run tests in headless mode.",
  1553                        "type": "boolean"
  1554                      },
  1555                      "globalTimeout": {
  1556                        "description": "Total timeout in milliseconds for the whole test run.",
  1557                        "type": "integer"
  1558                      },
  1559                      "timeout": {
  1560                        "description": "Changes the timeout for the test (milliseconds).",
  1561                        "type": "integer"
  1562                      },
  1563                      "grep": {
  1564                        "description": "Patterns to run tests based on their title.",
  1565                        "type": "string"
  1566                      },
  1567                      "grepInvert": {
  1568                        "description": "Patterns to skip tests based on their title.",
  1569                        "type": "string"
  1570                      },
  1571                      "repeatEach": {
  1572                        "description": "The number of times to repeat each test.",
  1573                        "type": "integer",
  1574                        "minimum": 0
  1575                      },
  1576                      "retries": {
  1577                        "description": "The maximum number of retry attempts given to failed tests.",
  1578                        "type": "integer",
  1579                        "minimum": 0
  1580                      },
  1581                      "maxFailures": {
  1582                        "description": "The maximum number of test failures for this test run. After reaching this number, testing will stop and exit with an error. Setting to zero (default) disables this behavior.",
  1583                        "type": "integer",
  1584                        "minimum": 0
  1585                      },
  1586                      "project": {
  1587                        "description": "Specify playwright project",
  1588                        "type": "string"
  1589                      },
  1590                      "updateSnapshots": {
  1591                        "description": "Whether to update expected snapshots with the actual results produced by the test run",
  1592                        "type": "boolean"
  1593                      },
  1594                      "workers": {
  1595                        "description": "Set the maximum number of parallel worker processes (default: 1)",
  1596                        "type": "integer",
  1597                        "minimum": 1
  1598                      }
  1599                    },
  1600                    "required": [
  1601                      "browserName"
  1602                    ]
  1603                  },
  1604                  "screenResolution": {
  1605                    "$ref": "#/allOf/0/then/properties/suites/items/properties/screenResolution"
  1606                  },
  1607                  "env": {
  1608                    "$ref": "#/allOf/0/then/properties/env"
  1609                  },
  1610                  "numShards": {
  1611                    "description": "When sharding is configured, saucectl automatically creates the sharded jobs based on the number of shards you specify. For example, for a suite that specifies 2 shards, saucectl clones the suite and runs shard 1/2 on the first suite, and the other shard 2/2 on the identical clone suite.",
  1612                    "type": "integer",
  1613                    "minimum": 0
  1614                  },
  1615                  "shard": {
  1616                    "description": "When sharding is configured, saucectl automatically splits the tests (e.g. by spec or concurrency) so that they can easily run in parallel.",
  1617                    "enum": [
  1618                      "",
  1619                      "concurrency",
  1620                      "spec"
  1621                    ]
  1622                  },
  1623                  "shardGrepEnabled": {
  1624                    "description": "When sharding is configured and the suite is configured to filter using grep/grepInvert, let saucectl filter specs before executing.",
  1625                    "type": "boolean"
  1626                  },
  1627                  "timeout": {
  1628                    "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
  1629                  },
  1630                  "preExec": {
  1631                    "$ref": "#/allOf/0/then/properties/suites/items/properties/preExec"
  1632                  },
  1633                  "timeZone": {
  1634                    "$ref": "#/allOf/0/then/properties/suites/items/properties/timeZone"
  1635                  },
  1636                  "passThreshold": {
  1637                    "$ref": "#/allOf/0/then/properties/suites/items/properties/passThreshold"
  1638                  },
  1639                  "smartRetry": {
  1640                    "$ref": "#/allOf/0/then/properties/suites/items/properties/smartRetry"
  1641                  }
  1642                },
  1643                "required": [
  1644                  "name",
  1645                  "params",
  1646                  "testMatch"
  1647                ],
  1648                "additionalProperties": false
  1649              }
  1650            }
  1651          },
  1652          "required": [
  1653            "apiVersion",
  1654            "kind",
  1655            "playwright",
  1656            "suites"
  1657          ],
  1658          "additionalProperties": true
  1659        }
  1660      },
  1661      {
  1662        "if": {
  1663          "properties": {
  1664            "kind": {
  1665              "const": "puppeteer-replay"
  1666            }
  1667          }
  1668        },
  1669        "then": {
  1670          "$schema": "https://json-schema.org/draft/2020-12/schema",
  1671          "title": "saucectl puppeteer-replay runner configuration",
  1672          "description": "Configuration file for puppeteer-replay using saucectl",
  1673          "type": "object",
  1674          "allOf": [
  1675            {
  1676              "$ref": "#/allOf/0/then/allOf/0"
  1677            },
  1678            {
  1679              "$ref": "#/allOf/0/then/allOf/2"
  1680            }
  1681          ],
  1682          "properties": {
  1683            "apiVersion": {
  1684              "const": "v1alpha"
  1685            },
  1686            "kind": {
  1687              "const": "puppeteer-replay"
  1688            },
  1689            "showConsoleLog": {
  1690              "$ref": "#/allOf/0/then/properties/showConsoleLog"
  1691            },
  1692            "defaults": {
  1693              "description": "Settings that are applied onto every suite by default, if no value is set on a suite explicitly.",
  1694              "type": "object",
  1695              "properties": {
  1696                "timeout": {
  1697                  "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
  1698                }
  1699              },
  1700              "additionalProperties": false
  1701            },
  1702            "suites": {
  1703              "description": "The set of properties providing details about the test suites to run.",
  1704              "type": "array",
  1705              "minItems": 1,
  1706              "items": {
  1707                "type": "object",
  1708                "properties": {
  1709                  "name": {
  1710                    "description": "The name of the test suite, which will be reflected in the test results in Sauce Labs.",
  1711                    "type": "string"
  1712                  },
  1713                  "recordings": {
  1714                    "description": "Relative paths to the chrome devtools recordings.",
  1715                    "type": "array"
  1716                  },
  1717                  "browserName": {
  1718                    "$ref": "#/allOf/8/then/properties/suites/items/properties/browserName",
  1719                    "enum": [
  1720                      "chrome"
  1721                    ]
  1722                  },
  1723                  "browserVersion": {
  1724                    "$ref": "#/allOf/0/then/properties/suites/items/properties/browserVersion"
  1725                  },
  1726                  "platform": {
  1727                    "enum": [
  1728                      "macOS 11.00",
  1729                      "macOS 12",
  1730                      "macOS 13",
  1731                      "Windows 10",
  1732                      "Windows 11"
  1733                    ],
  1734                    "description": "A specific operating system on which to run the tests. Sauce Labs will try to choose a reasonable default if not explicitly specified."
  1735                  },
  1736                  "timeout": {
  1737                    "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
  1738                  },
  1739                  "passThreshold": {
  1740                    "$ref": "#/allOf/0/then/properties/suites/items/properties/passThreshold"
  1741                  }
  1742                },
  1743                "required": [
  1744                  "name",
  1745                  "recordings"
  1746                ],
  1747                "additionalProperties": false
  1748              }
  1749            }
  1750          },
  1751          "required": [
  1752            "apiVersion",
  1753            "kind",
  1754            "suites"
  1755          ],
  1756          "additionalProperties": true
  1757        }
  1758      },
  1759      {
  1760        "if": {
  1761          "properties": {
  1762            "kind": {
  1763              "const": "testcafe"
  1764            }
  1765          }
  1766        },
  1767        "then": {
  1768          "$schema": "https://json-schema.org/draft/2020-12/schema",
  1769          "title": "saucectl testcafe runner configuration",
  1770          "description": "Configuration file for testcafe using saucectl",
  1771          "type": "object",
  1772          "allOf": [
  1773            {
  1774              "$ref": "#/allOf/0/then/allOf/0"
  1775            },
  1776            {
  1777              "$ref": "#/allOf/0/then/allOf/1"
  1778            },
  1779            {
  1780              "$ref": "#/allOf/0/then/allOf/2"
  1781            },
  1782            {
  1783              "$ref": "#/allOf/0/then/allOf/3"
  1784            }
  1785          ],
  1786          "properties": {
  1787            "apiVersion": {
  1788              "const": "v1alpha"
  1789            },
  1790            "kind": {
  1791              "const": "testcafe"
  1792            },
  1793            "showConsoleLog": {
  1794              "$ref": "#/allOf/0/then/properties/showConsoleLog"
  1795            },
  1796            "defaults": {
  1797              "description": "Settings that are applied onto every suite by default, if no value is set on a suite explicitly.",
  1798              "type": "object",
  1799              "properties": {
  1800                "timeout": {
  1801                  "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
  1802                }
  1803              },
  1804              "additionalProperties": false
  1805            },
  1806            "env": {
  1807              "$ref": "#/allOf/0/then/properties/env"
  1808            },
  1809            "rootDir": {
  1810              "$ref": "#/allOf/0/then/properties/rootDir"
  1811            },
  1812            "testcafe": {
  1813              "description": "Contains details specific to the TestCafe project.",
  1814              "type": "object",
  1815              "properties": {
  1816                "version": {
  1817                  "$ref": "#/allOf/8/then/properties/playwright/properties/version",
  1818                  "enum": [
  1819                    "package.json",
  1820                    "3.5.0",
  1821                    "3.4.0",
  1822                    "3.3.0",
  1823                    "3.2.0",
  1824                    "3.0.1",
  1825                    "2.6.2",
  1826                    "2.5.0"
  1827                  ]
  1828                },
  1829                "configFile": {
  1830                  "description": "The TestCafe configuration file.",
  1831                  "type": "string",
  1832                  "examples": [
  1833                    "testcaferc.json",
  1834                    "testcaferc.js",
  1835                    "testcaferc.cjs"
  1836                  ]
  1837                }
  1838              },
  1839              "required": [
  1840                "version"
  1841              ],
  1842              "additionalProperties": false
  1843            },
  1844            "suites": {
  1845              "description": "The set of properties providing details about the test suites to run.",
  1846              "type": "array",
  1847              "minItems": 1,
  1848              "items": {
  1849                "type": "object",
  1850                "properties": {
  1851                  "name": {
  1852                    "description": "The name of the test suite, which will be reflected in the test results in Sauce Labs.",
  1853                    "type": "string"
  1854                  },
  1855                  "browserName": {
  1856                    "$ref": "#/allOf/8/then/properties/suites/items/properties/browserName",
  1857                    "enum": [
  1858                      "chrome",
  1859                      "firefox",
  1860                      "microsoftedge",
  1861                      "safari"
  1862                    ]
  1863                  },
  1864                  "browserVersion": {
  1865                    "$ref": "#/allOf/0/then/properties/suites/items/properties/browserVersion"
  1866                  },
  1867                  "browserArgs": {
  1868                    "description": "Browser specific arguments.",
  1869                    "type": "array",
  1870                    "examples": [
  1871                      [
  1872                        "--no-sandbox"
  1873                      ],
  1874                      [
  1875                        "--disable-features=site-per-process"
  1876                      ]
  1877                    ]
  1878                  },
  1879                  "headless": {
  1880                    "description": "Controls whether or not tests are run in headless mode (default: false)",
  1881                    "type": "boolean"
  1882                  },
  1883                  "platformName": {
  1884                    "$ref": "#/allOf/4/then/properties/suites/items/properties/platform",
  1885                    "enum": [
  1886                      "macOS 11.00",
  1887                      "macOS 12",
  1888                      "macOS 13",
  1889                      "Windows 10",
  1890                      "Windows 11"
  1891                    ]
  1892                  },
  1893                  "assertionTimeout": {
  1894                    "description": "Specifies the time (in milliseconds) TestCafe attempts to successfully execute an assertion if a selector property or a client function was passed as an actual value.",
  1895                    "type": "integer",
  1896                    "minimum": 0
  1897                  },
  1898                  "clientScripts": {
  1899                    "description": "Injects scripts into pages visited during the tests.",
  1900                    "type": "array"
  1901                  },
  1902                  "env": {
  1903                    "$ref": "#/allOf/0/then/properties/env"
  1904                  },
  1905                  "shard": {
  1906                    "description": "When sharding is configured, saucectl automatically splits the tests (e.g. by spec or concurrency) so that they can easily run in parallel.",
  1907                    "enum": [
  1908                      "",
  1909                      "concurrency",
  1910                      "spec"
  1911                    ]
  1912                  },
  1913                  "compilerOptions": {
  1914                    "description": "Specifies the typescript compiler options to be used when running the tests.",
  1915                    "type": "object",
  1916                    "properties": {
  1917                      "typescript": {
  1918                        "description": "Specifies the TypeScript options.",
  1919                        "type": "object",
  1920                        "properties": {
  1921                          "configPath": {
  1922                            "description": "Specifies the path to the TypeScript tsconfig.json file.",
  1923                            "type": "string"
  1924                          },
  1925                          "customCompilerModulePath": {
  1926                            "description": "Specifies the path to a custom TypeScript compiler module.",
  1927                            "type": "string"
  1928                          },
  1929                          "options": {
  1930                            "description": "Specifies TypeScript compiler options. Full reference: https://www.typescriptlang.org/tsconfig#compilerOptions",
  1931                            "type": "object",
  1932                            "additionalProperties": true
  1933                          }
  1934                        }
  1935                      }
  1936                    }
  1937                  },
  1938                  "disablePageCaching": {
  1939                    "description": "Prevents the browser from caching page content.",
  1940                    "type": "boolean"
  1941                  },
  1942                  "disableScreenshots": {
  1943                    "description": "Prevents TestCafe from taking screenshots.",
  1944                    "type": "boolean"
  1945                  },
  1946                  "disableVideo": {
  1947                    "description": "Disable video recording.",
  1948                    "type": "boolean"
  1949                  },
  1950                  "filter": {
  1951                    "description": "Allows you to specify which tests or fixtures to run.",
  1952                    "type": "object",
  1953                    "properties": {
  1954                      "test": {
  1955                        "description": "Runs a test with the specified name.",
  1956                        "type": "string"
  1957                      },
  1958                      "testGrep": {
  1959                        "description": "Runs tests whose names match the specified grep pattern.",
  1960                        "type": "string"
  1961                      },
  1962                      "testMeta": {
  1963                        "description": "Runs tests whose metadata matches the specified key-value pair.",
  1964                        "type": "object"
  1965                      },
  1966                      "fixture": {
  1967                        "description": "Runs a test with the specified fixture name.",
  1968                        "type": "string"
  1969                      },
  1970                      "fixtureGrep": {
  1971                        "description": "Runs tests whose fixture names match the specified grep pattern.",
  1972                        "type": "string"
  1973                      },
  1974                      "fixtureMeta": {
  1975                        "description": "Runs tests whose fixture’s metadata matches the specified key-value pair.",
  1976                        "type": "object"
  1977                      }
  1978                    }
  1979                  },
  1980                  "pageLoadTimeout": {
  1981                    "description": "Specifies the time (in milliseconds) passed after the DOMContentLoaded event, within which TestCafe waits for the window.load event to fire.\n\nAfter the timeout passes or the window.load event is raised (whichever happens first), TestCafe starts the test.",
  1982                    "type": "integer",
  1983                    "minimum": 0
  1984                  },
  1985                  "quarantineMode": {
  1986                    "description": "Enable quarantine mode to eliminate false negatives and detect unstable tests. TestCafe quarantines tests that fail, and repeats them until they yield conclusive results.",
  1987                    "type": "object",
  1988                    "properties": {
  1989                      "successThreshold": {
  1990                        "description": "The number of successful attempts necessary to confirm a test’s success. The option value should be greater than 0.",
  1991                        "type": "integer",
  1992                        "default": 3
  1993                      },
  1994                      "attemptLimit": {
  1995                        "description": "The maximum number of test execution attempts. The option value must be larger than the value of the successThreshold.",
  1996                        "type": "integer",
  1997                        "default": 5
  1998                      }
  1999                    }
  2000                  },
  2001                  "screenResolution": {
  2002                    "$ref": "#/allOf/0/then/properties/suites/items/properties/screenResolution"
  2003                  },
  2004                  "screenshots": {
  2005                    "description": "Allows you to specify the screenshot options.",
  2006                    "type": "object",
  2007                    "properties": {
  2008                      "takeOnFails": {
  2009                        "description": "Specifies that a screenshot should be taken whenever a test fails.",
  2010                        "type": "boolean"
  2011                      },
  2012                      "fullPage": {
  2013                        "description": "Specifies that the full page should be captured, including content that is not visible due to overflow.",
  2014                        "type": "boolean"
  2015                      }
  2016                    },
  2017                    "additionalProperties": false
  2018                  },
  2019                  "selectorTimeout": {
  2020                    "description": "Specifies the time (in milliseconds) within which selectors attempt to return a node.",
  2021                    "type": "integer",
  2022                    "minimum": 0
  2023                  },
  2024                  "ajaxRequestTimeout": {
  2025                    "description": "Specifies wait time (in milliseconds) for fetch/XHR requests.",
  2026                    "type": "integer",
  2027                    "minimum": 0
  2028                  },
  2029                  "pageRequestTimeout": {
  2030                    "description": "Specifies time (in milliseconds) to wait for HTML pages.",
  2031                    "type": "integer",
  2032                    "minimum": 0
  2033                  },
  2034                  "browserInitTimeout": {
  2035                    "description": "Time (in milliseconds) for browsers to connect to TestCafe and report that they are ready to test.",
  2036                    "type": "integer",
  2037                    "minimum": 0
  2038                  },
  2039                  "testExecutionTimeout": {
  2040                    "description": "Maximum test execution time (in milliseconds).",
  2041                    "type": "integer",
  2042                    "minimum": 0
  2043                  },
  2044                  "runExecutionTimeout": {
  2045                    "description": "Maximum test run execution time (in milliseconds).",
  2046                    "type": "integer",
  2047                    "minimum": 0
  2048                  },
  2049                  "simulators": {
  2050                    "description": "Run tests against the simulators defined here.",
  2051                    "type": "array",
  2052                    "items": {
  2053                      "properties": {
  2054                        "name": {
  2055                          "description": "The name of the simulator.",
  2056                          "type": "string",
  2057                          "examples": [
  2058                            "iPhone 12 Simulator"
  2059                          ]
  2060                        },
  2061                        "orientation": {
  2062                          "$ref": "#/allOf/2/then/properties/suites/items/properties/emulators/items/properties/orientation"
  2063                        },
  2064                        "platformName": {
  2065                          "description": "The name of the simulator platform.",
  2066                          "enum": [
  2067                            "iOS"
  2068                          ]
  2069                        },
  2070                        "platformVersions": {
  2071                          "description": "Which platform versions (OS versions) should be used. Multiple values are treated as 'AND', thus tests run across multiple versions.",
  2072                          "type": "array"
  2073                        }
  2074                      },
  2075                      "additionalProperties": false
  2076                    }
  2077                  },
  2078                  "skipJsErrors": {
  2079                    "description": "Determines whether to ignore JavaScript errors on a webpage.",
  2080                    "type": "boolean"
  2081                  },
  2082                  "skipUncaughtErrors": {
  2083                    "description": "Ignores uncaught errors and unhandled promise rejections in test code.",
  2084                    "type": "boolean"
  2085                  },
  2086                  "speed": {
  2087                    "description": "Specifies the test execution speed. Provide a number between 1 (the fastest) and 0.01 (the slowest).",
  2088                    "type": "number",
  2089                    "minimum": 0.01,
  2090                    "maximum": 1
  2091                  },
  2092                  "src": {
  2093                    "description": "Specifies files or directories from which to run tests.",
  2094                    "type": "array"
  2095                  },
  2096                  "stopOnFirstFail": {
  2097                    "description": "Stops a test run if a test fails.",
  2098                    "type": "boolean"
  2099                  },
  2100                  "timeout": {
  2101                    "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
  2102                  },
  2103                  "preExec": {
  2104                    "$ref": "#/allOf/0/then/properties/suites/items/properties/preExec"
  2105                  },
  2106                  "excludedTestFiles": {
  2107                    "$ref": "#/allOf/3/then/properties/suites/items/properties/excludedTestFiles"
  2108                  },
  2109                  "timeZone": {
  2110                    "$ref": "#/allOf/0/then/properties/suites/items/properties/timeZone"
  2111                  },
  2112                  "passThreshold": {
  2113                    "$ref": "#/allOf/0/then/properties/suites/items/properties/passThreshold"
  2114                  },
  2115                  "smartRetry": {
  2116                    "$ref": "#/allOf/0/then/properties/suites/items/properties/smartRetry"
  2117                  }
  2118                },
  2119                "required": [
  2120                  "name",
  2121                  "browserName",
  2122                  "src"
  2123                ],
  2124                "additionalProperties": false
  2125              }
  2126            }
  2127          },
  2128          "required": [
  2129            "apiVersion",
  2130            "kind",
  2131            "testcafe",
  2132            "suites"
  2133          ],
  2134          "additionalProperties": true
  2135        }
  2136      },
  2137      {
  2138        "if": {
  2139          "properties": {
  2140            "kind": {
  2141              "const": "xcuitest"
  2142            }
  2143          }
  2144        },
  2145        "then": {
  2146          "$schema": "https://json-schema.org/draft/2020-12/schema",
  2147          "title": "saucectl xcuitest runner configuration",
  2148          "description": "Configuration file for xcuitest using saucectl",
  2149          "type": "object",
  2150          "allOf": [
  2151            {
  2152              "$ref": "#/allOf/0/then/allOf/2"
  2153            },
  2154            {
  2155              "$ref": "#/allOf/0/then/allOf/0"
  2156            },
  2157            {
  2158              "$ref": "#/allOf/0/then/allOf/3"
  2159            }
  2160          ],
  2161          "properties": {
  2162            "apiVersion": {
  2163              "const": "v1alpha"
  2164            },
  2165            "kind": {
  2166              "const": "xcuitest"
  2167            },
  2168            "showConsoleLog": {
  2169              "$ref": "#/allOf/0/then/properties/showConsoleLog"
  2170            },
  2171            "defaults": {
  2172              "description": "Settings that are applied onto every suite by default, if no value is set on a suite explicitly.",
  2173              "type": "object",
  2174              "properties": {
  2175                "timeout": {
  2176                  "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
  2177                }
  2178              },
  2179              "additionalProperties": false
  2180            },
  2181            "env": {
  2182              "$ref": "#/allOf/0/then/properties/env"
  2183            },
  2184            "xcuitest": {
  2185              "description": "Contains details specific to the XCUITest project.",
  2186              "type": "object",
  2187              "properties": {
  2188                "app": {
  2189                  "description": "Local path or remote url to the application. If a remote url is defined, the app will be downloaded to a local temp directory before uploading to the SauceLabs Mobile App Storage service. Supports environment variables as values.",
  2190                  "type": "string"
  2191                },
  2192                "appDescription": {
  2193                  "description": "Description for the app.",
  2194                  "type": "string"
  2195                },
  2196                "testApp": {
  2197                  "description": "Local path or remote url to the test application. If a remote url is defined, the app will be downloaded to a local temp directory before uploading to the SauceLabs Mobile App Storage service. Supports environment variables as values.",
  2198                  "type": "string"
  2199                },
  2200                "testAppDescription": {
  2201                  "description": "Description for the testApp.",
  2202                  "type": "string"
  2203                },
  2204                "otherApps": {
  2205                  "description": "A list of applications to be installed alongside the main app. Applications can be defined as a local path or a remote url. If a remote url is defined, the app will be downloaded to a local temp directory before uploading to the SauceLabs Mobile App Storage service. Supports environment variables as values. When targeting simulators, a maximum of 2 otherApps is supported.",
  2206                  "type": "array"
  2207                }
  2208              },
  2209              "additionalProperties": false
  2210            },
  2211            "suites": {
  2212              "description": "The set of properties providing details about the test suites to run.",
  2213              "type": "array",
  2214              "minItems": 1,
  2215              "items": {
  2216                "type": "object",
  2217                "properties": {
  2218                  "name": {
  2219                    "description": "The name of the test suite, which will be reflected in the test results in Sauce Labs.",
  2220                    "type": "string"
  2221                  },
  2222                  "app": {
  2223                    "description": "Local path or remote url to the application. If a remote url is defined, the app will be downloaded to a local temp directory before uploading to the SauceLabs Mobile App Storage service. Supports environment variables as values.",
  2224                    "type": "string"
  2225                  },
  2226                  "appDescription": {
  2227                    "description": "Description for the app.",
  2228                    "type": "string"
  2229                  },
  2230                  "testApp": {
  2231                    "description": "Local path or remote url to the test application. If a remote url is defined, the app will be downloaded to a local temp directory before uploading to the SauceLabs Mobile App Storage service. Supports environment variables as values.",
  2232                    "type": "string"
  2233                  },
  2234                  "testAppDescription": {
  2235                    "description": "Description for the testApp.",
  2236                    "type": "string"
  2237                  },
  2238                  "otherApps": {
  2239                    "description": "A list of applications to be installed alongside the main app. Applications can be defined as a local path or a remote url. If a remote url is defined, the app will be downloaded to a local temp directory before uploading to the SauceLabs Mobile App Storage service. Supports environment variables as values. When targeting simulators, a maximum of 2 otherApps is supported.",
  2240                    "type": "array"
  2241                  },
  2242                  "env": {
  2243                    "$ref": "#/allOf/0/then/properties/env"
  2244                  },
  2245                  "testOptions": {
  2246                    "description": "Allows you to control various details on how tests are executed.",
  2247                    "type": "object",
  2248                    "properties": {
  2249                      "class": {
  2250                        "description": "Only run the specified classes.",
  2251                        "type": "array"
  2252                      },
  2253                      "notClass": {
  2254                        "description": "Run all classes except those specified here.",
  2255                        "type": "array"
  2256                      },
  2257                      "testLanguage": {
  2258                        "description": "Specifies ISO 639-1 language during testing. Supported on Simulators only.",
  2259                        "type": "string"
  2260                      },
  2261                      "testRegion": {
  2262                        "description": "Specifies ISO 3166-1 region during testing.",
  2263                        "type": "string"
  2264                      },
  2265                      "testTimeoutsEnabled": {
  2266                        "description": "By default there is no timeout, if enabled, then the timeout is 600 seconds. This can be changed by adding the defaultTestExecutionTimeAllowance value. Supported on Simulators only.",
  2267                        "type": "string",
  2268                        "enum": [
  2269                          "Yes",
  2270                          "No"
  2271                        ]
  2272                      },
  2273                      "maximumTestExecutionTimeAllowance": {
  2274                        "description": "The maximum execution time, in seconds, an individual test is given to execute, regardless of the test's preferred allowance. Supported on Simulators only.",
  2275                        "type": "number"
  2276                      },
  2277                      "defaultTestExecutionTimeAllowance": {
  2278                        "description": "The default execution time, in seconds, an individual test is given to execute if test timeouts are enabled. Supported on Simulators only.",
  2279                        "type": "number"
  2280                      },
  2281                      "statusBarOverrideTime": {
  2282                        "description": "Modify the time displayed on the status bar. Supported on Simulators only.",
  2283                        "type": "string"
  2284                      }
  2285                    },
  2286                    "additionalProperties": false
  2287                  },
  2288                  "appSettings": {
  2289                    "$ref": "#/allOf/2/then/properties/suites/items/properties/appSettings"
  2290                  },
  2291                  "simulators": {
  2292                    "description": "Defines details for running this suite on virtual devices using a simulator.",
  2293                    "type": "array",
  2294                    "items": {
  2295                      "properties": {
  2296                        "name": {
  2297                          "description": "The name of the simulator. To ensure name accuracy, check the list of supported virtual devices (https://app.saucelabs.com/live/web-testing/virtual).",
  2298                          "type": "string"
  2299                        },
  2300                        "orientation": {
  2301                          "$ref": "#/allOf/2/then/properties/suites/items/properties/emulators/items/properties/orientation"
  2302                        },
  2303                        "platformVersions": {
  2304                          "description": "The set of one or more versions of the device platform on which to run the test suite.",
  2305                          "type": "array",
  2306                          "minItems": 1
  2307                        }
  2308                      },
  2309                      "required": [
  2310                        "name",
  2311                        "platformVersions"
  2312                      ],
  2313                      "additionalProperties": false
  2314                    }
  2315                  },
  2316                  "devices": {
  2317                    "description": "Define details for running this suite on real devices.",
  2318                    "type": "array",
  2319                    "items": {
  2320                      "properties": {
  2321                        "id": {
  2322                          "description": "Request a specific device for this test suite by its ID. You can look up device IDs in the Sauce Labs app or using our Devices API (https://docs.saucelabs.com/dev/api/rdc#get-devices).",
  2323                          "type": "string",
  2324                          "examples": [
  2325                            "iPhone_12_Pro_14_real",
  2326                            "iPhone_12_Pro_real_us"
  2327                          ]
  2328                        },
  2329                        "name": {
  2330                          "description": "Match the device name in full or partially (regex), which may provide a larger pool of available devices of the type you want.",
  2331                          "type": "string",
  2332                          "examples": [
  2333                            "iPad .*",
  2334                            "iPhone .*"
  2335                          ]
  2336                        },
  2337                        "platformVersion": {
  2338                          "description": "The version of the iOS operating system.",
  2339                          "type": "string"
  2340                        },
  2341                        "options": {
  2342                          "description": "Further specify desired device attributes within the pool of devices that match the name and version criteria.",
  2343                          "type": "object",
  2344                          "properties": {
  2345                            "carrierConnectivity": {
  2346                              "description": "Limit the device selection to those that are connected to a cellular network.",
  2347                              "type": "boolean"
  2348                            },
  2349                            "deviceType": {
  2350                              "description": "Limit the device selection to a specific type of device.",
  2351                              "enum": [
  2352                                "ANY",
  2353                                "PHONE",
  2354                                "TABLET"
  2355                              ]
  2356                            },
  2357                            "private": {
  2358                              "description": "Limit the device selection to only match from your organization's private pool.",
  2359                              "type": "boolean"
  2360                            }
  2361                          },
  2362                          "additionalProperties": false
  2363                        }
  2364                      },
  2365                      "oneOf": [
  2366                        {
  2367                          "required": [
  2368                            "id"
  2369                          ]
  2370                        },
  2371                        {
  2372                          "required": [
  2373                            "name"
  2374                          ]
  2375                        }
  2376                      ],
  2377                      "additionalProperties": false
  2378                    }
  2379                  },
  2380                  "timeout": {
  2381                    "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
  2382                  },
  2383                  "passThreshold": {
  2384                    "$ref": "#/allOf/0/then/properties/suites/items/properties/passThreshold"
  2385                  },
  2386                  "smartRetry": {
  2387                    "$ref": "#/allOf/0/then/properties/suites/items/properties/smartRetry"
  2388                  },
  2389                  "shard": {
  2390                    "description": "When shard is configured as concurrency, saucectl automatically splits the tests by concurrency so that they can easily run in parallel.",
  2391                    "enum": [
  2392                      "",
  2393                      "concurrency"
  2394                    ]
  2395                  },
  2396                  "testListFile": {
  2397                    "description": "This file containing tests will be used in sharding by concurrency.",
  2398                    "type": "string"
  2399                  }
  2400                },
  2401                "anyOf": [
  2402                  {
  2403                    "required": [
  2404                      "simulators"
  2405                    ]
  2406                  },
  2407                  {
  2408                    "required": [
  2409                      "devices"
  2410                    ]
  2411                  }
  2412                ],
  2413                "required": [
  2414                  "name"
  2415                ],
  2416                "additionalProperties": false
  2417              }
  2418            }
  2419          },
  2420          "required": [
  2421            "apiVersion",
  2422            "kind",
  2423            "suites"
  2424          ],
  2425          "additionalProperties": true
  2426        }
  2427      },
  2428      {
  2429        "if": {
  2430          "properties": {
  2431            "kind": {
  2432              "const": "apitest"
  2433            }
  2434          }
  2435        },
  2436        "then": {
  2437          "$schema": "https://json-schema.org/draft/2020-12/schema",
  2438          "title": "saucectl api testing runner configuration",
  2439          "description": "Configuration file for api testing using saucectl",
  2440          "type": "object",
  2441          "allOf": [
  2442            {
  2443              "$ref": "#/allOf/0/then/allOf/2"
  2444            }
  2445          ],
  2446          "properties": {
  2447            "apiVersion": {
  2448              "const": "v1alpha"
  2449            },
  2450            "kind": {
  2451              "const": "apitest"
  2452            },
  2453            "suites": {
  2454              "description": "The set of properties providing details about the test suites to run.",
  2455              "type": "array",
  2456              "minItems": 1,
  2457              "items": {
  2458                "type": "object",
  2459                "properties": {
  2460                  "name": {
  2461                    "description": "The name of the test suite, which will be reflected in the test results in Sauce Labs.",
  2462                    "type": "string"
  2463                  },
  2464                  "projectName": {
  2465                    "description": "Your project's name.",
  2466                    "type": "string"
  2467                  },
  2468                  "testMatch": {
  2469                    "description": "",
  2470                    "type": "array"
  2471                  },
  2472                  "tests": {
  2473                    "description": "A list of test IDs to run for the project defined by hookId.",
  2474                    "type": "array"
  2475                  },
  2476                  "tags": {
  2477                    "description": "A test tag to run for the project defined by hookId.",
  2478                    "type": "array"
  2479                  },
  2480                  "useRemoteTests": {
  2481                    "description": "Use tests stored in the cloud instead of the local ones.",
  2482                    "type": "boolean"
  2483                  }
  2484                },
  2485                "required": [
  2486                  "projectName",
  2487                  "name"
  2488                ],
  2489                "additionalProperties": false
  2490              }
  2491            }
  2492          },
  2493          "required": [
  2494            "apiVersion",
  2495            "kind",
  2496            "suites"
  2497          ],
  2498          "additionalProperties": true
  2499        }
  2500      },
  2501      {
  2502        "if": {
  2503          "properties": {
  2504            "kind": {
  2505              "const": "playwright-cucumberjs"
  2506            }
  2507          }
  2508        },
  2509        "then": {
  2510          "$schema": "https://json-schema.org/draft/2020-12/schema",
  2511          "title": "saucectl playwright cucumberjs runner configuration",
  2512          "description": "Configuration file for cucumber using saucectl",
  2513          "type": "object",
  2514          "allOf": [
  2515            {
  2516              "$ref": "#/allOf/0/then/allOf/0"
  2517            },
  2518            {
  2519              "$ref": "#/allOf/0/then/allOf/1"
  2520            },
  2521            {
  2522              "$ref": "#/allOf/0/then/allOf/2"
  2523            },
  2524            {
  2525              "$ref": "#/allOf/0/then/allOf/3"
  2526            }
  2527          ],
  2528          "properties": {
  2529            "apiVersion": {
  2530              "const": "v1alpha"
  2531            },
  2532            "kind": {
  2533              "const": "playwright-cucumberjs"
  2534            },
  2535            "showConsoleLog": {
  2536              "$ref": "#/allOf/0/then/properties/showConsoleLog"
  2537            },
  2538            "defaults": {
  2539              "description": "Settings that are applied onto every suite by default, if no value is set on a suite explicitly.",
  2540              "type": "object",
  2541              "properties": {
  2542                "timeout": {
  2543                  "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
  2544                }
  2545              },
  2546              "additionalProperties": false
  2547            },
  2548            "rootDir": {
  2549              "$ref": "#/allOf/0/then/properties/rootDir"
  2550            },
  2551            "playwright": {
  2552              "description": "Contains details specific to the playwright.",
  2553              "type": "object",
  2554              "properties": {
  2555                "version": {
  2556                  "description": "Which framework version to use."
  2557                }
  2558              },
  2559              "required": [
  2560                "version"
  2561              ],
  2562              "additionalProperties": false
  2563            },
  2564            "env": {
  2565              "$ref": "#/allOf/0/then/properties/env"
  2566            },
  2567            "suites": {
  2568              "description": "The set of properties providing details about the test suites to run.",
  2569              "type": "array",
  2570              "minItems": 1,
  2571              "items": {
  2572                "type": "object",
  2573                "properties": {
  2574                  "name": {
  2575                    "description": "The name of the test suite, which will be reflected in the test results in Sauce Labs.",
  2576                    "type": "string"
  2577                  },
  2578                  "browserName": {
  2579                    "description": "The name of the browser in which to run the tests."
  2580                  },
  2581                  "browserVersion": {
  2582                    "$ref": "#/allOf/0/then/properties/suites/items/properties/browserVersion"
  2583                  },
  2584                  "platformName": {
  2585                    "$ref": "#/allOf/4/then/properties/suites/items/properties/platform",
  2586                    "enum": [
  2587                      "macOS 11.00",
  2588                      "macOS 12",
  2589                      "macOS 13",
  2590                      "Windows 10",
  2591                      "Windows 11"
  2592                    ]
  2593                  },
  2594                  "screenResolution": {
  2595                    "$ref": "#/allOf/0/then/properties/suites/items/properties/screenResolution"
  2596                  },
  2597                  "env": {
  2598                    "$ref": "#/allOf/0/then/properties/env"
  2599                  },
  2600                  "options": {
  2601                    "description": "Provides details related to the Cucumberjs test configuration.",
  2602                    "type": "object",
  2603                    "properties": {
  2604                      "config": {
  2605                        "description": "Provides the location of the configuration file.",
  2606                        "type": "string"
  2607                      },
  2608                      "name": {
  2609                        "description": "Regular expressions of which cucumber scenario names should match one of to be run.",
  2610                        "type": "string"
  2611                      },
  2612                      "paths": {
  2613                        "description": "Paths to where your feature files are.",
  2614                        "type": "array"
  2615                      },
  2616                      "excludedTestFiles": {
  2617                        "$ref": "#/allOf/3/then/properties/suites/items/properties/excludedTestFiles"
  2618                      },
  2619                      "backtrace": {
  2620                        "description": "Show the full backtrace for errors.",
  2621                        "type": "boolean"
  2622                      },
  2623                      "require": {
  2624                        "description": "Paths to where your support code is, for CommonJS.",
  2625                        "type": "array"
  2626                      },
  2627                      "import": {
  2628                        "description": "Paths to where your support code is, for ESM.",
  2629                        "type": "array"
  2630                      },
  2631                      "tags": {
  2632                        "description": "Tag expression to filter which scenarios should be run.",
  2633                        "type": "array"
  2634                      },
  2635                      "format": {
  2636                        "description": "Name/path and (optionally) output file path of each formatter to use.",
  2637                        "type": "array"
  2638                      },
  2639                      "formatOptions": {
  2640                        "description": "Options to be provided to cucumber formatters.",
  2641                        "type": "array"
  2642                      },
  2643                      "parallel": {
  2644                        "description": "Run tests in parallel with the given number of worker processes.",
  2645                        "type": "integer"
  2646                      }
  2647                    },
  2648                    "required": [
  2649                      "paths"
  2650                    ]
  2651                  },
  2652                  "shard": {
  2653                    "description": "When sharding is configured, saucectl automatically splits the tests (e.g. by spec or concurrency) so that they can easily run in parallel.",
  2654                    "enum": [
  2655                      "",
  2656                      "concurrency",
  2657                      "spec"
  2658                    ]
  2659                  },
  2660                  "timeout": {
  2661                    "$ref": "#/allOf/9/then/definitions/suite/properties/timeout"
  2662                  },
  2663                  "preExec": {
  2664                    "$ref": "#/allOf/0/then/properties/suites/items/properties/preExec"
  2665                  },
  2666                  "timeZone": {
  2667                    "$ref": "#/allOf/0/then/properties/suites/items/properties/timeZone"
  2668                  },
  2669                  "passThreshold": {
  2670                    "$ref": "#/allOf/0/then/properties/suites/items/properties/passThreshold"
  2671                  },
  2672                  "smartRetry": {
  2673                    "$ref": "#/allOf/0/then/properties/suites/items/properties/smartRetry"
  2674                  }
  2675                },
  2676                "required": [
  2677                  "name"
  2678                ],
  2679                "additionalProperties": false
  2680              }
  2681            }
  2682          },
  2683          "required": [
  2684            "apiVersion",
  2685            "kind",
  2686            "playwright",
  2687            "suites"
  2688          ],
  2689          "additionalProperties": true
  2690        }
  2691      },
  2692      {
  2693        "if": {
  2694          "properties": {
  2695            "kind": {
  2696              "const": "imagerunner"
  2697            }
  2698          }
  2699        },
  2700        "then": {
  2701          "$schema": "https://json-schema.org/draft/2020-12/schema",
  2702          "title": "saucectl image runner configuration",
  2703          "description": "Configuration file for running container images using saucectl",
  2704          "type": "object",
  2705          "definitions": {
  2706            "sauce": {
  2707              "description": "All settings related to how tests are run and identified in the Sauce Labs platform.",
  2708              "type": "object",
  2709              "properties": {
  2710                "region": {
  2711                  "description": "Which Sauce Labs data center to target.",
  2712                  "enum": [
  2713                    "us-west-1",
  2714                    "eu-central-1"
  2715                  ]
  2716                },
  2717                "tunnel": {
  2718                  "description": "SauceCTL supports using Sauce Connect to establish a secure connection when running your tests on Sauce Labs. To do so, launch a tunnel; then provide the identifier in this property.",
  2719                  "properties": {
  2720                    "name": {
  2721                      "description": "The tunnel name.",
  2722                      "type": "string"
  2723                    },
  2724                    "owner": {
  2725                      "description": "The owner (username) of the tunnel. Must be specified if the user that created the tunnel differs from the user that is running the tests.",
  2726                      "type": "string"
  2727                    }
  2728                  },
  2729                  "required": [
  2730                    "name"
  2731                  ],
  2732                  "additionalProperties": false
  2733                }
  2734              }
  2735            },
  2736            "suite": {
  2737              "description": "The set of properties providing details about how to run the container.",
  2738              "type": "object",
  2739              "properties": {
  2740                "name": {
  2741                  "description": "The name of the test suite.",
  2742                  "type": "string"
  2743                },
  2744                "image": {
  2745                  "description": "The name of the container image.",
  2746                  "type": "string"
  2747                },
  2748                "imagePullAuth": {
  2749                  "description": "Container registry credentials for accessing the image.",
  2750                  "type": "object",
  2751                  "properties": {
  2752                    "user": {
  2753                      "description": "The username.",
  2754                      "type": "string"
  2755                    },
  2756                    "token": {
  2757                      "description": "The access token.",
  2758                      "type": "string"
  2759                    }
  2760                  }
  2761                },
  2762                "entrypoint": {
  2763                  "description": "The command line arguments to launch the image with.",
  2764                  "type": "string"
  2765                },
  2766                "files": {
  2767                  "description": "List of files that you'd like saucectl to upload and mount within the container.",
  2768                  "type": "array",
  2769                  "items": {
  2770                    "type": "object",
  2771                    "properties": {
  2772                      "src": {
  2773                        "description": "Path to the local file.",
  2774                        "type": "string"
  2775                      },
  2776                      "dst": {
  2777                        "description": "Path within the container that the file should be mounted at.",
  2778                        "type": "string"
  2779                      }
  2780                    }
  2781                  }
  2782                },
  2783                "artifacts": {
  2784                  "description": "List of file paths within the container to be made available as downloadable artifacts.",
  2785                  "type": "array",
  2786                  "items": {
  2787                    "type": "string"
  2788                  }
  2789                },
  2790                "env": {
  2791                  "description": "Set one or more environment variables.",
  2792                  "type": "object"
  2793                },
  2794                "timeout": {
  2795                  "description": "Instructs how long (in ms, s, m, or h) saucectl should wait for a suite to complete.",
  2796                  "type": "string",
  2797                  "pattern": "^(?:\\d+h)?(?:\\d+m)?(?:\\d+s)?(?:\\d+ms)?$",
  2798                  "examples": [
  2799                    "1h",
  2800                    "10m",
  2801                    "90s"
  2802                  ]
  2803                },
  2804                "workload": {
  2805                  "description": "Sets the kind of workload that is being executed",
  2806                  "enum": [
  2807                    "webdriver",
  2808                    "other"
  2809                  ]
  2810                },
  2811                "resourceProfile": {
  2812                  "description": "Sets the CPU/memory limits of the container. Format is <CPU><level><mem><level>. Default to c1m1.",
  2813                  "pattern": "^c(\\d+)m(\\d+)$",
  2814                  "examples": [
  2815                    "c1m1",
  2816                    "c2m2",
  2817                    "c3m3"
  2818                  ]
  2819                },
  2820                "metadata": {
  2821                  "description": "Supply additional metadata to your runner.",
  2822                  "type": "object"
  2823                },
  2824                "services": {
  2825                  "description": "List of services to run with the suite.",
  2826                  "type": "array",
  2827                  "items": {
  2828                    "$ref": "#/allOf/9/then/definitions/service"
  2829                  }
  2830                }
  2831              },
  2832              "required": [
  2833                "name",
  2834                "workload"
  2835              ]
  2836            },
  2837            "service": {
  2838              "description": "The set of properties providing details about how to run the service container.",
  2839              "type": "object",
  2840              "properties": {
  2841                "name": {
  2842                  "description": "The name of the service.",
  2843                  "type": "string"
  2844                },
  2845                "image": {
  2846                  "description": "The name of the service image.",
  2847                  "type": "string"
  2848                },
  2849                "imagePullAuth": {
  2850                  "description": "Container registry credentials for accessing the service image.",
  2851                  "type": "object",
  2852                  "properties": {
  2853                    "user": {
  2854                      "description": "The username.",
  2855                      "type": "string"
  2856                    },
  2857                    "token": {
  2858                      "description": "The access token.",
  2859                      "type": "string"
  2860                    }
  2861                  }
  2862                },
  2863                "entrypoint": {
  2864                  "description": "The command line arguments to launch the service image with.",
  2865                  "type": "string"
  2866                },
  2867                "files": {
  2868                  "description": "List of files that you'd like saucectl to upload and mount within the service container.",
  2869                  "type": "array",
  2870                  "items": {
  2871                    "type": "object",
  2872                    "properties": {
  2873                      "src": {
  2874                        "description": "Path to the local file.",
  2875                        "type": "string"
  2876                      },
  2877                      "dst": {
  2878                        "description": "Path within the container that the file should be mounted at.",
  2879                        "type": "string"
  2880                      }
  2881                    }
  2882                  }
  2883                },
  2884                "env": {
  2885                  "description": "Set one or more environment variables for the service.",
  2886                  "type": "object"
  2887                },
  2888                "resourceProfile": {
  2889                  "description": "Sets the CPU/memory limits of the service container. Format is <CPU><level><mem><level>. Default to c1m1.",
  2890                  "enum": [
  2891                    "",
  2892                    "c1m1",
  2893                    "c2m2",
  2894                    "c3m3"
  2895                  ]
  2896                }
  2897              },
  2898              "required": [
  2899                "name"
  2900              ]
  2901            },
  2902            "reporters": {
  2903              "description": "Supported saucectl reporters.",
  2904              "type": "object",
  2905              "properties": {
  2906                "json": {
  2907                  "type": "object",
  2908                  "description": "The JSON reporter creates single report of all executed saucectl suites.",
  2909                  "properties": {
  2910                    "enabled": {
  2911                      "description": "Toggles the reporter on/off.",
  2912                      "type": "boolean"
  2913                    },
  2914                    "webhookURL": {
  2915                      "description": "Webhook URL to pass JSON report.",
  2916                      "type": "string"
  2917                    },
  2918                    "filename": {
  2919                      "description": "Filename for the generated JSON report.",
  2920                      "type": "string",
  2921                      "default": "saucectl-report.json"
  2922                    }
  2923                  }
  2924                },
  2925                "additionalProperties": false
  2926              }
  2927            },
  2928            "artifacts": {
  2929              "description": "Manage test output, such as logs, videos, and screenshots.",
  2930              "type": "object",
  2931              "properties": {
  2932                "cleanup": {
  2933                  "description": "Whether to remove all contents of artifacts directory",
  2934                  "type": "boolean"
  2935                },
  2936                "download": {
  2937                  "description": "Settings related to downloading test artifacts from Sauce Labs.",
  2938                  "type": "object",
  2939                  "properties": {
  2940                    "match": {
  2941                      "description": "Specifies which artifacts to download based on whether they match the file pattern provided. Supports the wildcard character '*'.",
  2942                      "type": "array"
  2943                    },
  2944                    "when": {
  2945                      "description": "Specifies when and under what circumstances to download artifacts.",
  2946                      "enum": [
  2947                        "always",
  2948                        "fail",
  2949                        "never",
  2950                        "pass"
  2951                      ]
  2952                    },
  2953                    "directory": {
  2954                      "description": "Specifies the path to the folder in which to download artifacts. A separate subdirectory is generated in this location for each suite.",
  2955                      "type": "string"
  2956                    }
  2957                  },
  2958                  "required": [
  2959                    "when",
  2960                    "match",
  2961                    "directory"
  2962                  ],
  2963                  "additionalProperties": false
  2964                },
  2965                "additionalProperties": false
  2966              }
  2967            }
  2968          },
  2969          "properties": {
  2970            "apiVersion": {
  2971              "const": "v1alpha"
  2972            },
  2973            "kind": {
  2974              "const": "imagerunner"
  2975            },
  2976            "sauce": {
  2977              "$ref": "#/allOf/9/then/definitions/sauce"
  2978            },
  2979            "defaults": {
  2980              "description": "Settings that are applied onto every suite as a default value.",
  2981              "$ref": "#/allOf/9/then/definitions/suite"
  2982            },
  2983            "suites": {
  2984              "description": "List of suites",
  2985              "type": "array",
  2986              "minItems": 1,
  2987              "items": {
  2988                "$ref": "#/allOf/9/then/definitions/suite"
  2989              }
  2990            },
  2991            "reporters": {
  2992              "$ref": "#/allOf/9/then/definitions/reporters"
  2993            }
  2994          },
  2995          "required": [
  2996            "apiVersion",
  2997            "kind",
  2998            "suites"
  2999          ],
  3000          "additionalProperties": true
  3001        }
  3002      }
  3003    ]
  3004  }