From e9da0533ca0671cde9989f896c7e3c26fdb0a9c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20L=C3=A9one?= Date: Thu, 4 Apr 2019 12:08:49 +0200 Subject: [PATCH] Add a script util to check if a file is modified by an open PR (#12790) --- scripts/find_pr.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100755 scripts/find_pr.py diff --git a/scripts/find_pr.py b/scripts/find_pr.py new file mode 100755 index 0000000000..503cf3121c --- /dev/null +++ b/scripts/find_pr.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python + +import os + +import click +import requests +from jinja2 import Template + + +@click.command() +@click.argument("path") +@click.option("--tags", + multiple=True, + help="Tags of PullRequest (Can be passed multiple times)") +@click.option("--token", + help="GitHub API token. (Default env variable GITHUB_TOKEN)", + default=os.environ.get("GITHUB_TOKEN", "")) +@click.option("--last-n-pr", + help="Last n-th PullRequests", + default=100) +def main(tags, token, path, last_n_pr): + """ + Find what GitHub pull requests touch a given file. + + ex: + ./find_pr.py --tags "language/fr" "content/fr/_index.html" + """ + query = Template(""" + query { + repository(name: "website", owner: "kubernetes") { + pullRequests({% if tags %}labels: [{% for tag in tags %}"{{ tag }}", {% endfor %}], {% endif %}last: {{ last_n_pr }}) { + edges { + node { + title + state + url + files (last: 100) { + edges { + node { + path + } + } + } + } + } + } + } + } + """).render(tags=tags, last_n_pr=last_n_pr) + r = requests.post("https://api.github.com/graphql", + json={"query": query}, + headers={ + "Authorization": "token %s" % token, + "Accept": "application/vnd.github.ocelot-preview+json", + "Accept-Encoding": "gzip" + }) + reply = r.json() + prs = reply['data']['repository']['pullRequests']['edges'] + + for pr in prs: + files = pr["node"]["files"]["edges"] + for f in files: + if path == f["node"]["path"]: + print("%s (%s)" % (pr["node"]["title"], pr["node"]["state"])) + print(pr["node"]["url"]) + print("----------------") + + +if __name__ == '__main__': + main()