scripts/ci/verify_codeowners.py (28 lines of code) (raw):

# -------------------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- from __future__ import print_function import os import sys from util import get_repo_root REPO_ROOT = get_repo_root() CODEOWNERS = os.path.join(REPO_ROOT, '.github', 'CODEOWNERS') SRC_DIR = os.path.join(REPO_ROOT, 'src') def get_src_dir_codeowners(): contents = [] with open(CODEOWNERS) as f: contents = [x.strip() for x in f.readlines()] return dict([x.split(' ', 1) for x in contents if x.startswith('/src/') and x.split(' ')[0].endswith('/')]) def main(): owners = get_src_dir_codeowners() dangling_entries = [e for e in owners if not os.path.isdir(os.path.join(REPO_ROOT, e[1:]))] missing_entries = ['/src/{}/'.format(p) for p in os.listdir(SRC_DIR) if os.path.isdir(os.path.join(SRC_DIR, p)) and '/src/{}/'.format(p) not in owners] if dangling_entries or missing_entries: print('Errors whilst verifying {}!'.format(CODEOWNERS)) if dangling_entries: print("Remove the following {} as these directories don't exist.".format(dangling_entries), file=sys.stderr) if missing_entries: print("The following directories are missing codeowners {}.".format(missing_entries), file=sys.stderr) sys.exit(1) if __name__ == '__main__': main()