mirror of
https://github.com/weaveworks/scope.git
synced 2026-02-25 23:34:01 +00:00
92 lines
2.6 KiB
Python
Executable File
92 lines
2.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
# Generate the cross product of latest versions of Weave Net's dependencies:
|
|
# - Go
|
|
# - Docker
|
|
# - Kubernetes
|
|
#
|
|
# Dependencies:
|
|
# - python
|
|
# - git
|
|
# - list_versions.py
|
|
#
|
|
# Testing:
|
|
# $ python -m doctest -v cross_versions.py
|
|
|
|
from os import linesep
|
|
from sys import argv, exit, stdout, stderr
|
|
from getopt import getopt, GetoptError
|
|
from list_versions import DEPS, get_versions_from, filter_versions
|
|
from itertools import product
|
|
|
|
# See also: /usr/include/sysexits.h
|
|
_ERROR_RUNTIME = 1
|
|
_ERROR_ILLEGAL_ARGS = 64
|
|
|
|
|
|
def _usage(error_message=None):
|
|
if error_message:
|
|
stderr.write('ERROR: ' + error_message + linesep)
|
|
stdout.write(
|
|
linesep.join([
|
|
'Usage:', ' cross_versions.py [OPTION]...', 'Examples:',
|
|
' cross_versions.py', ' cross_versions.py -r',
|
|
' cross_versions.py --rc', ' cross_versions.py -l',
|
|
' cross_versions.py --latest', 'Options:',
|
|
'-l/--latest Include only the latest version of each major and'
|
|
' minor versions sub-tree.',
|
|
'-r/--rc Include release candidate versions.',
|
|
'-h/--help Prints this!', ''
|
|
]))
|
|
|
|
|
|
def _validate_input(argv):
|
|
try:
|
|
config = {'rc': False, 'latest': False}
|
|
opts, args = getopt(argv, 'hlr', ['help', 'latest', 'rc'])
|
|
for opt, value in opts:
|
|
if opt in ('-h', '--help'):
|
|
_usage()
|
|
exit()
|
|
if opt in ('-l', '--latest'):
|
|
config['latest'] = True
|
|
if opt in ('-r', '--rc'):
|
|
config['rc'] = True
|
|
if len(args) != 0:
|
|
raise ValueError('Unsupported argument(s): %s.' % args)
|
|
return config
|
|
except GetoptError as e:
|
|
_usage(str(e))
|
|
exit(_ERROR_ILLEGAL_ARGS)
|
|
except ValueError as e:
|
|
_usage(str(e))
|
|
exit(_ERROR_ILLEGAL_ARGS)
|
|
|
|
|
|
def _versions(dependency, config):
|
|
return map(str,
|
|
filter_versions(
|
|
get_versions_from(DEPS[dependency]['url'],
|
|
DEPS[dependency]['re']),
|
|
DEPS[dependency]['min'], **config))
|
|
|
|
|
|
def cross_versions(config):
|
|
docker_versions = _versions('docker', config)
|
|
k8s_versions = _versions('kubernetes', config)
|
|
return product(docker_versions, k8s_versions)
|
|
|
|
|
|
def main(argv):
|
|
try:
|
|
config = _validate_input(argv)
|
|
print(linesep.join('\t'.join(triple)
|
|
for triple in cross_versions(config)))
|
|
except Exception as e:
|
|
print(str(e))
|
|
exit(_ERROR_RUNTIME)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main(argv[1:])
|