''' Created on Aug. 14, 2019 @author: KJNETHER going to receive a Github context that was generated by an github action Evaluates it to determine if this action is part of a pullrequest that has been merged and closed. ''' import json import pprint import sys import requests class GitHubAPIWrapper(object): def __init__(self, github_context): self.github_context = json.loads(github_context) self.pp = pprint.PrettyPrinter(indent=4) #self.pp.pprint(self.github_context) def get_after_sha(self): ''' :return: The sha of the commit that is associated with the after event in github. ''' return self.github_context['event']['after'] def get_sha(self): return self.github_context['sha'] def get_events(self): url = self.github_context['event']['repository']['events_url'] resp = requests.get(url) data = resp.json() return data def get_pr_events(self): events = self.get_events() pr_events = [] for event in events: if event['type'] == 'PullRequestEvent': pr_events.append(event) return pr_events def get_pr_events_closed(self): pr_events = self.get_pr_events() closed_pr = [] for event in pr_events: if event['payload']['action'] == 'closed': closed_pr.append(event) return closed_pr def get_pr_event_for_context(self): pr_events = self.get_pr_events() sha = self.get_sha() event = None for pr_event in pr_events: pr_event['payload']['action'] if sha == pr_event['payload']['pull_request']['merge_commit_sha']: event = pr_event break #self.pp.pprint(event) return event def is_context_a_closed_pr(self): event = self.get_pr_event_for_context() retVal = True if event is None: retVal = False return retVal if __name__ == '__main__': # dev #context_file = 'gha_context.json' context_file = sys.argv[1] fh = open('gha_context.json', 'r') jsontxt = fh.read() fh.close() gha = GitHubAPIWrapper(jsontxt) gha.get_pr_event_for_context() is_pr_closed = gha.is_context_a_closed_pr() print(is_pr_closed)