[READ-ONLY] Mirror of https://github.com/mrgnw/scripts.
1#!/usr/bin/env python3
2
3from urllib import request, error
4import json
5import sys
6
7
8def parse_args():
9 """
10 if one arg: it could be
11 - duckdb/duckdb
12 - github.com/duckdb/duckdb
13 - https://github.com/duckdb/duckdb
14 if two args:
15 - duckdb duckdb
16 """
17 if len(sys.argv) == 2:
18 owner, repo = sys.argv[1].split('/')
19 return owner, repo
20 elif len(sys.argv) == 3:
21 owner, repo = sys.argv[1], sys.argv[2]
22 return owner, repo
23 else:
24 print('Usage: git-latest-tag <repo_owner> <repo_name>', file=sys.stderr)
25 sys.exit(1)
26
27
28def get_latest_github_tag(repo_owner, repo_name):
29 try:
30 url = f'https://api.github.com/repos/{repo_owner}/{repo_name}/tags'
31 with request.urlopen(url) as response:
32 if response.status == 200:
33 tags = json.loads(response.read().decode())
34 if tags:
35 latest_version = tags[0]['name']
36 return latest_version.lstrip('v')
37 except error.URLError as e:
38 print(f'Error fetching tags: {e}', file=sys.stderr)
39 return None
40
41
42if __name__ == '__main__':
43 repo_owner, repo_name = parse_args()
44 latest_version = get_latest_github_tag(repo_owner, repo_name)
45
46 if latest_version:
47 print(latest_version)
48 # make latest_version available to stdout if this script is being called from another script
49 sys.stdout.flush()
50 else:
51 print(f'Failed to fetch the latest tag for {repo_owner}/{repo_name}', file=sys.stderr)
52 sys.exit(2)