File check_for_updates.py of Package vim-plugins

#!/usr/bin/python3

import argparse
import re
import requests
import rpm
import sys
from termcolor import colored

parser = argparse.ArgumentParser()
parser.add_argument('-t', '--token')
args = parser.parse_args()

ts = rpm.TransactionSet()
spec = ts.parseSpec('vim-plugins.spec')

ver_re = re.compile(r"https://github\.com/(?P<org>[^/]+)/(?P<repo>[^/]+)/(?:archive/refs/tags|releases/download/(?P<rel>[^/]+))/(?P<ver>[^/]+)\.tar\.gz#")

for src in spec.sources:
    if src[2] != 1: # Source
        continue

    m = ver_re.match(src[0])
    if m is None:
        continue

    org = m.group('org')
    repo = m.group('repo')
    rel = m.group('rel')
    ver = m.group('ver')
    if ver is None:
        continue

    print(colored(f"Checking {org}/{repo} (current rel='{rel}' ver='{ver}')", 'green'))

    url_suffix = 'tags'
    if rel is not None:
        url_suffix = 'releases/latest'
        ver = rel

    headers = {}
    if args.token:
        headers['Authorization'] = f"token {args.token}"
    get = requests.get(f"https://api.github.com/repos/{org}/{repo}/{url_suffix}", headers=headers)
    if not get.ok:
        print(f"bad HTTP reply for {org}/{repo}: {get.status_code} {get.reason}")
        sys.exit(1)

    js = get.json()
    if rel is None:
        js = js[0] # take the latest tag only

    ver2 = js['name'] or js['tag_name']
    if ver != ver2:
        print(colored(f"\t{ver2} available", 'red'))
openSUSE Build Service is sponsored by