Skip to content

Commit

Permalink
Add script to find external issues we haven't commented on (#2532)
Browse files Browse the repository at this point in the history
### What
We should make people who file issues feel seen by commenting on them

Example output:

```
#1529 by rasmusgo has 0 comments
#1544 by cortwave has 0 comments
#1571 by pablovela5620 has 0 comments
```

### Checklist
* [x] I have read and agree to [Contributor
Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and
the [Code of
Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md)

<!-- This line will get updated when the PR build summary job finishes.
-->
PR Build Summary: https://build.rerun.io/pr/2532

<!-- pr-link-docs:start -->
Docs preview: https://rerun.io/preview/e91e000/docs
Examples preview: https://rerun.io/preview/e91e000/examples
<!-- pr-link-docs:end -->
  • Loading branch information
emilk authored Jun 28, 2023
1 parent 4910617 commit 3e6e973
Showing 1 changed file with 112 additions and 0 deletions.
112 changes: 112 additions & 0 deletions scripts/highlight_issues.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
#!/usr/bin/env python3

"""Generate a list of GitHub issues that needs attention."""
from __future__ import annotations

import multiprocessing
import sys

import requests
from tqdm import tqdm

OWNER = "rerun-io"
REPO = "rerun"
OFFICIAL_RERUN_DEVS = [
"abey79",
"emilk",
"jleibs",
"jondo2010",
"jprochazk",
"karimo87",
"nikolausWest",
"roym899",
"teh-cmc",
"Wumpf",
]


def get_github_token() -> str:
import os

token = os.environ.get("GH_ACCESS_TOKEN", "")
if token != "":
return token

home_dir = os.path.expanduser("~")
token_file = os.path.join(home_dir, ".githubtoken")

try:
with open(token_file) as f:
token = f.read().strip()
return token
except Exception:
pass

print("ERROR: expected a GitHub token in the environment variable GH_ACCESS_TOKEN or in ~/.githubtoken")
sys.exit(1)


def fetch_issue(issue_json: dict) -> dict:
url = issue_json["url"]
gh_access_token = get_github_token()
headers = {"Authorization": f"Token {gh_access_token}"}
response = requests.get(url, headers=headers)
json = response.json()
if response.status_code != 200:
print(f"ERROR {url}: {response.status_code} - {json['message']}")
sys.exit(1)
return json


def main() -> None:
access_token = get_github_token()

headers = {"Authorization": f"Bearer {access_token}"}

all_issues = []

urls = [f"https://api.github.com/repos/{OWNER}/{REPO}/issues"]

while urls:
url = urls.pop()

print(f"Fetching {url}…")
response = requests.get(url, headers=headers)
json = response.json()
if response.status_code != 200:
print(f"ERROR {url}: {response.status_code} - {json['message']}")
sys.exit(1)

all_issues += list(json)

# Check if there is a next page:
if "Link" in response.headers:
links = response.headers["Link"].split(", ")
for link in links:
if 'rel="next"' in link:
next_url = link.split(";")[0][1:-1]
urls += [next_url]

pool = multiprocessing.Pool()
issues_list = list(
tqdm(
pool.imap(fetch_issue, all_issues),
total=len(all_issues),
desc="Fetching issue details",
)
)

issues_list.sort(key=lambda issue: issue["number"])

# Print the response content
for issue in issues_list:
author = issue["user"]["login"]
html_url = issue["html_url"]
comments = issue["comments"]
state = issue["state"]
if comments == 0 and state == "open" and author not in OFFICIAL_RERUN_DEVS:
print(f"{html_url} by {author} has {comments} comments")


if __name__ == "__main__":
main()

0 comments on commit 3e6e973

Please sign in to comment.