Automatically update and show release notes

This commit is contained in:
Nathan Thomas 2021-08-13 16:02:04 -07:00
parent b804be4bfb
commit 246d69cb30

View file

@ -18,6 +18,7 @@ logging.basicConfig(level="WARNING")
logger = logging.getLogger("streamrip")
outdated = False
newest_version = __version__
class DownloadCommand(Command):
@ -86,11 +87,38 @@ class DownloadCommand(Command):
update_check.join()
if outdated:
import subprocess
import re
self.line(
"<info>A new version of streamrip is available! Run</info> "
"<cmd>pip3 install streamrip --upgrade to update</cmd>"
f"<info>Updating streamrip to <title>v{newest_version}</title>...</info>\n"
)
# update in background
update_p = subprocess.Popen(
["pip3", "install", "streamrip", "--upgrade"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
md_header = re.compile(r"#\s+(.+)")
bullet_point = re.compile(r"-\s*(.+)")
code = re.compile(r"`([^`]+)`")
issue_reference = re.compile(r"(#\d+)")
release_notes = requests.get(
"https://api.github.com/repos/nathom/streamrip/releases/latest"
).json()["body"]
release_notes = md_header.sub(r"<header>\1</header>", release_notes)
release_notes = bullet_point.sub(r"<options=bold>•</> \1", release_notes)
release_notes = code.sub(r"<cmd>\1</cmd>", release_notes)
release_notes = issue_reference.sub(r"<options=bold>\1</>", release_notes)
self.line(release_notes)
update_p.wait()
return 0
@ -448,6 +476,7 @@ class Application(BaseApplication):
formatter.set_style("path", Style("green", options=["bold"]))
formatter.set_style("cmd", Style("magenta"))
formatter.set_style("title", Style("yellow", options=["bold"]))
formatter.set_style("header", Style("yellow", options=["bold", "underline"]))
io.output.set_formatter(formatter)
io.error_output.set_formatter(formatter)
@ -491,8 +520,10 @@ def clean_options(*opts):
def is_outdated():
global outdated
global newest_version
r = requests.get("https://pypi.org/pypi/streamrip/json").json()
outdated = r["info"]["version"] != __version__
newest_version = r["info"]["version"]
outdated = newest_version != __version__
def main():