{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "/interface/AutoDiscoverReports/1",
  "type": "object",
  "title": "AutoDiscoveryReports",
  "description": "Automatically discover outputs of various tools, such as JUnit test reports, and generate relevant CodeCatalyst reports from them. Auto-discovery helps ensure that reports continue to be generated even if names or paths to discovered outputs change. When new files are added, CodeCatalyst automatically discovers them and produces relevant reports",
  "definitions": {
    "SeverityCounter": {
      "description": "Composite threshold consisting of a severity level and a counter.",
      "type": "object",
      "title": "AutoDiscoveryReportSeverityCounter",
      "additionalProperties": false,
      "properties": {
        "Severity": {
          "description": "Severity level",
          "type": "string",
          "enum": ["CRITICAL", "HIGH", "MEDIUM", "LOW", "INFORMATIONAL"]
        },
        "Number": {
          "type": "integer",
          "minimum": 0
        }
      },
      "required": ["Severity"]
    }
  },
  "properties": {
    "Enabled": {
      "description": "Flag to determine if Auto Discovery for reports is enabled",
      "type": "boolean"
    },
    "ExcludePaths": {
      "description": "Array of paths to exclude while exploring to auto discover reports",
      "items": {
        "description": "Singular path glob to exclude while exploring to auto discover reports",
        "type": "string"
      },
      "minItems": 0,
      "maxItems": 1000,
      "type": "array"
    },
    "IncludePaths": {
      "description": "Array of paths to explore to auto discover reports",
      "items": {
        "description": "Singular path glob to explore for auto discover reports",
        "type": "string"
      },
      "minItems": 0,
      "maxItems": 1000,
      "type": "array"
    },
    "ReportNamePrefix": {
      "description": "Prefix for auto discovered report names",
      "type": "string"
    },
    "SuccessCriteria": {
      "additionalProperties": false,
      "description": "SuccessCriteria for auto discovered reports",
      "properties": {
        "BranchCoverage": {
          "maximum": 100,
          "minimum": 0,
          "type": "number"
        },
        "LineCoverage": {
          "maximum": 100,
          "minimum": 0,
          "type": "number"
        },
        "PassRate": {
          "maximum": 100,
          "minimum": 0,
          "type": "number"
        },
        "Vulnerabilities": {
          "$ref": "#/definitions/SeverityCounter"
        },
        "StaticAnalysisBug": {
          "$ref": "#/definitions/SeverityCounter"
        },
        "StaticAnalysisSecurity": {
          "$ref": "#/definitions/SeverityCounter"
        },
        "StaticAnalysisQuality": {
          "$ref": "#/definitions/SeverityCounter"
        },
        "StaticAnalysisCodeSmell": {
          "$ref": "#/definitions/SeverityCounter"
        },
        "StaticAnalysisOther": {
          "$ref": "#/definitions/SeverityCounter"
        },
        "StaticAnalysisFinding": {
          "$ref": "#/definitions/SeverityCounter"
        }
      },
      "type": "object"
    }
  },
  "additionalProperties": false
}
