Skip to content

Instantly share code, notes, and snippets.

@fredericlepied
Created July 26, 2016 15:46
Show Gist options
  • Save fredericlepied/4c433181a8978fb52bd24311dfd029e4 to your computer and use it in GitHub Desktop.
Save fredericlepied/4c433181a8978fb52bd24311dfd029e4 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
#
# Update OpenStack Oslo and Clients libraries versions in rdoinfo from:
# http://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt
import copy
import string
import ruamel.yaml as yaml
RDO = 'rdo.yml'
UC = 'upper-constraints.txt'
UC_RELEASE = 'newton-uc'
# TBD take it from package-default:
DEFAULT_RELEASES = yaml.round_trip_load("""\
newton:
mitaka:
liberty:
""")
# filter for Oslo and clients
def filter_oslo_clients(project):
return project.startswith('oslo') or project.endswith('client')
# load and filter upper-constraints.txt
# normalize project name for rdoinfo
def load_uc(projects_filter):
uc = {}
with open(UC, 'rb') as ucfile:
for line in ucfile.readlines():
name, version_spec = line.rstrip().split('===')
if name and projects_filter(name):
version = version_spec.split(';')[0]
if version:
if name.startswith('python-'):
name=name[7:]
uc[name.replace('.','-')] = version
return uc
def update_uc():
uc = load_uc(filter_oslo_clients)
uc_projects = uc.keys()
with open(RDO, 'rb') as infile:
info = yaml.load(infile, Loader=yaml.RoundTripLoader)
for pkg in info['packages']:
project = pkg['project']
if filter_oslo_clients(project):
if project in uc_projects:
new_version = uc[project]
# "Setting %s to version %s" % (project, new_version)
if 'tags' in pkg:
tags = pkg['tags']
prev_version = tags.get(UC_RELEASE)
else:
tags = copy.copy(DEFAULT_RELEASES)
prev_version = None
tags.insert(0, UC_RELEASE, new_version)
if prev_version:
if prev_version != new_version:
print "%s updated from %s to %s" % \
(project, prev_version, new_version)
else:
print "%s %s already up to date" % \
(project, new_version)
else:
print "%s first time pin to %s" % \
(project, new_version)
pkg['tags'] = tags
uc_projects.remove(project)
else:
print "%s not found in upper-constraints" % project
print "Projects not in rdoinfo: %s" % string.join(uc_projects, ' ')
with open(RDO, 'w') as outfile:
outfile.write(yaml.dump(info, Dumper=yaml.RoundTripDumper, indent=2))
if __name__ == '__main__':
update_uc()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment