add jsonschema validation for project data
This change adds a tool to perform basic JSONSchema validation of the reference/projects.yaml file. Change-Id: I28ff94af37d7f4de07c1d282bf3c37c77eeea101 Signed-off-by: Doug Hellmann <doug@doughellmann.com> Co-Authored-by: Zane Bitter <zbitter@redhat.com>
This commit is contained in:
parent
b24d958367
commit
96e8407730
47
openstack_governance/_check_schema.py
Normal file
47
openstack_governance/_check_schema.py
Normal file
@ -0,0 +1,47 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""Verify that all data files match the schema."""
|
||||
|
||||
import argparse
|
||||
import pkgutil
|
||||
|
||||
import jsonschema
|
||||
|
||||
from openstack_governance import yamltools
|
||||
|
||||
|
||||
_yaml = yamltools.YAML()
|
||||
|
||||
_PROJECTS_SCHEMA = _yaml.load(
|
||||
pkgutil.get_data('openstack_governance',
|
||||
'projects_schema.yaml').decode('utf-8')
|
||||
)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.parse_args()
|
||||
|
||||
errors = []
|
||||
|
||||
with open('reference/projects.yaml', 'r', encoding='utf-8') as f:
|
||||
all_projects = _yaml.load(f.read())
|
||||
|
||||
validator = jsonschema.Draft4Validator(_PROJECTS_SCHEMA)
|
||||
|
||||
errors = False
|
||||
for e in validator.iter_errors(all_projects):
|
||||
errors = True
|
||||
print(e)
|
||||
|
||||
return 1 if errors else 0
|
95
openstack_governance/projects_schema.yaml
Normal file
95
openstack_governance/projects_schema.yaml
Normal file
@ -0,0 +1,95 @@
|
||||
---
|
||||
$schema: "http://json-schema.org/schema#"
|
||||
$id: "https://opendev.org/openstack/releases/src/branch/master/README.rst"
|
||||
|
||||
|
||||
additionalProperties:
|
||||
# Do not allow any properties not defined here. This lets us catch
|
||||
# typos.
|
||||
additionalProperties: false
|
||||
required:
|
||||
- ptl
|
||||
- deliverables
|
||||
properties:
|
||||
ptl:
|
||||
type: "object"
|
||||
required:
|
||||
- name
|
||||
- email
|
||||
additionalProperties: false
|
||||
properties:
|
||||
name:
|
||||
type: "string"
|
||||
irc:
|
||||
type: "string"
|
||||
email:
|
||||
type: "string"
|
||||
format: "email"
|
||||
appointed:
|
||||
type: "array"
|
||||
items:
|
||||
type: "string"
|
||||
irc-channel:
|
||||
type: "string"
|
||||
service:
|
||||
type: "string"
|
||||
url:
|
||||
type: "string"
|
||||
liaisons:
|
||||
type: "array"
|
||||
uniqueItems: true
|
||||
items:
|
||||
type: "string"
|
||||
mission:
|
||||
type: "string"
|
||||
deliverables:
|
||||
type: "object"
|
||||
additionalProperties:
|
||||
type: "object"
|
||||
required:
|
||||
- repos
|
||||
additionalProperties: false
|
||||
properties:
|
||||
repos:
|
||||
type: "array"
|
||||
items:
|
||||
type: "string"
|
||||
pattern: "^[^/]+/[^/]+$"
|
||||
minItems: 1
|
||||
uniqueItems: true
|
||||
tags:
|
||||
type: "array"
|
||||
items:
|
||||
type: "string"
|
||||
release-management:
|
||||
type: "string"
|
||||
enum:
|
||||
- none
|
||||
- deprecated
|
||||
- external
|
||||
tags:
|
||||
type: "array"
|
||||
items:
|
||||
type: "string"
|
||||
extra-atcs:
|
||||
type: "array"
|
||||
items:
|
||||
type: "object"
|
||||
required:
|
||||
- name
|
||||
- email
|
||||
- expires-in
|
||||
additionalProperties: false
|
||||
properties:
|
||||
name:
|
||||
type: "string"
|
||||
email:
|
||||
type: "string"
|
||||
format: "email"
|
||||
expires-in:
|
||||
type: "string"
|
||||
pattern: >-
|
||||
^(January |February |March |April |May |June |July |August
|
||||
|September |October |November |December )2[0-9]{3}$
|
||||
comment:
|
||||
type: "string"
|
@ -6,4 +6,5 @@ PyYAML>=3.1.0
|
||||
six>=1.9.0
|
||||
yamlordereddictloader
|
||||
mwclient==0.8.1
|
||||
ruamel.yaml
|
||||
ruamel.yaml
|
||||
jsonschema>=2.6.0
|
||||
|
@ -22,4 +22,8 @@ warning-is-error = 1
|
||||
warnerrors = True
|
||||
|
||||
[flake8]
|
||||
ignore = E501,E226,H405
|
||||
ignore = E501,E226,H405
|
||||
|
||||
[entry_points]
|
||||
console_scripts =
|
||||
osg-check-schema = openstack_governance._check_schema:main
|
||||
|
Loading…
Reference in New Issue
Block a user