add mechanisms for finding and pinging maintainers

This commit is contained in:
Zach White 2021-09-18 21:49:40 -07:00
parent ef5c6ea096
commit c4a891d425
5 changed files with 97 additions and 0 deletions

View file

@ -60,10 +60,12 @@ subcommands = [
'qmk.cli.lint',
'qmk.cli.list.keyboards',
'qmk.cli.list.keymaps',
'qmk.cli.list.maintainers',
'qmk.cli.kle2json',
'qmk.cli.multibuild',
'qmk.cli.new.keyboard',
'qmk.cli.new.keymap',
'qmk.cli.ping.maintainers',
'qmk.cli.pyformat',
'qmk.cli.pytest',
]

View file

@ -0,0 +1,16 @@
"""List the keymaps for a specific keyboard
"""
from pathlib import Path
from milc import cli
from qmk.maintainers import maintainers
@cli.argument("files", type=Path, arg_only=True, nargs='*', help="File to check")
@cli.subcommand("List the maintainers for a file.")
def list_maintainers(cli):
"""List the maintainers for a file.
"""
for file in cli.args.files:
cli.echo('%s: %s', file, ', '.join(maintainers(file)))

View file

@ -0,0 +1,23 @@
"""Generate a message to ping people responsible for one or more files.
"""
from pathlib import Path
from milc import cli
from qmk.maintainers import maintainers
@cli.argument("files", type=Path, arg_only=True, nargs='*', help="File to ping maintainers for.")
@cli.subcommand("Ping the maintainers for one or more files.")
def ping_maintainers(cli):
"""List the maintainers for one or more files.
"""
github_maintainers = set()
for file in cli.args.files:
for maintainer in maintainers(file):
if maintainer != 'qmk/collaborators':
github_maintainers.add('@' + maintainer)
if github_maintainers:
print(f'If you were pinged by this comment you have one or more files being changed by this PR: {" ".join(sorted(github_maintainers))}')

View file

@ -0,0 +1,22 @@
from pathlib import Path
from qmk.json_schema import json_load
def maintainers(file):
"""Yields maintainers for a file.
"""
maintainers = 'qmk'
file_dir = file if file.is_dir() else file.parent
cur_path = Path('.')
for path_part in file_dir.parts:
cur_path = cur_path / path_part
info_file = cur_path / 'info.json'
if info_file.exists():
new_info_data = json_load(info_file)
maintainers = new_info_data.get('maintainer', maintainers)
for maintainer in maintainers.replace(',', ' ').split():
yield 'qmk/collaborators' if maintainer == 'qmk' else maintainer