889cfafad8
Change-Id: I007c3e06989853222f9a78cadcc15a14457f6d3e
90 lines
3.1 KiB
Python
Executable File
90 lines
3.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# 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.
|
|
|
|
import argparse
|
|
import os
|
|
import sys
|
|
|
|
import requests
|
|
import yaml
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
'-p', '--projects',
|
|
default='./reference/projects.yaml',
|
|
help='projects.yaml file path (%(default)s)',
|
|
)
|
|
parser.add_argument(
|
|
'-l', '--legacy-projects',
|
|
default='./reference/legacy.yaml',
|
|
help='legact.yaml file path (%(default)s)'
|
|
)
|
|
parser.add_argument(
|
|
'-g', '--gerrit',
|
|
default=('http://opendev.org/openstack-infra/project-config/'
|
|
'raw/branch/master/gerrit/projects.yaml'),
|
|
help=('URL for gerrit project list, ignored if --project-config is set or '
|
|
'when running in Zuul'),
|
|
)
|
|
parser.add_argument(
|
|
'-c', '--project-config',
|
|
default=('/home/zuul/src/opendev.org/openstack-infra/project-config'),
|
|
help='Local path of project-config',
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
with open(args.projects, 'r', encoding='utf-8') as f:
|
|
projects = yaml.safe_load(f.read())
|
|
|
|
with open(args.legacy_projects, 'r', encoding='utf-8') as f:
|
|
legacy_projects = yaml.safe_load(f.read())
|
|
legacy_repos = []
|
|
for team_name, team_data in legacy_projects.items():
|
|
legacy_deliverables = team_data.get('deliverables')
|
|
if not legacy_deliverables:
|
|
continue
|
|
for deliverable_name, deliverable_data in legacy_deliverables.items():
|
|
for repo in deliverable_data['repos']:
|
|
legacy_repos.append(repo)
|
|
|
|
if os.path.exists(args.project_config):
|
|
projects_yaml = '%s/gerrit/projects.yaml' % args.project_config
|
|
with open(projects_yaml) as gerrit_projects:
|
|
gerrit_data = yaml.safe_load(gerrit_projects)
|
|
else:
|
|
response = requests.get(args.gerrit)
|
|
gerrit_data = yaml.safe_load(response.text)
|
|
gerrit_projects = set(
|
|
entry.get('project')
|
|
for entry in gerrit_data
|
|
)
|
|
|
|
errors = 0
|
|
for team_name, team_data in projects.items():
|
|
deliverables = team_data.get('deliverables')
|
|
for deliverable_name, deliverable_data in deliverables.items():
|
|
for repo_name in deliverable_data.get('repos', []):
|
|
if repo_name in legacy_repos:
|
|
msg = ('Repository {} is present in project data {} as '
|
|
'well as in legecy project data {}')
|
|
print(
|
|
msg.format(repo_name, args.projects, args.legacy_projects))
|
|
errors += 1
|
|
|
|
if repo_name not in gerrit_projects:
|
|
print('Unknown repository {} as part of {} in {}'.format(
|
|
repo_name, deliverable_name, team_name))
|
|
errors += 1
|
|
|
|
sys.exit(1 if errors else 0)
|