From bbcc63f05e51e2c2d89563afc95a82e6796de101 Mon Sep 17 00:00:00 2001 From: bhack Date: Mon, 20 Jul 2020 23:07:15 +0000 Subject: [PATCH 1/2] Inital POC about codeowners latest activity --- .../workflows/latest_activity_codeowners.py | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 .github/workflows/latest_activity_codeowners.py diff --git a/.github/workflows/latest_activity_codeowners.py b/.github/workflows/latest_activity_codeowners.py new file mode 100644 index 0000000000..a0ed4b5d09 --- /dev/null +++ b/.github/workflows/latest_activity_codeowners.py @@ -0,0 +1,83 @@ +import datetime +from github import Github +import pickle +import re +import requests + + +def events_github_api(g, owners): + excluded_events = ["mentioned", "subscribed", "referenced"] + repo = g.get_repo("tensorflow/addons") + events = repo.get_issues_events().reversed + users_stats = dict.fromkeys(owners, datetime.datetime.min) + for event in events: + if event.event not in excluded_events: + if hasattr(event.issue, "user"): + login = event.issue.user.login.lower() + elif hasattr(event.pull_request, "user"): + login = event.pull_resquest.user.login.lower() + elif hasattr(event.actor, "login"): + login = event.actor.login.lower() + else: + continue + if login in owners: + print( + "User: %s Event date: %s Event type: %s" + % (login, event.created_at, event.event) + ) + users_stats[login] = event.created_at + users_stats = { + k: v for k, v in sorted(users_stats.items(), key=lambda item: item[1]) + } + return users_stats + + +def get_owners(): + result = requests.get( + "https://raw.githubusercontent.com/tensorflow/addons/master/.github/CODEOWNERS" + ) + owners = re.findall(r"@(\S+)", result.text) + owners = [owner.lower() for owner in owners] + owners = sorted(set(owners)) + return owners + + +def main(): + owners = get_owners() + print("=" * 80) + print("OWNERS") + print("=" * 80) + for owner in owners: + print(owner) + + # First create a Github instance: + + # using username and password + # g = Github("user", "password") + + # or using an access token + g = Github("your_access_token") + + users_stats = {} + + # Use cached pickle or retrive from Github API + from_file = False + # I really don't know if we want to serialize something + # TODO if we maintain this we could use secure tmp files + pickle_file = "/tmp/tfa_issues_events.pickle" + if not from_file: + users_stats = events_github_api(g,owners) + with open(pickle_file, "wb") as fp: + pickle.dump(users_stats, fp) + else: + with open(pickle_file, "rb") as fp: + users_stats = pickle.load(fp) + print("=" * 80) + print("Owners latest activity in TFA repo:") + print("=" * 80) + for user, last_event in users_stats.items(): + print("User: %s Event date: %s" % (user, last_event)) + + +if __name__ == "__main__": + main() From 0c273baf117f5537bcb28fdd30666bd4011c7183 Mon Sep 17 00:00:00 2001 From: bhack Date: Tue, 21 Jul 2020 00:27:34 +0000 Subject: [PATCH 2/2] Fix format --- .github/workflows/latest_activity_codeowners.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/latest_activity_codeowners.py b/.github/workflows/latest_activity_codeowners.py index a0ed4b5d09..79c84b0bcc 100644 --- a/.github/workflows/latest_activity_codeowners.py +++ b/.github/workflows/latest_activity_codeowners.py @@ -57,7 +57,6 @@ def main(): # or using an access token g = Github("your_access_token") - users_stats = {} # Use cached pickle or retrive from Github API @@ -66,7 +65,7 @@ def main(): # TODO if we maintain this we could use secure tmp files pickle_file = "/tmp/tfa_issues_events.pickle" if not from_file: - users_stats = events_github_api(g,owners) + users_stats = events_github_api(g, owners) with open(pickle_file, "wb") as fp: pickle.dump(users_stats, fp) else: