12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #!/usr/bin/env python
- # @file: toolset/github_actions/get_maintainers.py
- # @author: Elwyn Cruz (ecruz-te)
- #
- # @description: This script is only for use within Github Actions. It is meant
- # to get a list of maintainers to ping for a PR whenever their framework
- # is updated.
- import os
- import json
- import re
- import subprocess
- diff_target = os.getenv("TARGET_BRANCH_NAME")
- def fw_found_in_changes(test, changes_output):
- return re.search(
- r"frameworks/" + re.escape(test) + "/",
- changes_output, re.M)
- def clean_output(output):
- return os.linesep.join([s for s in output.splitlines() if s])
- curr_branch = "HEAD"
- # Also fetch master to compare against
- subprocess.check_output(['bash', '-c', 'git fetch origin {0}:{0}'
- .format(diff_target)])
- changes = clean_output(
- subprocess.check_output([
- 'bash', '-c',
- 'git --no-pager diff --name-only {0} $(git merge-base {0} {1})'
- .format(curr_branch, diff_target)
- ], text=True))
- def get_frameworks(test_lang):
- dir = "frameworks/" + test_lang + "/"
- return [test_lang + "/" + x for x in [x for x in os.listdir(dir) if os.path.isdir(dir + x)]]
- test_dirs = []
- for frameworks in map(get_frameworks, os.listdir("frameworks")):
- for framework in frameworks:
- test_dirs.append(framework)
- affected_frameworks = [fw for fw in test_dirs if fw_found_in_changes(fw, changes)]
- maintained_frameworks = {}
- for framework in affected_frameworks:
- _, name = framework.split("/")
- try:
- with open("frameworks/" + framework + "/benchmark_config.json", "r") as framework_config:
- config = json.load(framework_config)
- except FileNotFoundError:
- continue
- framework_maintainers = config.get("maintainers", None)
- if framework_maintainers is not None:
- maintained_frameworks[name] = framework_maintainers
- if maintained_frameworks:
- print("The following frameworks were updated, pinging maintainers:")
- for framework, maintainers in maintained_frameworks.items():
- print("`%s`: @%s" % (framework, ", @".join(maintainers)))
- exit(0)
|