Skip to content

Instantly share code, notes, and snippets.

@wasabi0522
Last active December 27, 2015 07:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wasabi0522/7287777 to your computer and use it in GitHub Desktop.
Save wasabi0522/7287777 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# require python3.1 or later and requests package
# this script print boxen package list with the latest version
# for example
# $ python tags.py
# puppet-adium 1.2.0
# puppet-adobe_reader 1.1.0
# puppet-airfoil 0.0.1
# puppet-alfred 1.1.6
# puppet-android 1.0.0
# puppet-appcleaner 1.0.0
import os
import sys
import requests
from distutils.version import LooseVersion
base_url = "https://api.github.com/"
username = "boxen"
if len(sys.argv) == 2:
api_token = sys.argv[1]
else:
api_token = os.environ.get("GITHUB_API_TOKEN")
if not api_token:
print("GITHUB_API_TOKEN is not found")
sys.exit()
s = requests.Session()
s.headers['Authorization'] = 'token %s' % api_token
repos = {}
for page in range(1, 5): # 5 is magic number :-<
# get repos via https://api.github.com/users/:user/repos
r = s.get(base_url + "users/" + username + "/repos",
params={"page": str(page), "per_page": "100"})
for repo in r.json():
# dont see "our-boxen" repo and so on.
if not "puppet-" in repo["name"]:
continue
# get tags via https://api.github.com/repos/:user/:repo/tags
r = s.get(base_url
+ "repos/"
+ username
+ "/" + repo["name"]
+ "/tags")
versions = [ver["name"] for ver in r.json()]
# dont see tags using unsupported version-style "vX.X.X"
if "v" in [ver[0] for ver in versions]:
continue
lv = [LooseVersion(v) for v in versions]
sorted(lv, reverse=True)
if len(lv) > 0:
repos[repo["name"]] = lv[0].vstring
for name in sorted(repos.keys()):
print("{0:<30} {1:>10}".format(name, repos[name]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment