mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-10 08:20:23 +00:00
b27b2ee074
These script now check if GITHUB_API_TOKEN is set in the environment, and use that for authenticating. There is no username needed when an API token is used, but it may not be empty, so it is set to "unused". Signed-off-by: Niels de Vos <ndevos@redhat.com>
99 lines
2.6 KiB
Python
Executable File
99 lines
2.6 KiB
Python
Executable File
#!/usr/bin/python
|
|
'''
|
|
Fetches the Kubernetes releases from GitHub and returns the most recent patch
|
|
release for a major version.
|
|
|
|
Parameters:
|
|
--version=<version>: the major version to find the latest patch release for, i.e. v1.19
|
|
|
|
Environment:
|
|
GITHUB_API_TOKEN: the GitHub "personal access token" to use
|
|
'''
|
|
|
|
import argparse
|
|
import os
|
|
import requests
|
|
from requests.auth import HTTPBasicAuth
|
|
import sys
|
|
|
|
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'}
|
|
|
|
auth = None
|
|
if 'GITHUB_API_TOKEN' in os.environ:
|
|
github_api_token = os.environ['GITHUB_API_TOKEN']
|
|
if github_api_token != '':
|
|
# the username "unused" is not relevant, needs to be non-empty
|
|
auth = HTTPBasicAuth('unused', github_api_token)
|
|
|
|
res = requests.get(RELEASE_URL, headers=headers)
|
|
|
|
# if "res.status_code != requests.codes.ok", raise an exception
|
|
res.raise_for_status()
|
|
|
|
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
|
|
try:
|
|
json = get_json_releases()
|
|
except Exception as err:
|
|
print('Error: %s' % err)
|
|
sys.exit(1)
|
|
|
|
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()
|