{ "type": "object", "properties": { "advancedOptions": { // To keep backward compatibility, but will not list schema for old config options. "properties": { "createSdkPullRequests": { // Should SDK Automation create PR or not. "type": "boolean", "default": true }, "closeIntegrationPR": { // Should SDK Automation close integrationPR to reduce noise. "type": "boolean", "default": true }, "draftIntegrationPR": { // Should SDK Automation create draft integrationPR to reduce noise. "type": "boolean", "default": true }, "generationCallMode": { // If we have multiple related readme.md, should we call generation once with // all the readme.md or should we call generation multiple times and one per readme.md. "type": "string", "enum": [ "one-per-config", "one-for-all-configs" ], "default": "one-for-all-configs" }, "cloneDir": { // SDK clone directory. By default it's name of sdk repo "type": "string" } }, "default": { "createSdkPullRequests": true, "closeIntegrationPR": true, "draftIntegrationPR": true } }, "initOptions": { // Init the environment. Install dependencies. "type": "object", "properties": { "initScript": { // Script to init dependencies. // Param: // initInput.json: Not implemented. Placeholder for input arguments. // initOutput.json: See #initOutput. "$ref": "#/definitions/RunOptions" } }, "default": {} }, "generateOptions": { // Generate the SDK code. "type": "object", "properties": { "generateScript": { // Script to generate the SDK code. // Param: // generateInput.json: See #GenerateInput // generateOutput.json: See #GenerateOutput "$ref": "#/definitions/RunOptions" }, "preprocessDryRunGetPackageName": { // If this options is set to true, generateScript will first run with // "dryRun": true to get package name and related readme.md, // then for each package, checkout the expected branch and launch generateScript. "type": "boolean", "default": false }, "parseGenerateOutput": { // Will this script output to generateOutput.json. // If not, default behavior will be applied that outcome will be // detected automatically based on filename regex search. "type": "boolean", "default": true } }, "default": { "preprocessDryRunGetPackageName": false, "parseGenerateOutput": false } }, "packageOptions": { // Get package folder and build / get changelog "type": "object", "properties": { "packageFolderFromFileSearch": { "oneOf": [ { // If this option is set to object, then package folder will be detected automatically. // based on filename regex search. // This options must be set to object if parseGenerateOutput is false. "type": "object", "properties": { "searchRegex": { // Search algorithm: // For each changed file detected after generation // PotentialPackageFolder = folder of changed file // While PotentialPackageFolder is not root folder of sdk repo: // If PotentialPackageFolder contains a file that matches the searchRegex: // PackageFolder found, break // Else: // PotentialPackageFolder = parent folder of PotentialPackageFolder "type": "string", "format": "regex" }, "packageNamePrefix": { // Prefix to be appended to packageName. // By default packageName will be the folder name of packageFolder "type": "string" } }, "required": [ "searchRegex" ] }, { // If this option is set to false, then package folder will be from generateOutput.json. "const": false } ] }, "buildScript": { // Build the generated sdk. // Param: // Package folder could be a list separated by space if it's from generateOutput.json. "$ref": "#/definitions/RunOptions" }, "changelogScript": { // Changelog generation and breaking-change detection. // Param: // Package folder could be a list separated by space if it's from generateOutput.json. // Expected output from stdout/stderr: Changelog in markdown "allOf": [ { "$ref": "#/definitions/RunOptions" } ], "properties": { "breakingChangeDetect": { // If stdout or stderr matches this in output of changelog tool // then we assume this SDK has breaking change. "$ref": "#/definitions/RunLogFilterOptions" } } }, "breakingChangeLabel": { // Label to be added in spec PR if breaking change is found "type": "string" } }, "default": {} }, "artifactOptions": { "properties": { "artifactPathFromFileSearch": { "oneOf": [ { // If this option is set to object, then artifacts will be detected automatically // based on filename regex search. // This options must be set to object if parseGenerateOutput is false. "type": "object", "properties": { "searchRegex": { // Any file under package folder matching the searchRegex is package artifact. "type": "string", "format": "regex" } }, "required": [ "searchRegex" ] }, { // If this option is set to false, then package folder will be from generateOutput.json "const": false } ] }, "installInstructionScript": { // Generate install instruction that could be shown in spec PR comment (lite version) // or in generated SDK PR (full version). // If generateOutput.json contains installInstruction then this could be skipped. // Param: // installInstructionInput.json: See #InstallInstructionScriptInput . // installInstructionOutput.json: See #InstallInstructionScriptInput . "$ref": "#/definitions/RunOptions" } }, "default": {} } }, "definitions": { "RunOptions": { // Options to run a script and collect log. "type": "object", "properties": { "path": { // Script path related to repo root "type": "string" }, "envs": { // Extra environment variable to be passed to the script. // By default the following envs will be passed: // USER, HOME, PATH, SHELL, PWD (current directory), TMPDIR (dedicated temp folder) "type": "array", "items": { "type": "string" }, "default": [] }, "logPrefix": { // Prefix to be added to SDK Automation log. By default it would be filename of the script. "type": "string" }, "stdout": { // How should SDK Automation handle the script stdout stream "allOf": [ { "$ref": "#/definitions/RunLogOptions" } ] }, "stderr": { // How should SDK Automation handle the script stderr stream "allOf": [ { "$ref": "#/definitions/RunLogOptions" } ], "default": { "scriptWarning": true } }, "exitCode": { "properties": { // How should SDK Automation handle non-zero exitCode. "showInComment": { // Should we show this error in comment. "type": "boolean", "default": true }, "result": { // If script has non-error exitCode how should we mark the script's result. "type": "string", "enum": [ "error", "warning", "ignore" ], "default": "error" } }, "default": { "showInComment": true, "result": "error" } } }, "required": [ "path" ] }, "RunLogOptions": { // How should SDK Automation handle the log stream. "showInComment": { // Should we show this stream in comment. "$ref": "#/definitions/RunLogFilterOptions" }, "scriptError": { // If any line match, assume the script fails. "$ref": "#/definitions/RunLogFilterOptions" }, "scriptWarning": { // If any line match, assume the script warns. "$ref": "#/definitions/RunLogFilterOptions" } }, "RunLogFilterOptions": { "oneOf": [ { // If line of log match this regex then hit "type": "string", "format": "regex" }, { // If set to true, any line of log will hit "type": "boolean" } ], "default": false } } }