{
  "$schema" : "https://json-schema.org/draft/2020-12/schema",
  "$defs" : {
    "ConfigParamKey" : {
      "type" : "string",
      "pattern" : "^(?=[^=]+$)(?!\\s+$)(.|\\n)+$"
    },
    "EmailAddress" : {
      "type" : "string",
      "pattern" : "^.+@.+$",
      "format" : "gradle-enterprise:email-address",
      "description" : "Internet email address conforming to most of RFC 822 syntax rules and by that allowing a majority of internalized email addresses as well."
    },
    "EncryptedSecret" : {
      "type" : "string",
      "pattern" : "^(?:plain:.+|aes256:(?:\\s*[A-Za-z0-9+/]){16}:(?:\\s*[A-Za-z0-9+/]){16}:(?:(?:\\s*[A-Za-z0-9+/]){4})*(?:(?:\\s*[A-Za-z0-9+/]){2}(?:\\s*=){2}|(?:\\s*[A-Za-z0-9+/]){3}(?:\\s*=))?\\s*)$"
    },
    "HashedSecret" : {
      "type" : "string",
      "pattern" : "^(?:\\s*[A-Za-z0-9+/]){43}(?:\\s*=):(?:(?:\\s*[A-Za-z0-9+/]){4})*(?:(?:\\s*[A-Za-z0-9+/]){2}(?:\\s*=){2}|(?:\\s*[A-Za-z0-9+/]){3}(?:\\s*=))?\\s*$"
    },
    "Map(ConfigParamKey,String)" : {
      "type" : "object",
      "additionalProperties" : {
        "type" : "string"
      },
      "propertyNames" : {
        "$ref" : "#/$defs/ConfigParamKey"
      }
    },
    "Role" : {
      "type" : "object",
      "properties" : {
        "assignToNewExternalUsers" : {
          "type" : "boolean"
        },
        "description" : {
          "type" : [ "string", "null" ]
        },
        "displayName" : {
          "type" : [ "string", "null" ]
        },
        "identityProviderAttributeValue" : {
          "type" : [ "string", "null" ]
        },
        "permissions" : {
          "uniqueItems" : true,
          "type" : "array",
          "items" : {
            "type" : "string",
            "enum" : [ "viewScan", "exportData", "useMcp", "administerAccessControl", "administerEdges", "administerTestDistribution", "administerOperationalSettings", "administerProjects", "administerCache", "generateSupportBundle", "deleteScan", "publishScan", "testDistribution", "predictiveTestSelection", "readCache", "writeCache", "accessAllDataWithOrWithoutAssociatedProject", "readAllBuildData", "accessDataWithoutAssociatedProject", "readCacheWriteCas" ]
          }
        }
      },
      "additionalProperties" : false,
      "minProperties" : 1
    },
    "TimeOfDay" : {
      "type" : "string",
      "pattern" : "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
    },
    "X509CertificateSet-nullable" : {
      "type" : [ "string", "null" ],
      "pattern" : "(?:^|\\r?\\n)-----BEGIN CERTIFICATE-----(?:\\r?\\n)(?:(?:\\s*[A-Za-z0-9+/]){4})*(?:(?:\\s*[A-Za-z0-9+/]){2}(?:\\s*=){2}|(?:\\s*[A-Za-z0-9+/]){3}(?:\\s*=))?\\s*(?:\\r?\\n)-----END CERTIFICATE-----(?:$|\\r?\\n)",
      "format" : "gradle-enterprise:x509-certs-pem"
    }
  },
  "type" : "object",
  "required" : [ "systemPassword", "version" ],
  "description" : "Develocity configuration schema",
  "additionalProperties" : false,
  "minProperties" : 1,
  "properties" : {
    "version" : {
      "const" : 16,
      "description" : "The version of the config file model (must be 16)."
    },
    "advanced" : {
      "type" : "object",
      "properties" : {
        "app" : {
          "type" : "object",
          "properties" : {
            "heapMemory" : {
              "type" : "integer",
              "description" : "The amount of heap memory allocated to the application",
              "minimum" : 100
            },
            "offHeapMemory" : {
              "type" : "integer",
              "description" : "The amount of off-heap memory allocated to the application",
              "minimum" : 100
            },
            "params" : {
              "$ref" : "#/$defs/Map(ConfigParamKey,String)",
              "description" : "Configuration parameters for the application"
            },
            "scanPayloadCacheSize" : {
              "type" : "integer",
              "description" : "The amount of memory for the scan payload event stream cache"
            }
          },
          "additionalProperties" : false,
          "minProperties" : 1
        },
        "appBackgroundProcessor" : {
          "type" : "object",
          "properties" : {
            "heapMemory" : {
              "type" : "integer",
              "description" : "The amount of heap memory allocated to the application",
              "minimum" : 100
            },
            "offHeapMemory" : {
              "type" : "integer",
              "description" : "The amount of off-heap memory allocated to the application",
              "minimum" : 100
            },
            "params" : {
              "$ref" : "#/$defs/Map(ConfigParamKey,String)",
              "description" : "Configuration parameters for the application"
            }
          },
          "additionalProperties" : false,
          "minProperties" : 1
        },
        "distributionBroker" : {
          "type" : "object",
          "properties" : {
            "heapMemory" : {
              "type" : "integer",
              "description" : "The amount of heap memory allocated to the application",
              "minimum" : 100
            },
            "offHeapMemory" : {
              "type" : "integer",
              "description" : "The amount of off-heap memory allocated to the application",
              "minimum" : 100
            },
            "params" : {
              "$ref" : "#/$defs/Map(ConfigParamKey,String)",
              "description" : "Configuration parameters for the application"
            }
          },
          "additionalProperties" : false,
          "minProperties" : 1
        }
      },
      "additionalProperties" : false,
      "minProperties" : 1
    },
    "auth" : {
      "type" : "object",
      "properties" : {
        "anonymousPermissions" : {
          "description" : "Permissions to assign to anonymous users - does not support administerAccessControl, administerEdges, administerTestDistribution, administerOperationalSettings, administerCache, administerProjects, or testDistribution",
          "uniqueItems" : true,
          "type" : "array",
          "items" : {
            "type" : "string",
            "enum" : [ "viewScan", "exportData", "useMcp", "administerAccessControl", "administerEdges", "administerTestDistribution", "administerOperationalSettings", "administerProjects", "administerCache", "generateSupportBundle", "deleteScan", "publishScan", "testDistribution", "predictiveTestSelection", "readCache", "writeCache", "accessAllDataWithOrWithoutAssociatedProject", "readAllBuildData", "accessDataWithoutAssociatedProject", "readCacheWriteCas" ]
          }
        },
        "certificate" : {
          "type" : [ "object", "null" ],
          "properties" : {
            "trustedCAs" : {
              "$ref" : "#/$defs/X509CertificateSet-nullable",
              "description" : "Certificates to use as trust anchors for validating agent client certificates"
            }
          },
          "additionalProperties" : false,
          "minProperties" : 1,
          "description" : "Configuration for certificate-based authentication"
        },
        "external" : {
          "anyOf" : [ {
            "type" : "null"
          }, {
            "type" : "object",
            "properties" : {
              "type" : {
                "enum" : [ "ldap", "saml" ]
              }
            },
            "required" : [ "type" ],
            "allOf" : [ {
              "if" : {
                "properties" : {
                  "type" : {
                    "const" : "ldap"
                  }
                }
              },
              "then" : {
                "type" : "object",
                "required" : [ "connectionUrl", "displayName", "roles", "users" ],
                "additionalProperties" : false,
                "minProperties" : 1,
                "properties" : {
                  "type" : {
                    "const" : "ldap"
                  },
                  "bindUser" : {
                    "type" : [ "object", "null" ],
                    "properties" : {
                      "dn" : {
                        "type" : "string",
                        "description" : "Distinguished name for the LDAP user account"
                      },
                      "password" : {
                        "$ref" : "#/$defs/EncryptedSecret",
                        "description" : "Password for the LDAP user account"
                      }
                    },
                    "required" : [ "dn", "password" ],
                    "additionalProperties" : false,
                    "minProperties" : 1,
                    "description" : "Binding information used when LDAP requires authentication"
                  },
                  "connectionUrl" : {
                    "type" : "string",
                    "description" : "URL used to connect to LDAP server"
                  },
                  "displayName" : {
                    "type" : "string",
                    "description" : "Name of this identity provider configuration"
                  },
                  "roles" : {
                    "allOf" : [ {
                      "if" : {
                        "properties" : {
                          "type" : {
                            "const" : "external"
                          }
                        }
                      },
                      "then" : {
                        "type" : "object",
                        "required" : [ "baseDn", "membershipAttribute", "membershipAttributeType", "nameAttribute", "objectClass" ],
                        "additionalProperties" : false,
                        "minProperties" : 1,
                        "properties" : {
                          "type" : {
                            "const" : "external"
                          },
                          "baseDn" : {
                            "type" : "string",
                            "description" : "Base DN for the subtree holding roles"
                          },
                          "membershipAttribute" : {
                            "type" : "string",
                            "description" : "Name of the LDAP attribute holding role membership"
                          },
                          "membershipAttributeType" : {
                            "type" : "string",
                            "enum" : [ "dn", "uid" ],
                            "description" : "Type of the membership-ldap-attribute"
                          },
                          "nameAttribute" : {
                            "type" : "string",
                            "description" : "Name of the LDAP attribute holding the role name"
                          },
                          "objectClass" : {
                            "type" : "string",
                            "description" : "LDAP object classes for roles"
                          },
                          "retrieveStrategy" : {
                            "type" : "string",
                            "enum" : [ "groupMember", "userMemberof", "matchingRuleInChain" ],
                            "description" : "Type of roles retrieve strategy (defaults to GROUP_MEMBER)"
                          }
                        }
                      }
                    }, {
                      "if" : {
                        "properties" : {
                          "type" : {
                            "const" : "local"
                          }
                        }
                      },
                      "then" : {
                        "type" : "object",
                        "additionalProperties" : false,
                        "minProperties" : 1,
                        "properties" : {
                          "type" : {
                            "const" : "local"
                          }
                        }
                      }
                    } ],
                    "type" : "object",
                    "properties" : {
                      "type" : {
                        "enum" : [ "external", "local" ]
                      }
                    },
                    "required" : [ "type" ],
                    "minProperties" : 1,
                    "description" : "Holds information when the identity provider manages roles"
                  },
                  "users" : {
                    "type" : "object",
                    "properties" : {
                      "attributes" : {
                        "type" : "object",
                        "properties" : {
                          "email" : {
                            "type" : "string",
                            "description" : "Name of the LDAP attribute holding email address"
                          },
                          "firstName" : {
                            "type" : "string",
                            "description" : "Name of the LDAP attribute holding first name"
                          },
                          "lastName" : {
                            "type" : "string",
                            "description" : "Name of the LDAP attribute holding last name"
                          },
                          "userName" : {
                            "type" : "string",
                            "description" : "Name of the LDAP attribute holding user name"
                          },
                          "uuid" : {
                            "type" : "string",
                            "description" : "Name of the LDAP attribute holding a unique id"
                          }
                        },
                        "required" : [ "email", "firstName", "lastName", "userName", "uuid" ],
                        "additionalProperties" : false,
                        "minProperties" : 1,
                        "description" : "Describes how user attributes are mapped"
                      },
                      "baseDn" : {
                        "type" : "string",
                        "description" : "Base DN for the subtree holding users"
                      },
                      "filter" : {
                        "allOf" : [ {
                          "type" : [ "string", "null" ],
                          "format" : "gradle-enterprise:ldap-filter",
                          "description" : "LDAP search filter expression."
                        }, {
                          "description" : "Optional LDAP filter expression to limit access"
                        } ]
                      }
                    },
                    "required" : [ "attributes", "baseDn" ],
                    "additionalProperties" : false,
                    "minProperties" : 1
                  }
                }
              }
            }, {
              "if" : {
                "properties" : {
                  "type" : {
                    "const" : "saml"
                  }
                }
              },
              "then" : {
                "type" : "object",
                "required" : [ "displayName", "idpMetadata", "roles" ],
                "additionalProperties" : false,
                "minProperties" : 1,
                "properties" : {
                  "type" : {
                    "const" : "saml"
                  },
                  "displayName" : {
                    "type" : "string",
                    "description" : "Name of this identity provider configuration"
                  },
                  "idpMetadata" : {
                    "type" : "string",
                    "pattern" : "^(?:(?:\\s*[A-Za-z0-9+/]){4})*(?:(?:\\s*[A-Za-z0-9+/]){2}(?:\\s*=){2}|(?:\\s*[A-Za-z0-9+/]){3}(?:\\s*=))?\\s*$",
                    "description" : "SAML metadata that describes this identity provider"
                  },
                  "options" : {
                    "type" : "object",
                    "properties" : {
                      "requireEncryptedAssertion" : {
                        "type" : "boolean",
                        "description" : "Encrypt SAML assertions?"
                      },
                      "signAuthenticationRequests" : {
                        "type" : "boolean",
                        "description" : "Sign authentication requests?"
                      },
                      "validateAssertionSignature" : {
                        "type" : "boolean",
                        "description" : "Enable signature validation of SAML assertions?"
                      },
                      "validateResponseSignature" : {
                        "type" : "boolean",
                        "description" : "Enable signature validation of SAML responses?"
                      }
                    },
                    "additionalProperties" : false,
                    "minProperties" : 1,
                    "description" : "Groups all options and is only necessary when one or more needs to be enabled"
                  },
                  "roles" : {
                    "allOf" : [ {
                      "if" : {
                        "properties" : {
                          "type" : {
                            "const" : "external"
                          }
                        }
                      },
                      "then" : {
                        "type" : "object",
                        "required" : [ "attribute" ],
                        "additionalProperties" : false,
                        "minProperties" : 1,
                        "properties" : {
                          "type" : {
                            "const" : "external"
                          },
                          "attribute" : {
                            "type" : "string",
                            "description" : "Name of the SAML attribute holding role names"
                          }
                        }
                      }
                    }, {
                      "if" : {
                        "properties" : {
                          "type" : {
                            "const" : "local"
                          }
                        }
                      },
                      "then" : {
                        "type" : "object",
                        "additionalProperties" : false,
                        "minProperties" : 1,
                        "properties" : {
                          "type" : {
                            "const" : "local"
                          }
                        }
                      }
                    } ],
                    "type" : "object",
                    "properties" : {
                      "type" : {
                        "enum" : [ "external", "local" ]
                      }
                    },
                    "required" : [ "type" ],
                    "minProperties" : 1,
                    "description" : "Holds information when the identity provider manages roles"
                  },
                  "userAttributes" : {
                    "type" : "object",
                    "properties" : {
                      "email" : {
                        "type" : [ "string", "null" ],
                        "description" : "Name of the SAML attribute holding email address"
                      },
                      "firstName" : {
                        "type" : [ "string", "null" ],
                        "description" : "Name of the SAML attribute holding first name"
                      },
                      "lastName" : {
                        "type" : [ "string", "null" ],
                        "description" : "Name of the SAML attribute holding last name"
                      }
                    },
                    "additionalProperties" : false,
                    "minProperties" : 1,
                    "description" : "Describes how user attributes are mapped"
                  }
                }
              }
            } ],
            "minProperties" : 1
          } ]
        },
        "projects" : {
          "type" : "object",
          "properties" : {
            "acceptAnonymousProjects" : {
              "type" : "boolean",
              "description" : "Accept data from builds not associated with a project. Also allows build acceleration features (build caching, test distribution, etc) to work with builds not associated with a project."
            },
            "enabled" : {
              "type" : "boolean",
              "description" : "Enables per-project access control."
            }
          },
          "additionalProperties" : false,
          "minProperties" : 1,
          "description" : "Configuration of project access control related options"
        },
        "roles" : {
          "type" : "object",
          "additionalProperties" : {
            "$ref" : "#/$defs/Role"
          },
          "propertyNames" : {
            "type" : "string"
          }
        },
        "scim" : {
          "type" : "object",
          "properties" : {
            "enabled" : {
              "type" : "boolean",
              "description" : "Whether to allow access to the SCIM API for user and group management"
            },
            "token" : {
              "type" : [ "object", "null" ],
              "properties" : {
                "hash" : {
                  "$ref" : "#/$defs/HashedSecret",
                  "description" : "The hash of the token"
                },
                "length" : {
                  "type" : "integer",
                  "description" : "The length of the token"
                },
                "prefix" : {
                  "type" : "string",
                  "description" : "The prefix of the token"
                }
              },
              "required" : [ "hash", "length", "prefix" ],
              "additionalProperties" : false,
              "minProperties" : 1,
              "description" : "Token to authenticate with the SCIM API"
            }
          },
          "additionalProperties" : false,
          "minProperties" : 1,
          "description" : "Configuration for System for Cross-domain Identity Management (SCIM) support"
        },
        "timeouts" : {
          "type" : "object",
          "properties" : {
            "accessTokenLifespan" : {
              "type" : "integer",
              "description" : "The maximum time before an access token is expired (in minutes), default is 10 minutes"
            },
            "ssoSessionIdleTimeout" : {
              "type" : "integer",
              "description" : "The time a login session is allowed to be idle before it expires (in minutes), default is 1 hour (60 minutes)"
            },
            "ssoSessionMaxLifespan" : {
              "type" : "integer",
              "description" : "The maximum time before a login session is expired (in minutes), default is 1 day (1440 minutes)"
            }
          },
          "additionalProperties" : false,
          "minProperties" : 1,
          "description" : "Timeouts you can specify for user logins in Develocity"
        }
      },
      "additionalProperties" : false,
      "minProperties" : 1,
      "description" : "Configuration of Develocity authentication options"
    },
    "backups" : {
      "type" : [ "object", "null" ],
      "properties" : {
        "backupsToRetain" : {
          "type" : "integer",
          "description" : "How many old backups to keep",
          "minimum" : 1
        },
        "emailNotification" : {
          "type" : "boolean",
          "description" : "Send an email when backup is complete"
        },
        "schedule" : {
          "type" : "object",
          "properties" : {
            "type" : {
              "enum" : [ "daily", "weekly", "cron" ]
            }
          },
          "required" : [ "type" ],
          "allOf" : [ {
            "if" : {
              "properties" : {
                "type" : {
                  "const" : "daily"
                }
              }
            },
            "then" : {
              "type" : "object",
              "required" : [ "timeOfDay" ],
              "additionalProperties" : false,
              "minProperties" : 1,
              "properties" : {
                "type" : {
                  "const" : "daily"
                },
                "timeOfDay" : {
                  "$ref" : "#/$defs/TimeOfDay",
                  "description" : "Time (in UTC) to perform the backup"
                }
              }
            }
          }, {
            "if" : {
              "properties" : {
                "type" : {
                  "const" : "weekly"
                }
              }
            },
            "then" : {
              "type" : "object",
              "required" : [ "dayOfWeek", "timeOfDay" ],
              "additionalProperties" : false,
              "minProperties" : 1,
              "properties" : {
                "type" : {
                  "const" : "weekly"
                },
                "dayOfWeek" : {
                  "type" : "string",
                  "enum" : [ "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday" ],
                  "description" : "Day (in UTC) to perform the backup"
                },
                "timeOfDay" : {
                  "$ref" : "#/$defs/TimeOfDay",
                  "description" : "Time (in UTC) to perform the backup"
                }
              }
            }
          }, {
            "if" : {
              "properties" : {
                "type" : {
                  "const" : "cron"
                }
              }
            },
            "then" : {
              "type" : "object",
              "required" : [ "expression" ],
              "additionalProperties" : false,
              "minProperties" : 1,
              "properties" : {
                "type" : {
                  "const" : "cron"
                },
                "expression" : {
                  "type" : "string",
                  "pattern" : "^(?:\\*|(?:(?:\\*\\/)?[1-5]?[0-9])) (?:\\*|(?:(?:\\*\\/)?(?:1?[0-9]|2[0-3]))) (?:\\*|(?:(?:\\*\\/)?(?:[1-9]|[12][0-9]|3[0-1]))) (?:\\*|(?:(?:\\*\\/)?(?:[1-9]|1[0-2]))) (?:\\*|(?:(?:\\*\\/)?[0-6]))$",
                  "description" : "Custom cron expression for backup time"
                }
              }
            }
          } ],
          "minProperties" : 1
        }
      },
      "required" : [ "schedule" ],
      "additionalProperties" : false,
      "minProperties" : 1,
      "description" : "Automatic backup configuration"
    },
    "buildCache" : {
      "type" : "object",
      "properties" : {
        "allowUntrustedNodeSsl" : {
          "type" : "boolean",
          "description" : "Allow communication with nodes running over untrusted SSL"
        },
        "maxArtifactSize" : {
          "type" : [ "integer", "null" ],
          "description" : "Maximum artifact size the Built-in Build Cache accepts"
        },
        "storageSize" : {
          "type" : "integer",
          "description" : "Total amount of storage in mebibytes reserved for the Built-in Build Cache"
        }
      },
      "additionalProperties" : false,
      "minProperties" : 1,
      "description" : "Configuration specific to the build cache app"
    },
    "buildScans" : {
      "type" : "object",
      "properties" : {
        "diskSpaceMonitoring" : {
          "type" : "object",
          "properties" : {
            "autoDeleteWhileFreeSpaceLessThanPercentage" : {
              "type" : [ "integer", "null" ],
              "description" : "Threshold of free disk space before old scans will be automatically deleted",
              "maximum" : 100,
              "minimum" : 1
            },
            "rejectIncomingWhileFreeSpaceLessThanPercentage" : {
              "type" : [ "integer", "null" ],
              "description" : "Threshold of free disk space before new scans will be rejected",
              "maximum" : 100,
              "minimum" : 1
            },
            "sendWarningEmailWhenFreeSpaceLessThanPercentage" : {
              "type" : [ "integer", "null" ],
              "description" : "Threshold of free disk space before a warning is sent to users publishing a build scan",
              "maximum" : 100,
              "minimum" : 1
            }
          },
          "additionalProperties" : false,
          "minProperties" : 1
        },
        "incomingStorageType" : {
          "anyOf" : [ {
            "type" : "null"
          }, {
            "type" : "string",
            "enum" : [ null, "database", "objectStorage" ],
            "description" : "Storage type of incoming builds"
          } ]
        },
        "keepDays" : {
          "type" : [ "integer", "null" ],
          "description" : "How many days of scans should be retained",
          "minimum" : 2
        }
      },
      "additionalProperties" : false,
      "minProperties" : 1,
      "description" : "Configuration specific to the build scans app"
    },
    "dailyMaintenanceTime" : {
      "$ref" : "#/$defs/TimeOfDay",
      "description" : "Which time (UTC) should retention-cleanup be performed"
    },
    "edge" : {
      "type" : [ "object", "null" ],
      "properties" : {
        "develocityLocationName" : {
          "type" : "string",
          "description" : "Develocity installation location name"
        },
        "edges" : {
          "description" : "Edge configurations",
          "type" : "array",
          "items" : {
            "type" : "object",
            "properties" : {
              "identifier" : {
                "type" : "string",
                "pattern" : "^[a-z0-9-]+$",
                "description" : "Edge unique identifier"
              },
              "locationName" : {
                "type" : "string",
                "description" : "Edge location name"
              },
              "publicAddress" : {
                "type" : "string",
                "description" : "Edge public address"
              }
            },
            "required" : [ "identifier", "locationName", "publicAddress" ],
            "additionalProperties" : false,
            "minProperties" : 1
          }
        },
        "registrationKeys" : {
          "description" : "Edge registration keys",
          "type" : "array",
          "items" : {
            "type" : "object",
            "properties" : {
              "hashedKey" : {
                "$ref" : "#/$defs/HashedSecret",
                "description" : "Hashed Edge registration key secret"
              },
              "keyPrefix" : {
                "type" : [ "string", "null" ],
                "description" : "Prefix of the key's secret, used to connect Edges"
              },
              "title" : {
                "type" : "string",
                "description" : "Title of the registration key"
              }
            },
            "required" : [ "hashedKey", "title" ],
            "additionalProperties" : false,
            "minProperties" : 1
          }
        }
      },
      "additionalProperties" : false,
      "minProperties" : 1,
      "description" : "Edge configuration"
    },
    "email" : {
      "type" : [ "object", "null" ],
      "properties" : {
        "administratorAddress" : {
          "$ref" : "#/$defs/EmailAddress",
          "description" : "Email address notifications are sent to"
        },
        "authentication" : {
          "type" : [ "object", "null" ],
          "properties" : {
            "password" : {
              "$ref" : "#/$defs/EncryptedSecret"
            },
            "type" : {
              "type" : "string",
              "enum" : [ "login", "cramMd5", "plain" ]
            },
            "username" : {
              "type" : "string"
            }
          },
          "required" : [ "password", "type", "username" ],
          "additionalProperties" : false,
          "minProperties" : 1,
          "description" : "SMTP authentication method"
        },
        "fromAddress" : {
          "$ref" : "#/$defs/EmailAddress",
          "description" : "Email address notifications are sent from"
        },
        "smtpServer" : {
          "type" : "string",
          "pattern" : "^(?:(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])|(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*(?:[A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])):(?:[1-9][0-9]{0,3}|[1-6][0-5][0-5][0-3][0-5])$",
          "description" : "Address and port of the smtp server"
        },
        "sslProtocol" : {
          "anyOf" : [ {
            "type" : "null"
          }, {
            "type" : "string",
            "enum" : [ null, "startTls", "implicitTls" ],
            "description" : "SMTP protocol flavour"
          } ]
        }
      },
      "required" : [ "administratorAddress", "fromAddress", "smtpServer" ],
      "additionalProperties" : false,
      "minProperties" : 1,
      "description" : "SMTP configuration for notifications"
    },
    "helpContact" : {
      "type" : "object",
      "properties" : {
        "email" : {
          "anyOf" : [ {
            "type" : "null"
          }, {
            "$ref" : "#/$defs/EmailAddress"
          } ],
          "description" : "The email address users should contact"
        },
        "name" : {
          "type" : [ "string", "null" ],
          "description" : "The name of the contact"
        }
      },
      "additionalProperties" : false,
      "minProperties" : 1,
      "description" : "Who users should contact if they have a problem"
    },
    "network" : {
      "type" : [ "object", "null" ],
      "properties" : {
        "additionalTrust" : {
          "$ref" : "#/$defs/X509CertificateSet-nullable",
          "description" : "Required if Develocity must communicate with servers using certificates not trusted by default.\nThis property is now deprecated and will be removed in the future.\nConsider using one of the equivalent Helm values under `global.additionalTrust`.",
          "deprecated" : true
        },
        "proxy" : {
          "type" : [ "object", "null" ],
          "properties" : {
            "auth" : {
              "type" : [ "object", "null" ],
              "properties" : {
                "password" : {
                  "$ref" : "#/$defs/EncryptedSecret",
                  "description" : "Proxy password"
                },
                "username" : {
                  "type" : "string",
                  "description" : "Proxy username"
                }
              },
              "required" : [ "password", "username" ],
              "additionalProperties" : false,
              "minProperties" : 1,
              "description" : "Proxy authentication credentials"
            },
            "excludedHosts" : {
              "description" : "A list of hosts that should not be proxied",
              "type" : "array",
              "items" : {
                "type" : "string",
                "pattern" : "^(?:(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])|(?:(?:^[\\*]|[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*(?:[A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9]))$",
                "format" : "gradle-enterprise:excludedHosts"
              }
            },
            "host" : {
              "type" : "string",
              "pattern" : "^(?:(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])|(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*(?:[A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9]))$",
              "format" : "gradle-enterprise:host",
              "description" : "Proxy host"
            },
            "port" : {
              "type" : "integer",
              "description" : "Proxy port",
              "maximum" : 65535,
              "minimum" : 1
            },
            "protocol" : {
              "type" : "string",
              "enum" : [ "http", "https" ],
              "description" : "Proxy protocol"
            }
          },
          "required" : [ "host" ],
          "additionalProperties" : false,
          "minProperties" : 1,
          "description" : "Http proxy config"
        }
      },
      "additionalProperties" : false,
      "minProperties" : 1,
      "description" : "Network configuration"
    },
    "systemPassword" : {
      "$ref" : "#/$defs/HashedSecret",
      "description" : "The password for the system user"
    }
  }
}