hack/github/feature_request_reactions.py (37 lines of code) (raw):

#!/usr/bin/env python3 import csv import os import sys from operator import itemgetter from typing import Union # This script requires the python GitHub client: # pip install PyGithub from github import Github from github.Repository import Repository print('Getting popular feature requests...') # To create a GitHub token, see below (the token doesn't need to include any scopes): # https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line github = Github(os.environ.get('GH_TOKEN')) issue_reaction_count: list[dict[str, Union[int, str]]] = [] PLUS_ONE_REACTION_STRINGS = ['+1', 'heart', 'hooray', 'rocket', 'eyes'] ISSUE_LABELS = ['feature'] repo: Repository = github.get_repo('aws/karpenter-provider-aws') open_issues = repo.get_issues(state='open', labels=ISSUE_LABELS) for issue in open_issues: # count unique +1s usernames: set[str] = set() plus_ones = 0 for reaction in issue.get_reactions(): username = reaction.user.login if reaction.content in PLUS_ONE_REACTION_STRINGS and username not in usernames: usernames.add(reaction.user.login) plus_ones += 1 issue_reaction_count.append({ 'title': issue.title, 'url': issue.html_url, 'reactions': plus_ones }) issue_row_list = [['Title', 'Url', 'Plus Ones']] for issue in sorted(issue_reaction_count, key=itemgetter('reactions'), reverse=True): issue_row_list.append([ issue['title'], issue['url'], issue['reactions'] ]) # Write CSV data to STDOUT, redirect to file to persist, e.g. # ./hack/feature_request_reactions.py > "karpenter-feature-requests-$(date +"%Y-%m-%d").csv" writer = csv.writer(sys.stdout) writer.writerows(issue_row_list) print('Done!')