diff --git a/scripts/get_patch_release.py b/scripts/get_patch_release.py new file mode 100755 index 000000000..333af3ac3 --- /dev/null +++ b/scripts/get_patch_release.py @@ -0,0 +1,76 @@ +#!/usr/bin/python +''' +Fetches the Kubernetes releases from GitHub and returns the most recent patch +release for a major version. + +Parameters: + --version=: the major version to find the latest patch release for, i.e. v1.19 +''' + +import argparse +import sys +import requests + +RELEASE_URL = 'https://api.github.com/repos/kubernetes/kubernetes/releases' +''' +URL for fetching the releases. Add '?per_num=50' to increase the number of +returned releases from default 30 to 50 (max 100). +''' + + +def get_json_releases(): + ''' + Fetch the releases from GitHub, return the full JSON structures that were + obtained. + ''' + headers = {'Accept': 'application/vnd.github.v3+json'} + res = requests.get(RELEASE_URL, headers=headers) + return res.json() + + +def get_releases(gh_releases): + ''' + Take the JSON formatted releases, and return a list of the name for each label. + ''' + releases = list() + for release in gh_releases: + releases.append(release['name']) + return releases + + +def main(): + ''' + main() function to parse arguments and run the actions. + ''' + parser = argparse.ArgumentParser() + parser.add_argument('--version', help='major version to find patch release for') + args = parser.parse_args() + + # get all the releases + json = get_json_releases() + releases = get_releases(json) + + # in case --version is passed, exit with 0 or 1 + if args.version: + version = args.version + if not version.startswith('v'): + version = 'v' + version + + # releases are ordered from newest to oldest, so the 1st match is the + # most current patch update + for release in releases: + if release.startswith(version + '.'): + print(release) + sys.exit(0) + + # no match, exit with an error + sys.exit(1) + # --version was not passed, list all releases + else: + for release in releases: + print(release) + + sys.exit(0) + +if __name__ == '__main__': + main()