{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "required": [
        "users",
        "releases",
        "companies",
        "repos",
        "project_types"
    ],
    "properties": {
        "users": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "launchpad_id": {
                        "type": "string",
                        "pattern": "^[a-z\\d\\.-]+$"
                    },
                    "github_id": {
                        "type": "string"
                    },
                    "gerrit_id": {
                        "type": "string"
                    },
                    "ldap_id": {
                        "type": "string"
                    },
                    "user_name": {
                        "type": "string"
                    },
                    "emails": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "pattern": "^[a-z\\d_\\.-]+@([a-z\\d\\.-]+\\.)+[a-z]+$"
                        },
                        "minItems": 1
                    },
                    "companies": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "company_name": {
                                    "type": "string"
                                },
                                "end_date": {
                                    "$ref": "#/definitions/date_format"
                                }
                            },
                            "required": [
                                "company_name",
                                "end_date"
                            ],
                            "additionalProperties": false
                        },
                        "minItems": 1
                    }
                },
                "required": [
                    "user_name",
                    "emails"
                ],
                "additionalProperties": false
            }
        },
        "releases": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "release_name": {
                        "type": "string"
                    },
                    "end_date": {
                        "$ref": "#/definitions/date_format"
                    }
                },
                "required": [
                    "release_name",
                    "end_date"
                ],
                "additionalProperties": false
            }
        },
        "repos": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "uri": {
                        "type": "string"
                    },
                    "organization": {
                        "type": "string"
                    },
                    "module": {
                        "type": "string"
                    },
                    "releases": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "branch": {
                                    "type": "string"
                                },
                                "tag_from": {
                                    "type": "string"
                                },
                                "tag_to": {
                                    "type": "string"
                                },
                                "release_name": {
                                    "type": "string"
                                }
                            },
                            "required": [
                                "tag_from",
                                "tag_to",
                                "release_name"
                            ]
                        }
                    },
                    "aliases": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "uri",
                    "module",
                    "organization"
                ],
                "additionalProperties": false
            }
        },
        "companies": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "company_name": {
                        "type": "string"
                    },
                    "domains": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "pattern": "^[a-z\\d\\.-]*$"
                        }
                    },
                    "aliases": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "company_name",
                    "domains"
                ],
                "additionalProperties": false
            }
        },
        "project_sources": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "organization": {
                        "type": "string"
                    },
                    "uri": {
                        "type": "string"
                    },
                    "git_base_uri": {
                        "type": "string"
                    },
                    "ssh_key_filename": {
                        "type": "string"
                    },
                    "ssh_username": {
                        "type": "string"
                    },
                    "exclude": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "organization"
                ],
                "additionalProperties": false
            }
        },
        "module_groups": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "module_group_name": {
                        "type": "string",
                        "pattern": "^[\\w-]+$"
                    },
                    "modules": {
                        "type": [
                            "array"
                        ],
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "module_group_name",
                    "modules"
                ],
                "additionalProperties": false
            }
        },
        "mail_lists": {
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "member_lists": {
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "project_types": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "pattern": "^[\\w-]+$"
                    },
                    "child": {
                        "type": "boolean"
                    },
                    "title": {
                        "type": "string"
                    },
                    "modules": {
                        "type": [
                            "array"
                        ],
                        "items": {
                            "type": "string",
                            "pattern": "^[\\w-]+$"
                        }
                    }
                },
                "required": [
                    "id",
                    "title",
                    "modules"
                ],
                "additionalProperties": false
            }
        }
    },
    "definitions": {
        "date_format": {
            "type": [
                "string",
                "null"
            ],
            "pattern": "^20\\d{2}-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-[0-3]\\d$"
        }
    }
}