Merge "Respect history of official projects list"
This commit is contained in:
@@ -15518,51 +15518,123 @@
|
||||
},
|
||||
{
|
||||
"release_name": "Austin",
|
||||
"end_date": "2010-Oct-21"
|
||||
"end_date": "2010-Oct-21",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Bexar",
|
||||
"end_date": "2011-Feb-03"
|
||||
"end_date": "2011-Feb-03",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Cactus",
|
||||
"end_date": "2011-Apr-15"
|
||||
"end_date": "2011-Apr-15",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Diablo",
|
||||
"end_date": "2011-Sep-22"
|
||||
"end_date": "2011-Sep-22",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Essex",
|
||||
"end_date": "2012-Apr-05"
|
||||
"end_date": "2012-Apr-05",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Folsom",
|
||||
"end_date": "2012-Oct-04"
|
||||
"end_date": "2012-Oct-04",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Grizzly",
|
||||
"end_date": "2013-Apr-04"
|
||||
"end_date": "2013-Apr-04",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Havana",
|
||||
"end_date": "2013-Oct-17"
|
||||
"end_date": "2013-Oct-17",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Icehouse",
|
||||
"end_date": "2014-Apr-17"
|
||||
"end_date": "2014-Apr-17",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Juno",
|
||||
"end_date": "2014-Oct-16"
|
||||
"end_date": "2014-Oct-16",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Kilo",
|
||||
"end_date": "2015-Apr-30"
|
||||
"end_date": "2015-Apr-30",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "early_big_tent",
|
||||
"source": "https://git.openstack.org/cgit/openstack/governance/plain/reference/projects.yaml?id=c13377dd51e78977d673b64a9a47915b7e4bfe1d"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Liberty",
|
||||
"end_date": "2015-Oct-15"
|
||||
"end_date": "2015-Oct-15",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "big_tent",
|
||||
"source": "https://git.openstack.org/cgit/openstack/governance/plain/reference/projects.yaml"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"mail_lists": [
|
||||
|
||||
@@ -64,6 +64,9 @@
|
||||
},
|
||||
"end_date": {
|
||||
"$ref": "#/definitions/date_format"
|
||||
},
|
||||
"refs": {
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"required": ["release_name", "end_date"],
|
||||
|
||||
@@ -127,51 +127,123 @@
|
||||
},
|
||||
{
|
||||
"release_name": "Austin",
|
||||
"end_date": "2010-Oct-21"
|
||||
"end_date": "2010-Oct-21",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Bexar",
|
||||
"end_date": "2011-Feb-03"
|
||||
"end_date": "2011-Feb-03",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Cactus",
|
||||
"end_date": "2011-Apr-15"
|
||||
"end_date": "2011-Apr-15",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Diablo",
|
||||
"end_date": "2011-Sep-22"
|
||||
"end_date": "2011-Sep-22",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Essex",
|
||||
"end_date": "2012-Apr-05"
|
||||
"end_date": "2012-Apr-05",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Folsom",
|
||||
"end_date": "2012-Oct-04"
|
||||
"end_date": "2012-Oct-04",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Grizzly",
|
||||
"end_date": "2013-Apr-04"
|
||||
"end_date": "2013-Apr-04",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Havana",
|
||||
"end_date": "2013-Oct-17"
|
||||
"end_date": "2013-Oct-17",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Icehouse",
|
||||
"end_date": "2014-Apr-17"
|
||||
"end_date": "2014-Apr-17",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Juno",
|
||||
"end_date": "2014-Oct-16"
|
||||
"end_date": "2014-Oct-16",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "legacy",
|
||||
"source": "http://git.openstack.org/cgit/openstack/governance/plain/reference/programs.yaml?id=5923e6e2eacf961cf2d97b21b0b38cc29461b7af"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Kilo",
|
||||
"end_date": "2015-Apr-30"
|
||||
"end_date": "2015-Apr-30",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "early_big_tent",
|
||||
"source": "https://git.openstack.org/cgit/openstack/governance/plain/reference/projects.yaml?id=c13377dd51e78977d673b64a9a47915b7e4bfe1d"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"release_name": "Liberty",
|
||||
"end_date": "2015-Oct-15"
|
||||
"end_date": "2015-Oct-15",
|
||||
"refs": {
|
||||
"governance": {
|
||||
"type": "big_tent",
|
||||
"source": "https://git.openstack.org/cgit/openstack/governance/plain/reference/projects.yaml"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ Stackalytics {% if page_title %}| {{ page_title }} {% endif %}
|
||||
</div>
|
||||
|
||||
<div class="drop">
|
||||
<label for="project_type_selector" title="Project type groups modules of same kind: official (integrated-release, other) or belonging to same organization (openstack, stackforge)">Project Type</label>
|
||||
<label for="project_type_selector" title="Project type groups modules of same kind: all official (listed in governance's projects.yaml), having the same tag and complementary">Project Type</label>
|
||||
<input type="hidden" id="project_type_selector" style="width: 140px" data-placeholder="Select project type"/>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -33,19 +33,51 @@ def _make_module_group(module_groups, name):
|
||||
return m
|
||||
|
||||
|
||||
def read_projects_yaml(project_list_uri):
|
||||
LOG.debug('Process list of projects from uri: %s', project_list_uri)
|
||||
content = yaml.safe_load(utils.read_uri(project_list_uri))
|
||||
module_groups = collections.defaultdict(lambda: {'modules': []})
|
||||
def read_legacy_programs_yaml(module_groups, release_name, content):
|
||||
all_official = module_groups['openstack-official']
|
||||
|
||||
all_official = _make_module_group(module_groups, 'openstack-official')
|
||||
for name, info in six.iteritems(content):
|
||||
# for one program
|
||||
# group_id = name.lower()
|
||||
# if 'codename' in info:
|
||||
# name = '%s (%s)' % (info['codename'], name)
|
||||
# group_id = '%s-group' % info['codename'].lower()
|
||||
#
|
||||
# module_groups[group_id]['module_group_name'] = name
|
||||
# module_groups[group_id]['tag'] = 'program'
|
||||
|
||||
for tag in TAGS:
|
||||
_make_module_group(module_groups, tag)
|
||||
for module in info['projects']:
|
||||
mn = module['repo'].split('/')[1] # module_name
|
||||
|
||||
# module_groups[group_id]['releases'][release_name].append(mn)
|
||||
all_official['releases'][release_name].append(mn)
|
||||
|
||||
|
||||
def read_early_big_tent_projects_yaml(module_groups, release_name, content):
|
||||
all_official = module_groups['openstack-official']
|
||||
|
||||
for name, info in six.iteritems(content):
|
||||
# group_id = '%s-group' % name.lower()
|
||||
# module_groups[group_id]['module_group_name'] = '%s Official' % name
|
||||
# module_groups[group_id]['tag'] = 'program'
|
||||
|
||||
for module in info['projects']:
|
||||
repo_split = module['repo'].split('/')
|
||||
if len(repo_split) < 2:
|
||||
continue # valid repo must be in form of 'org/module'
|
||||
mn = repo_split[1]
|
||||
|
||||
# module_groups[group_id]['releases'][release_name].append(mn)
|
||||
all_official['releases'][release_name].append(mn)
|
||||
|
||||
|
||||
def read_big_tent_projects_yaml(module_groups, release_name, content):
|
||||
all_official = module_groups['openstack-official']
|
||||
|
||||
for name, project in six.iteritems(content):
|
||||
group_id = '%s-group' % name.lower()
|
||||
module_groups[group_id]['module_group_name'] = '%s Official' % name
|
||||
module_groups[group_id]['module_group_name'] = (
|
||||
'%s Official' % name.title())
|
||||
module_groups[group_id]['tag'] = 'program'
|
||||
|
||||
for d_name, deliverable in six.iteritems(project['deliverables']):
|
||||
@@ -53,20 +85,66 @@ def read_projects_yaml(project_list_uri):
|
||||
repo_split = repo.split('/')
|
||||
if len(repo_split) < 2:
|
||||
continue # valid repo must be in form of 'org/module'
|
||||
module_name = repo_split[1]
|
||||
|
||||
module_groups[group_id]['modules'].append(module_name)
|
||||
mn = repo_split[1] # module_name
|
||||
|
||||
all_official['modules'].append(module_name)
|
||||
module_groups[group_id]['modules'].append(mn)
|
||||
all_official['releases'][release_name].append(mn)
|
||||
|
||||
tags = deliverable.get('tags', [])
|
||||
for tag in tags:
|
||||
if tag in TAGS:
|
||||
module_groups[tag]['modules'].append(module_name)
|
||||
module_groups[tag]['modules'].append(mn)
|
||||
|
||||
|
||||
def _make_default_module_groups():
|
||||
# create default module groups
|
||||
module_groups = collections.defaultdict(lambda: {'modules': []})
|
||||
|
||||
# openstack official
|
||||
_make_module_group(module_groups, 'openstack-official')
|
||||
module_groups['openstack-official']['releases'] = (
|
||||
collections.defaultdict(list))
|
||||
|
||||
# tags
|
||||
for tag in TAGS:
|
||||
_make_module_group(module_groups, tag)
|
||||
|
||||
return module_groups
|
||||
|
||||
|
||||
GOVERNANCE_PROCESSORS = {
|
||||
'legacy': read_legacy_programs_yaml,
|
||||
'early_big_tent': read_early_big_tent_projects_yaml,
|
||||
'big_tent': read_big_tent_projects_yaml,
|
||||
}
|
||||
|
||||
|
||||
def process_official_list(releases):
|
||||
module_groups = _make_default_module_groups()
|
||||
releases_with_refs = (r for r in releases if r.get('refs'))
|
||||
|
||||
for release in releases_with_refs:
|
||||
ref_governance = release['refs'].get('governance')
|
||||
if not ref_governance:
|
||||
continue
|
||||
|
||||
gov_type = ref_governance['type']
|
||||
gov_source = ref_governance['source']
|
||||
release_name = release['release_name'].lower()
|
||||
|
||||
LOG.debug('Process governance content from uri: %s', gov_source)
|
||||
content = yaml.safe_load(utils.read_uri(gov_source))
|
||||
|
||||
GOVERNANCE_PROCESSORS[gov_type](module_groups, release_name, content)
|
||||
|
||||
# set ids for module groups
|
||||
for group_id, group in six.iteritems(module_groups):
|
||||
group['id'] = group_id
|
||||
group['modules'].sort()
|
||||
|
||||
if 'releases' in group:
|
||||
for gr in six.itervalues(group['releases']):
|
||||
gr.sort()
|
||||
|
||||
return module_groups
|
||||
|
||||
@@ -240,8 +240,10 @@ def apply_corrections(uri, runtime_storage_inst):
|
||||
|
||||
def process_project_list(runtime_storage_inst, project_list_uri):
|
||||
module_groups = runtime_storage_inst.get_by_key('module_groups') or {}
|
||||
releases = runtime_storage_inst.get_by_key('releases') or {}
|
||||
|
||||
official_module_groups = governance.process_official_list(releases)
|
||||
|
||||
official_module_groups = governance.read_projects_yaml(project_list_uri)
|
||||
LOG.debug('Update module groups with official: %s', official_module_groups)
|
||||
module_groups.update(official_module_groups)
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ Sahara:
|
||||
class TestGovernance(testtools.TestCase):
|
||||
|
||||
@mock.patch('stackalytics.processor.utils.read_uri')
|
||||
def test_read_official_projects_yaml(self, read_uri):
|
||||
def test_process_official_list(self, read_uri):
|
||||
read_uri.return_value = SAMPLE
|
||||
|
||||
expected = {
|
||||
@@ -95,13 +95,21 @@ class TestGovernance(testtools.TestCase):
|
||||
'openstack-official': {
|
||||
'id': 'openstack-official',
|
||||
'module_group_name': 'openstack-official',
|
||||
'modules': ['python-saharaclient', 'sahara',
|
||||
'sahara-dashboard', 'sahara-extra',
|
||||
'sahara-image-elements', 'sahara-specs'],
|
||||
'modules': [],
|
||||
'releases': {
|
||||
'liberty': ['python-saharaclient', 'sahara',
|
||||
'sahara-dashboard', 'sahara-extra',
|
||||
'sahara-image-elements', 'sahara-specs'],
|
||||
},
|
||||
'tag': 'project_type'
|
||||
},
|
||||
}
|
||||
|
||||
actual = governance.read_projects_yaml('uri')
|
||||
releases = [{
|
||||
'release_name': 'Liberty',
|
||||
'refs': {'governance': {'type': 'big_tent', 'source': 'uri'}}
|
||||
}]
|
||||
|
||||
actual = governance.process_official_list(releases)
|
||||
|
||||
self.assertEqual(expected, actual)
|
||||
|
||||
Reference in New Issue
Block a user