{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/uet-buildconfig-json/_shared/latest--2024.1088.18.json",
  "description": "Represents a build configuration for UET, which can be used to specify how to build an Unreal Engine plugin or project, or Unreal Engine itself.",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/RedpointGames/uet-schema/main/2024.1088.18.json",
    "sourceSha256": "18307a90be46bf76fb4b56206fd322cedc4866f5270d073380b7a0202a2aaf56"
  },
  "type": "object",
  "properties": {
    "$schema": true,
    "Type": {
      "description": "Specifies the type of thing that this BuildConfig.json file builds, such as whether this is for building a plugin, project or Unreal Engine itself.",
      "enum": [
        "Project",
        "Plugin",
        "Engine"
      ]
    }
  },
  "required": [
    "Type"
  ],
  "allOf": [
    {
      "if": {
        "properties": {
          "Type": {
            "const": "Project"
          }
        }
      },
      "then": {
        "properties": {
          "Distributions": {
            "description": "A list of distributions.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Specifies how to build, cook, test and deploy an Unreal Engine project.",
              "properties": {
                "Name": {
                  "description": "The name, as passed to the --distribution argument.",
                  "type": "string"
                },
                "FolderName": {
                  "description": "The relative path that the .uproject file is located underneath.",
                  "type": "string"
                },
                "ProjectName": {
                  "description": "The name of the .uproject file underneath the folder, without the .uproject extension.",
                  "type": "string"
                },
                "Prepare": {
                  "description": "Specifies the preparation scripts to run before various steps. You can specify multiple preparation entries.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "description": "A dynamically driven preparation, test or deployment step.",
                    "properties": {
                      "Name": {
                        "description": "The name of the job/step as it would be displayed on a build server. This must be unique amongst all tests defined.",
                        "type": "string"
                      },
                      "Manual": {
                        "description": "If set, this will be emitted as a manual job on build servers. Only applies to deployments. Defaults to false.",
                        "type": "boolean"
                      },
                      "Type": {
                        "enum": [
                          "Custom",
                          "DownloadPlugin"
                        ]
                      }
                    },
                    "required": [
                      "Name"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "Custom"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "Custom"
                          ],
                          "properties": {
                            "DownloadPlugin": false,
                            "Custom": {
                              "properties": {
                                "ScriptPath": {
                                  "description": "The path to the PowerShell script to execute, relative to the repository root.",
                                  "type": "string"
                                },
                                "RunBefore": {
                                  "description": "When to run this preparation step.",
                                  "type": "array",
                                  "items": {
                                    "description": "When to run this preparation step.",
                                    "enum": [
                                      "BuildGraph",
                                      "Compile",
                                      "Stage"
                                    ]
                                  }
                                }
                              },
                              "required": [
                                "ScriptPath",
                                "RunBefore"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      },
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "DownloadPlugin"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "DownloadPlugin"
                          ],
                          "properties": {
                            "Custom": false,
                            "DownloadPlugin": {
                              "properties": {
                                "Sources": {
                                  "description": "An ordered list of sources that the plugin should be obtained from. Only the\nfirst working source will be used.",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "GitUrl": {
                                        "description": "The Git URL to clone the plugin from. Environment variables can be specified\nin the form ${ENV_VAR} and will be replaced. This source will only be selected\nif all the environment variables used in the URL are set.",
                                        "type": "string"
                                      },
                                      "GitRef": {
                                        "description": "The Git ref to checkout. This can be a branch name.",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "GitUrl",
                                      "GitRef"
                                    ],
                                    "additionalProperties": false
                                  }
                                },
                                "FolderName": {
                                  "description": "The name of the folder underneath Plugins where this plugin will be placed.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "Sources",
                                "FolderName"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      }
                    ]
                  }
                },
                "Build": {
                  "type": "object",
                  "properties": {
                    "Editor": {
                      "type": "object",
                      "properties": {
                        "Target": {
                          "description": "The editor target to build.",
                          "type": "string"
                        }
                      },
                      "additionalProperties": false
                    },
                    "Game": {
                      "type": "object",
                      "properties": {
                        "Targets": {
                          "description": "A list of targets to build.",
                          "type": "array",
                          "items": {
                            "description": "A list of targets to build.",
                            "type": "string"
                          }
                        },
                        "Platforms": {
                          "description": "A list of platforms to build the project for.",
                          "type": "array",
                          "items": {
                            "description": "A list of platforms to build the project for.",
                            "type": "string"
                          }
                        },
                        "Configurations": {
                          "description": "If not specified, defaults to [\"Development\", \"Shipping\"].",
                          "type": "array",
                          "items": {
                            "description": "If not specified, defaults to [\"Development\", \"Shipping\"].",
                            "type": "string"
                          }
                        }
                      },
                      "additionalProperties": false
                    },
                    "Client": {
                      "type": "object",
                      "properties": {
                        "Targets": {
                          "description": "A list of targets to build.",
                          "type": "array",
                          "items": {
                            "description": "A list of targets to build.",
                            "type": "string"
                          }
                        },
                        "Platforms": {
                          "description": "A list of platforms to build the project for.",
                          "type": "array",
                          "items": {
                            "description": "A list of platforms to build the project for.",
                            "type": "string"
                          }
                        },
                        "Configurations": {
                          "description": "If not specified, defaults to [\"Development\", \"Shipping\"].",
                          "type": "array",
                          "items": {
                            "description": "If not specified, defaults to [\"Development\", \"Shipping\"].",
                            "type": "string"
                          }
                        }
                      },
                      "additionalProperties": false
                    },
                    "Server": {
                      "type": "object",
                      "properties": {
                        "Targets": {
                          "description": "A list of targets to build.",
                          "type": "array",
                          "items": {
                            "description": "A list of targets to build.",
                            "type": "string"
                          }
                        },
                        "Platforms": {
                          "description": "A list of platforms to build the project for.",
                          "type": "array",
                          "items": {
                            "description": "A list of platforms to build the project for.",
                            "type": "string"
                          }
                        },
                        "Configurations": {
                          "description": "If not specified, defaults to [\"Development\", \"Shipping\"].",
                          "type": "array",
                          "items": {
                            "description": "If not specified, defaults to [\"Development\", \"Shipping\"].",
                            "type": "string"
                          }
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "Tests": {
                  "description": "A list of tests to run for the project.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "description": "A dynamically driven preparation, test or deployment step.",
                    "properties": {
                      "Name": {
                        "description": "The name of the job/step as it would be displayed on a build server. This must be unique amongst all tests defined.",
                        "type": "string"
                      },
                      "Manual": {
                        "description": "If set, this will be emitted as a manual job on build servers. Only applies to deployments. Defaults to false.",
                        "type": "boolean"
                      },
                      "Type": {
                        "enum": [
                          "Automation",
                          "Commandlet",
                          "Custom",
                          "Gauntlet"
                        ]
                      }
                    },
                    "required": [
                      "Name"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "Automation"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "Automation"
                          ],
                          "properties": {
                            "Commandlet": false,
                            "Custom": false,
                            "Gauntlet": false,
                            "Automation": {
                              "properties": {
                                "TestPrefix": {
                                  "description": "Only tests with this prefix will be executed for automation testing.",
                                  "type": "string"
                                },
                                "TargetName": {
                                  "description": "The name of the editor target to run the tests against. If not set, defaults to UnrealEditor.",
                                  "type": "string"
                                },
                                "MinWorkerCount": {
                                  "description": "The minimum number of processes to launch for automation testing on the machine, regardless of available RAM. If not set, defaults to 1.",
                                  "type": "integer"
                                },
                                "TestRunTimeoutMinutes": {
                                  "description": "The timeout in minutes for running the whole automation test suite. If not set, defaults to 5 minutes.",
                                  "type": "integer"
                                },
                                "TestTimeoutMinutes": {
                                  "description": "The timeout in minutes for running an individual test. If not set, no timeout applies.",
                                  "type": "integer"
                                },
                                "TestAttemptCount": {
                                  "description": "The maximum number of times a test should be attempted if it fails. If not set, tests are never retried on failure.",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "TestPrefix"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      },
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "Commandlet"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "Commandlet"
                          ],
                          "properties": {
                            "Automation": false,
                            "Custom": false,
                            "Gauntlet": false,
                            "Commandlet": {
                              "properties": {
                                "Name": {
                                  "description": "The name of the commandlet to run.",
                                  "type": "string"
                                },
                                "AdditionalArguments": {
                                  "description": "Additional command line arguments to pass to Unreal Editor when running the commandlet.",
                                  "type": "array",
                                  "items": {
                                    "description": "Additional command line arguments to pass to Unreal Editor when running the commandlet.",
                                    "type": "string"
                                  }
                                },
                                "LogStartSignal": {
                                  "description": "To detect scenarios where the Unreal Editor stalls between startup and the commandlet\nrunning, you can make your commandlet emit a log when it starts and then set that log\nline here. If the editor doesn't start executing the commandlet code before LogStartTimeoutMinutes\nd,",
                                  "type": "string"
                                },
                                "LogStartTimeoutMinutes": {
                                  "description": "If set, the editor must emit LogStartSignal\nnumber of minutes elapses. If it doesn't, the editor instance is killed and the commandlet test is attempted\nagain, up to TestAttemptCount",
                                  "type": "integer"
                                },
                                "PreStartScriptPath": {
                                  "description": "The path to a PowerShell script to run before the commandlet starts. This can be used\nto prepare the environment for the commandlet to run in, such as terminating processes\nor writing data to the filesystem.\n\nThe pre-start script is passed the following parameters:\n  -EnginePath \"C:\\Path\\To\\UnrealEngine\"\n  -TestProjectPath \"C:\\Path\\To\\UProject\\File.uproject\"",
                                  "type": "string"
                                },
                                "ValidationScriptPath": {
                                  "description": "The path to a PowerShell script which can be used to validate that the commandlet\nperformed the intended behaviour. This script is only run if the editor exits with\na non-zero exit code, and should be used to validate some global state of the\nsystem (such that the commandlet ran a process, or modified files on the filesystem).\n\nThe validation script is passed the following parameters:\n  -EnginePath \"C:\\Path\\To\\UnrealEngine\"\n  -TestProjectPath \"C:\\Path\\To\\UProject\\File.uproject\"",
                                  "type": "string"
                                },
                                "TestAttemptCount": {
                                  "description": "The maximum number of times this commandlet test should be attempted if it fails. If not set, the commandlet is never automatically retried.",
                                  "type": "integer"
                                },
                                "GlobalMutexName": {
                                  "description": "If set, this global mutex is obtained for the duration of the test. This includes the\npre-start and validation scripts. This can be used to ensure that a commandlet that\nimpacts the global environment (like running a process) will not be run concurrently\nacross different build jobs on the same machine.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "Name"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      },
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "Custom"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "Custom"
                          ],
                          "properties": {
                            "Automation": false,
                            "Commandlet": false,
                            "Gauntlet": false,
                            "Custom": {
                              "properties": {
                                "ScriptPath": {
                                  "description": "The path to the test script, relative to the repository root.\nThe script receives the following parameters:\n  -EnginePath \"C:\\Path\\To\\UnrealEngine\"\n  -StageDirectory \"C:\\Path\\To\\UProject\\Saved\\StagedBuilds\"",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "ScriptPath"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      },
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "Gauntlet"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "Gauntlet"
                          ],
                          "properties": {
                            "Automation": false,
                            "Commandlet": false,
                            "Custom": false,
                            "Gauntlet": {
                              "properties": {
                                "Requires": {
                                  "description": "Specifies the configurations and platforms that the Gauntlet tests is dependent on.",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "Type": {
                                        "description": "Specifies the dependency type (Game, Client or Server).",
                                        "enum": [
                                          "Game",
                                          "Client",
                                          "Server"
                                        ]
                                      },
                                      "Target": {
                                        "description": "The target to depend on.",
                                        "type": "string"
                                      },
                                      "Platforms": {
                                        "description": "The platforms to depend on.",
                                        "type": "array",
                                        "items": {
                                          "description": "The platforms to depend on.",
                                          "type": "string"
                                        }
                                      },
                                      "Configuration": {
                                        "description": "The configuration to depend on.",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "Type",
                                      "Target",
                                      "Platforms",
                                      "Configuration"
                                    ],
                                    "additionalProperties": false
                                  }
                                },
                                "ScriptPath": {
                                  "description": "The relative path to the Gauntlet script to execute.",
                                  "type": "string"
                                },
                                "DeviceListPath": {
                                  "description": "The relative path to the device list to use.",
                                  "type": "string"
                                },
                                "TestName": {
                                  "description": "The name of the test to run inside the Gauntlet script.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "ScriptPath",
                                "DeviceListPath",
                                "TestName"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      }
                    ]
                  }
                },
                "Deployments": {
                  "description": "A list of deployments to run for the project.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "description": "A dynamically driven preparation, test or deployment step.",
                    "properties": {
                      "Name": {
                        "description": "The name of the job/step as it would be displayed on a build server. This must be unique amongst all tests defined.",
                        "type": "string"
                      },
                      "Manual": {
                        "description": "If set, this will be emitted as a manual job on build servers. Only applies to deployments. Defaults to false.",
                        "type": "boolean"
                      },
                      "Type": {
                        "enum": [
                          "Custom",
                          "Steam"
                        ]
                      }
                    },
                    "required": [
                      "Name"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "Custom"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "Custom"
                          ],
                          "properties": {
                            "Steam": false,
                            "Custom": {
                              "properties": {
                                "ScriptPath": {
                                  "description": "The path to the custom deployment script.\nThe script receives the following parameters:\n  -EnginePath \"C:\\Path\\To\\UnrealEngine\"\n  -StageDirectory \"C:\\Path\\To\\UProject\\Saved\\StagedBuilds\"\n  -PackageDirectory \"C:\\Path\\To\\UProject\\Saved\\StagedBuilds\\LinuxServer\"\n  -PackageType \"Game\"\n  -PackageTarget \"ExampleOSS\"\n  -PackagePlatform \"Win64\"\n  -PackageConfiguration \"DebugGame\"",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "ScriptPath"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      },
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "Steam"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "Steam"
                          ],
                          "properties": {
                            "Custom": false,
                            "Steam": {
                              "properties": {
                                "AppID": {
                                  "description": "The Steam app ID to deploy to.",
                                  "type": "string"
                                },
                                "DepotID": {
                                  "description": "The Steam depot ID to deploy to.",
                                  "type": "string"
                                },
                                "Channel": {
                                  "description": "The Steam channel to deploy to.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "AppID",
                                "DepotID",
                                "Channel"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      }
                    ]
                  }
                },
                "MobileProvisions": {
                  "description": "A list of mobile provisions to install to the local machine before building this project.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "BundleIdentifierPattern": {
                        "type": "string"
                      },
                      "PublicKeyPemPath": {
                        "type": "string"
                      },
                      "PrivateKeyPasswordlessP12Path": {
                        "type": "string"
                      },
                      "CertificateSigningRequestPath": {
                        "type": "string"
                      },
                      "MobileProvisionPath": {
                        "type": "string"
                      },
                      "AppleProvidedCertificatePath": {
                        "type": "string"
                      },
                      "KeychainPasswordEnvironmentVariable": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "PublicKeyPemPath",
                      "PrivateKeyPasswordlessP12Path",
                      "CertificateSigningRequestPath",
                      "MobileProvisionPath",
                      "AppleProvidedCertificatePath",
                      "KeychainPasswordEnvironmentVariable"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "Name",
                "FolderName",
                "ProjectName"
              ],
              "additionalProperties": false
            }
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "Type": {
            "const": "Plugin"
          }
        }
      },
      "then": {
        "properties": {
          "PluginName": {
            "description": "The name of your plugin. It must be such that \"PluginName/PluginName.uplugin\" exists.",
            "type": "string"
          },
          "Copyright": {
            "type": "object",
            "properties": {
              "Header": {
                "description": "Used for Marketplace submissions and update-copyright command.",
                "type": "string"
              },
              "ExcludePaths": {
                "description": "If set, these files will not have their headers updated during packaging.",
                "type": "array",
                "items": {
                  "description": "If set, these files will not have their headers updated during packaging.",
                  "type": "string"
                }
              }
            },
            "additionalProperties": false
          },
          "Distributions": {
            "description": "A list of distributions.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Specifies how to build, package, test and deploy an Unreal Engine plugin.",
              "properties": {
                "Name": {
                  "description": "The name, as passed to the --distribution argument.",
                  "type": "string"
                },
                "EnvironmentVariables": {
                  "description": "A list of environment variables to set during the build.",
                  "type": "object",
                  "additionalProperties": {
                    "description": "A list of environment variables to set during the build.",
                    "type": "string"
                  }
                },
                "Clean": {
                  "type": "object",
                  "properties": {
                    "Filespecs": {
                      "description": "A list of filespecs that should be cleaned. Use * as a wildcard for a single path component, or ... as a wildcard for multiple path components.",
                      "type": "array",
                      "items": {
                        "description": "A list of filespecs that should be cleaned. Use * as a wildcard for a single path component, or ... as a wildcard for multiple path components.",
                        "type": "string"
                      }
                    }
                  },
                  "additionalProperties": false
                },
                "Prepare": {
                  "description": "Specifies the preparation scripts to run before various steps. You can specify multiple preparation entries.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "description": "A dynamically driven preparation, test or deployment step.",
                    "properties": {
                      "Name": {
                        "description": "The name of the job/step as it would be displayed on a build server. This must be unique amongst all tests defined.",
                        "type": "string"
                      },
                      "Manual": {
                        "description": "If set, this will be emitted as a manual job on build servers. Only applies to deployments. Defaults to false.",
                        "type": "boolean"
                      },
                      "Type": {
                        "enum": [
                          "Custom"
                        ]
                      }
                    },
                    "required": [
                      "Name"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "Custom"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "Custom"
                          ],
                          "properties": {
                            "Custom": {
                              "properties": {
                                "ScriptPath": {
                                  "description": "The path to the PowerShell script to execute, relative to the repository root.",
                                  "type": "string"
                                },
                                "RunBefore": {
                                  "description": "When to run this preparation step.",
                                  "type": "array",
                                  "items": {
                                    "description": "When to run this preparation step.",
                                    "enum": [
                                      "BuildGraph",
                                      "AssembleFinalize",
                                      "Compile"
                                    ]
                                  }
                                }
                              },
                              "required": [
                                "ScriptPath",
                                "RunBefore"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      }
                    ]
                  }
                },
                "Build": {
                  "type": "object",
                  "properties": {
                    "Editor": {
                      "type": "object",
                      "properties": {
                        "Platforms": {
                          "description": "A list of platforms to build the plugin for on the editor target.",
                          "type": "array",
                          "items": {
                            "description": "A list of platforms to build the plugin for on the editor target.",
                            "enum": [
                              "Win64",
                              "Mac",
                              "Linux"
                            ]
                          }
                        }
                      },
                      "additionalProperties": false
                    },
                    "Game": {
                      "type": "object",
                      "properties": {
                        "Platforms": {
                          "description": "A list of platforms to build the plugin for on the target.",
                          "type": "array",
                          "items": {
                            "description": "A list of platforms to build the plugin for on the target.",
                            "type": "string"
                          }
                        },
                        "Configurations": {
                          "description": "If not specified, defaults to [\"Development\", \"Shipping\"].",
                          "type": "array",
                          "items": {
                            "description": "If not specified, defaults to [\"Development\", \"Shipping\"].",
                            "type": "string"
                          }
                        }
                      },
                      "additionalProperties": false
                    },
                    "Client": {
                      "type": "object",
                      "properties": {
                        "Platforms": {
                          "description": "A list of platforms to build the plugin for on the target.",
                          "type": "array",
                          "items": {
                            "description": "A list of platforms to build the plugin for on the target.",
                            "type": "string"
                          }
                        },
                        "Configurations": {
                          "description": "If not specified, defaults to [\"Development\", \"Shipping\"].",
                          "type": "array",
                          "items": {
                            "description": "If not specified, defaults to [\"Development\", \"Shipping\"].",
                            "type": "string"
                          }
                        }
                      },
                      "additionalProperties": false
                    },
                    "Server": {
                      "type": "object",
                      "properties": {
                        "Platforms": {
                          "description": "A list of platforms to build the plugin for on the target.",
                          "type": "array",
                          "items": {
                            "description": "A list of platforms to build the plugin for on the target.",
                            "type": "string"
                          }
                        },
                        "Configurations": {
                          "description": "If not specified, defaults to [\"Development\", \"Shipping\"].",
                          "type": "array",
                          "items": {
                            "description": "If not specified, defaults to [\"Development\", \"Shipping\"].",
                            "type": "string"
                          }
                        }
                      },
                      "additionalProperties": false
                    },
                    "StrictIncludes": {
                      "description": "Forces --strict-includes for builds.",
                      "type": "boolean"
                    }
                  },
                  "additionalProperties": false
                },
                "Tests": {
                  "description": "A list of tests to run for the plugin.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "description": "A dynamically driven preparation, test or deployment step.",
                    "properties": {
                      "Name": {
                        "description": "The name of the job/step as it would be displayed on a build server. This must be unique amongst all tests defined.",
                        "type": "string"
                      },
                      "Manual": {
                        "description": "If set, this will be emitted as a manual job on build servers. Only applies to deployments. Defaults to false.",
                        "type": "boolean"
                      },
                      "Type": {
                        "enum": [
                          "Automation",
                          "Commandlet",
                          "Custom",
                          "Gauntlet",
                          "Downstream"
                        ]
                      }
                    },
                    "required": [
                      "Name"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "Automation"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "Automation"
                          ],
                          "properties": {
                            "Commandlet": false,
                            "Custom": false,
                            "Gauntlet": false,
                            "Downstream": false,
                            "Automation": {
                              "properties": {
                                "TestPrefix": {
                                  "description": "Only tests with this prefix will be executed for automation testing.",
                                  "type": "string"
                                },
                                "Platforms": {
                                  "description": "A list of platforms to execute automation tests on. A set of \"Win64\", \"Mac\" or both.",
                                  "type": "array",
                                  "items": {
                                    "description": "A list of platforms to execute automation tests on. A set of \"Win64\", \"Mac\" or both.",
                                    "enum": [
                                      "Win64",
                                      "Mac"
                                    ]
                                  }
                                },
                                "ConfigFiles": {
                                  "description": "A list of folders whose contents should be copied into the Config folder of the host project used for automation testing. This is used to set configuration if your automation tests require specific configuration values to be set.",
                                  "type": "array",
                                  "items": {
                                    "description": "A list of folders whose contents should be copied into the Config folder of the host project used for automation testing. This is used to set configuration if your automation tests require specific configuration values to be set.",
                                    "type": "string"
                                  }
                                },
                                "MinWorkerCount": {
                                  "description": "The minimum number of processes to launch for automation testing on the machine, regardless of available RAM. If not set, defaults to 1.",
                                  "type": "integer"
                                },
                                "TestRunTimeoutMinutes": {
                                  "description": "The timeout in minutes for running the whole automation test suite. If not set, defaults to 5 minutes.",
                                  "type": "integer"
                                },
                                "TestTimeoutMinutes": {
                                  "description": "The timeout in minutes for running an individual test. If not set, no timeout applies.",
                                  "type": "integer"
                                },
                                "TestAttemptCount": {
                                  "description": "The maximum number of times a test should be attempted if it fails. If not set, tests are never retried on failure.",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "TestPrefix",
                                "Platforms"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      },
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "Commandlet"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "Commandlet"
                          ],
                          "properties": {
                            "Automation": false,
                            "Custom": false,
                            "Gauntlet": false,
                            "Downstream": false,
                            "Commandlet": {
                              "properties": {
                                "Name": {
                                  "description": "The name of the commandlet to run.",
                                  "type": "string"
                                },
                                "AdditionalArguments": {
                                  "description": "Additional command line arguments to pass to Unreal Editor when running the commandlet.",
                                  "type": "array",
                                  "items": {
                                    "description": "Additional command line arguments to pass to Unreal Editor when running the commandlet.",
                                    "type": "string"
                                  }
                                },
                                "Platforms": {
                                  "description": "A list of platforms to execute this commandlet test on. A set of \"Win64\", \"Mac\" or both.",
                                  "type": "array",
                                  "items": {
                                    "description": "A list of platforms to execute this commandlet test on. A set of \"Win64\", \"Mac\" or both.",
                                    "enum": [
                                      "Win64",
                                      "Mac"
                                    ]
                                  }
                                },
                                "LogStartSignal": {
                                  "description": "To detect scenarios where the Unreal Editor stalls between startup and the commandlet\nrunning, you can make your commandlet emit a log when it starts and then set that log\nline here. If the editor doesn't start executing the commandlet code before LogStartTimeoutMinutes\nd,",
                                  "type": "string"
                                },
                                "LogStartTimeoutMinutes": {
                                  "description": "If set, the editor must emit LogStartSignal\nnumber of minutes elapses. If it doesn't, the editor instance is killed and the commandlet test is attempted\nagain, up to TestAttemptCount",
                                  "type": "integer"
                                },
                                "PreStartScriptPath": {
                                  "description": "The path to a PowerShell script to run before the commandlet starts. This can be used\nto prepare the environment for the commandlet to run in, such as terminating processes\nor writing data to the filesystem.\n\nThe pre-start script is passed the following parameters:\n  -EnginePath \"C:\\Path\\To\\UnrealEngine\"\n  -TestProjectPath \"C:\\Path\\To\\UProject\\File.uproject\"",
                                  "type": "string"
                                },
                                "ValidationScriptPath": {
                                  "description": "The path to a PowerShell script which can be used to validate that the commandlet\nperformed the intended behaviour. This script is only run if the editor exits with\na non-zero exit code, and should be used to validate some global state of the\nsystem (such that the commandlet ran a process, or modified files on the filesystem).\n\nThe validation script is passed the following parameters:\n  -EnginePath \"C:\\Path\\To\\UnrealEngine\"\n  -TestProjectPath \"C:\\Path\\To\\UProject\\File.uproject\"",
                                  "type": "string"
                                },
                                "TestAttemptCount": {
                                  "description": "The maximum number of times this commandlet test should be attempted if it fails. If not set, the commandlet is never automatically retried.",
                                  "type": "integer"
                                },
                                "GlobalMutexName": {
                                  "description": "If set, this global mutex is obtained for the duration of the test. This includes the\npre-start and validation scripts. This can be used to ensure that a commandlet that\nimpacts the global environment (like running a process) will not be run concurrently\nacross different build jobs on the same machine.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "Name",
                                "Platforms"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      },
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "Custom"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "Custom"
                          ],
                          "properties": {
                            "Automation": false,
                            "Commandlet": false,
                            "Gauntlet": false,
                            "Downstream": false,
                            "Custom": {
                              "properties": {
                                "TestAgainst": {
                                  "description": "Must be set to either \"TestProject\" or \"PackagedPlugin\".",
                                  "enum": [
                                    "TestProject",
                                    "PackagedPlugin"
                                  ]
                                },
                                "Platforms": {
                                  "description": "A list of platforms to execute custom tests on. A set of \"Win64\", \"Mac\" or both.",
                                  "type": "array",
                                  "items": {
                                    "description": "A list of platforms to execute custom tests on. A set of \"Win64\", \"Mac\" or both.",
                                    "enum": [
                                      "Win64",
                                      "Mac"
                                    ]
                                  }
                                },
                                "ScriptPath": {
                                  "description": "The path to the test script, relative to the repository root.\nIf you are testing against \"TestProject\", then the script receives the following parameters:\n  -EnginePath \"C:\\Path\\To\\UnrealEngine\"\n  -TestProjectPath \"C:\\Path\\To\\UProject\\File.uproject\"\nIf you are testing against \"PackagedPlugin\", then the script receives the following parameters:\n  -EnginePath \"C:\\Path\\To\\UnrealEngine\"\n  -TempPath \"C:\\Path\\To\\TemporaryFolder\"\n  -PackagedPluginPath \"C:\\Path\\To\\PackagedPlugin\"",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "TestAgainst",
                                "Platforms",
                                "ScriptPath"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      },
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "Gauntlet"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "Gauntlet"
                          ],
                          "properties": {
                            "Automation": false,
                            "Commandlet": false,
                            "Custom": false,
                            "Downstream": false,
                            "Gauntlet": {
                              "properties": {
                                "Requires": {
                                  "description": "Specifies the configurations and platforms that the Gauntlet tests is dependent on.",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "Type": {
                                        "description": "Specifies the dependency type (Game, Client or Server).",
                                        "enum": [
                                          "Game",
                                          "Client",
                                          "Server"
                                        ]
                                      },
                                      "Target": {
                                        "description": "The target to depend on.",
                                        "type": "string"
                                      },
                                      "Platforms": {
                                        "description": "The platforms to depend on.",
                                        "type": "array",
                                        "items": {
                                          "description": "The platforms to depend on.",
                                          "type": "string"
                                        }
                                      },
                                      "Configuration": {
                                        "description": "The configuration to depend on.",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "Type",
                                      "Target",
                                      "Platforms",
                                      "Configuration"
                                    ],
                                    "additionalProperties": false
                                  }
                                },
                                "ScriptPath": {
                                  "description": "The relative path to the Gauntlet script to execute.",
                                  "type": "string"
                                },
                                "DeviceListPath": {
                                  "description": "The relative path to the device list to use.",
                                  "type": "string"
                                },
                                "TestName": {
                                  "description": "The name of the test to run inside the Gauntlet script.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "ScriptPath",
                                "DeviceListPath",
                                "TestName"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      },
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "Downstream"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "Downstream"
                          ],
                          "properties": {
                            "Automation": false,
                            "Commandlet": false,
                            "Custom": false,
                            "Gauntlet": false,
                            "Downstream": {
                              "properties": {}
                            }
                          },
                          "type": "object"
                        }
                      }
                    ]
                  }
                },
                "Package": {
                  "type": "object",
                  "properties": {
                    "Marketplace": {
                      "description": "If true, the plugin is packaged for Marketplace submission. If not set, defaults to false.",
                      "type": "boolean"
                    },
                    "OutputFolderName": {
                      "description": "If not set, defaults to \"Packaged\".",
                      "type": "string"
                    },
                    "Filter": {
                      "description": "The path to the FilterPlugin.ini file used for packaging.",
                      "type": "string"
                    }
                  },
                  "additionalProperties": false
                },
                "Deployment": {
                  "description": "Specifies the deployment steps.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "description": "A dynamically driven preparation, test or deployment step.",
                    "properties": {
                      "Name": {
                        "description": "The name of the job/step as it would be displayed on a build server. This must be unique amongst all tests defined.",
                        "type": "string"
                      },
                      "Manual": {
                        "description": "If set, this will be emitted as a manual job on build servers. Only applies to deployments. Defaults to false.",
                        "type": "boolean"
                      },
                      "Type": {
                        "enum": [
                          "BackblazeB2"
                        ]
                      }
                    },
                    "required": [
                      "Name"
                    ],
                    "allOf": [
                      {
                        "if": {
                          "properties": {
                            "Type": {
                              "const": "BackblazeB2"
                            }
                          }
                        },
                        "then": {
                          "required": [
                            "BackblazeB2"
                          ],
                          "properties": {
                            "BackblazeB2": {
                              "properties": {
                                "BucketName": {
                                  "description": "The Backblaze B2 bucket to upload to.",
                                  "type": "string"
                                },
                                "FolderPrefixEnvVar": {
                                  "description": "The environment variable that contains the folder prefix to use when uploading. This should be set on your build server and made available to build jobs.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "BucketName",
                                "FolderPrefixEnvVar"
                              ],
                              "type": "object"
                            }
                          },
                          "type": "object"
                        }
                      }
                    ]
                  }
                },
                "Gauntlet": {
                  "type": "object",
                  "properties": {
                    "ConfigFiles": {
                      "description": "Configuration files to apply to the project that hosts Gauntlet tests.",
                      "type": "array",
                      "items": {
                        "description": "Configuration files to apply to the project that hosts Gauntlet tests.",
                        "type": "string"
                      }
                    }
                  },
                  "required": [
                    "ConfigFiles"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "Name"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "PluginName"
        ],
        "type": "object"
      }
    },
    {
      "if": {
        "properties": {
          "Type": {
            "const": "Engine"
          }
        }
      },
      "then": {
        "properties": {
          "Distributions": {
            "description": "A list of distributions.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "Name": {
                  "type": "string"
                },
                "Source": {
                  "type": "object",
                  "properties": {
                    "Type": {
                      "type": "string"
                    },
                    "Repository": {
                      "type": "string"
                    },
                    "Ref": {
                      "type": "string"
                    },
                    "ConsoleZips": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "required": [
                    "Type",
                    "Repository",
                    "Ref"
                  ],
                  "additionalProperties": false
                },
                "Build": {
                  "type": "object",
                  "properties": {
                    "TargetTypes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "EditorPlatforms": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "Platforms": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "additionalProperties": false
                },
                "Cook": {
                  "type": "object",
                  "properties": {
                    "GenerateDDC": {
                      "type": "boolean"
                    }
                  },
                  "additionalProperties": false
                },
                "Deployment": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "Type": {
                        "type": "string"
                      },
                      "Platform": {
                        "type": "string"
                      },
                      "Target": {
                        "type": "string"
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "MobileProvisions": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "BundleIdentifierPattern": {
                        "type": "string"
                      },
                      "PublicKeyPemPath": {
                        "type": "string"
                      },
                      "PrivateKeyPasswordlessP12Path": {
                        "type": "string"
                      },
                      "CertificateSigningRequestPath": {
                        "type": "string"
                      },
                      "MobileProvisionPath": {
                        "type": "string"
                      },
                      "AppleProvidedCertificatePath": {
                        "type": "string"
                      },
                      "KeychainPasswordEnvironmentVariable": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "PublicKeyPemPath",
                      "PrivateKeyPasswordlessP12Path",
                      "CertificateSigningRequestPath",
                      "MobileProvisionPath",
                      "AppleProvidedCertificatePath",
                      "KeychainPasswordEnvironmentVariable"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  ]
}
