Skip to content

Instantly share code, notes, and snippets.

@digitronik
Created December 20, 2019 11:45
Show Gist options
  • Save digitronik/6788846ca3792dc210a0b215e72a7562 to your computer and use it in GitHub Desktop.
Save digitronik/6788846ca3792dc210a0b215e72a7562 to your computer and use it in GitHub Desktop.
Release Script
import re
from collections import namedtuple
from datetime import date
from datetime import timedelta
from dateutil import parser
from operator import attrgetter
import requests
# Conf Variables
ORG_NAME = "pythonpune"
PROJECT_NAME = "linkstatus"
# API links
RELEASE_URL = f"https://api.github.com/repos/{ORG_NAME}/{PROJECT_NAME}/releases"
SEARCH_URL = f"https://api.github.com/search/issues?q=repo:{ORG_NAME}/{PROJECT_NAME}"
# old release data
last_release = requests.get(RELEASE_URL).json()[0]
tag = last_release["tag_name"]
created_at = parser.isoparse(last_release["created_at"])
last_release_date = (created_at.date() + timedelta(1)).isoformat()
current_date = date.today().isoformat()
# Grab merged PR data
merged_prs_query = SEARCH_URL + "+is:pr+merged:{}..{}".format(last_release_date, current_date)
merged_prs_data = requests.get(merged_prs_query).json()
merged_prs = merged_prs_data["items"]
PR = namedtuple("PR", ["pr_number", "pr_link", "pr_title", "pr_desc", "user_login", "user_link"])
prs = []
for pr in merged_prs:
description = pr["body"]
description = "\n".join(
[l for l in description.split("\n") if not re.match("Signed-off-by", l)]
)
prs.append(
PR(
pr["number"],
pr["html_url"],
pr["title"],
description,
pr["user"]["login"],
pr["user"]["html_url"],
)
)
for pr in sorted(prs, key=attrgetter("pr_number")):
print(
f"### [#{pr.pr_number}: {pr.pr_title}]({pr.pr_link}) \n By:@[{pr.user_login}]({pr.user_link})\n\n{pr.pr_desc}\n"
)
print(f"Total PRs: {len(prs)} \nThanks for contribution")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment