Merge "Add a new tool to help find the latest versions"

This commit is contained in:
Jenkins 2016-03-08 15:36:44 +00:00 committed by Gerrit Code Review
commit 023daa574f
2 changed files with 131 additions and 0 deletions

View File

@ -9,3 +9,5 @@ GitPython>=1.0.1 # BSD License (3 clause)
six>=1.9.0 # MIT
oslo.config>=3.7.0 # Apache-2.0
graphviz>=0.4.0 # MIT License
beautifulsoup4 # MIT
setuptools>=16.0 # PSF/ZPL

129
tools/version_check.py Executable file
View File

@ -0,0 +1,129 @@
#!/usr/bin/env python
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import collections
import re
import sys
from bs4 import BeautifulSoup as bs
from oslo_config import cfg
import pkg_resources
import requests
from kolla.common import config as common_config
# Use an OrderedDict to ensure the results are displayed alphabetically
MAJOR_VERSIONS_MAP = collections.OrderedDict([
('ceilometer', 5),
('cinder', 7),
('designate', 1),
('glance', 11),
('gnocchi', 1),
('heat', 5),
('horizon', 8),
('ironic', 4),
('keystone', 8),
('magnum', 1),
('murano', 1),
('neutron', 7),
('nova', 12),
('swift', 2),
('zaqar', 1)
])
TARBALLS_BASE_URL = 'http://tarballs.openstack.org'
VERSIONS = dict()
def retrieve_upstream_versions():
upstream_versions = dict()
for project in MAJOR_VERSIONS_MAP:
winner = None
series = MAJOR_VERSIONS_MAP[project]
base = '{}/{}'.format(TARBALLS_BASE_URL, project)
r = requests.get(base)
s = bs(r.text, 'html.parser')
for link in s.find_all('a'):
version = link.get('href')
if (version.endswith('.tar.gz') and
version.startswith('{}-{}'.format(project, series))):
split = '{}-|.tar.gz'.format(project)
candidate = re.split(split, version)[1]
if not winner or more_recent(candidate, winner):
winner = candidate
if not winner:
print('Could not find version for {}'.format(project))
continue
upstream_versions[project] = winner
VERSIONS['upstream'] = upstream_versions
def retrieve_local_versions(conf):
local_versions = dict()
for project in MAJOR_VERSIONS_MAP:
series = MAJOR_VERSIONS_MAP[project]
for project_section in [match.group(0) for match in
(re.search('^{}(?:-base)?$'.format(project),
section) for section in
conf._groups) if match]:
archive = conf[project_section]['location'].split('/')[-1]
if (archive.endswith('.tar.gz') and
archive.startswith('{}-{}'.format(project, series))):
split = '{}-|.tar.gz'.format(project)
local_versions[project] = re.split(split, archive)[1]
VERSIONS['local'] = local_versions
def more_recent(candidate, reference):
return pkg_resources.parse_version(candidate) > \
pkg_resources.parse_version(reference)
def diff_link(project, old_ref, new_ref):
return "https://github.com/openstack/{}/compare/{}...{}".format(
project, old_ref, new_ref)
def compare_versions():
up_to_date = True
for project in VERSIONS['upstream']:
if project in VERSIONS['local']:
upstream_version = VERSIONS['upstream'][project]
local_version = VERSIONS['local'][project]
if more_recent(upstream_version, local_version):
print("{} has newer version {} > {}, see diff at {}".format(
project, upstream_version, local_version,
diff_link(project, local_version, upstream_version)))
up_to_date = False
if up_to_date:
print("Everything is up to date")
def main():
conf = cfg.ConfigOpts()
common_config.parse(conf, sys.argv[1:], prog='kolla-build')
retrieve_upstream_versions()
retrieve_local_versions(conf)
compare_versions()
if __name__ == '__main__':
main()