use deliverable object model to validate the release notes links
Add an extra check that there are no notes links for repos not related to the deliverable. Change-Id: I7f0fb614cff8ae38c907670da484c3c75599c7c0 Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
parent
1e9eab181a
commit
9583477190
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: python-cliff
|
||||
team: OpenStackClient
|
||||
type: library
|
||||
releases:
|
||||
- version: "0.1"
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: python-cliff
|
||||
team: OpenStackClient
|
||||
type: library
|
||||
releases:
|
||||
- version: "1.3"
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: python-cliff
|
||||
team: OpenStackClient
|
||||
type: library
|
||||
releases:
|
||||
- version: 1.3.3
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: python-cliff
|
||||
team: OpenStackClient
|
||||
type: library
|
||||
releases:
|
||||
- version: 1.5.0
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: python-cliff
|
||||
team: OpenStackClient
|
||||
type: library
|
||||
releases:
|
||||
- version: 1.7.0
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: python-stevedore
|
||||
team: oslo
|
||||
type: library
|
||||
releases:
|
||||
- version: 1.0.0
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: django-openstack-auth
|
||||
team: horizon
|
||||
type: library
|
||||
releases:
|
||||
- version: 1.2.0
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: python-cliff
|
||||
team: OpenStackClient
|
||||
type: library
|
||||
releases:
|
||||
- version: 1.8.0
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: python-stevedore
|
||||
team: oslo
|
||||
type: library
|
||||
releases:
|
||||
- version: 1.1.0
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: python-tooz
|
||||
team: oslo
|
||||
type: library
|
||||
releases:
|
||||
- version: "0.10"
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: django-openstack-auth
|
||||
team: horizon
|
||||
type: library
|
||||
releases:
|
||||
- version: 1.3.0
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: python-cliff
|
||||
team: OpenStackClient
|
||||
type: library
|
||||
releases:
|
||||
- version: 1.13.0
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: python-mox3
|
||||
team: oslo
|
||||
type: library
|
||||
releases:
|
||||
- version: 0.8.0
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: python-stevedore
|
||||
team: oslo
|
||||
type: library
|
||||
releases:
|
||||
- version: 1.4.0
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: python-tooz
|
||||
team: oslo
|
||||
type: library
|
||||
releases:
|
||||
- version: 0.14.0
|
||||
projects:
|
||||
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
launchpad: vmware-nsx
|
||||
team: neutron
|
||||
type: library
|
||||
releases:
|
||||
- version: 1.0.0
|
||||
projects:
|
||||
|
@ -252,14 +252,24 @@ def validate_team(deliv, team_data, messages):
|
||||
LOG.debug('owned by team {}'.format(deliv.team))
|
||||
|
||||
|
||||
def validate_release_notes(deliverable_info, messages):
|
||||
def validate_release_notes(deliv, messages):
|
||||
"Make sure the release notes page exists, if it is specified."
|
||||
header('Validate Release Notes')
|
||||
if 'release-notes' not in deliverable_info:
|
||||
notes_link = deliv.release_notes
|
||||
if not notes_link:
|
||||
print('no release-notes given')
|
||||
return
|
||||
notes_link = deliverable_info['release-notes']
|
||||
if isinstance(notes_link, dict):
|
||||
# Dictionary mapping repositories to links. We don't want any
|
||||
# repositories that are not known, so check that as well as
|
||||
# the actual links.
|
||||
for repo_name in sorted(notes_link.keys()):
|
||||
if repo_name not in deliv.known_repo_names:
|
||||
messages.error(
|
||||
'linking to release notes for unknown '
|
||||
'repository {}'.format(
|
||||
repo_name)
|
||||
)
|
||||
links = list(notes_link.values())
|
||||
else:
|
||||
links = [notes_link]
|
||||
@ -268,22 +278,8 @@ def validate_release_notes(deliverable_info, messages):
|
||||
if (rn_resp.status_code // 100) != 2:
|
||||
messages.error('Could not fetch release notes page %s: %s' %
|
||||
(link, rn_resp.status_code))
|
||||
|
||||
|
||||
def validate_type(deliverable_info, messages):
|
||||
"Determine the deliverable type. Require an explicit value."
|
||||
header('Validate Type')
|
||||
deliverable_type = deliverable_info.get('type')
|
||||
if not deliverable_type:
|
||||
messages.error(
|
||||
'No deliverable type, must be one of %r' %
|
||||
sorted(list(_VALID_TYPES))
|
||||
)
|
||||
elif deliverable_type not in _VALID_TYPES:
|
||||
messages.error(
|
||||
'Invalid deliverable type %r, must be one of %r' %
|
||||
(deliverable_type, sorted(list(_VALID_TYPES)))
|
||||
)
|
||||
else:
|
||||
LOG.debug('{} OK'.format(link))
|
||||
|
||||
|
||||
def get_model(deliverable_info, series_name):
|
||||
@ -1327,11 +1323,11 @@ def main():
|
||||
name=deliverable_name,
|
||||
data=deliverable_info,
|
||||
)
|
||||
|
||||
clone_deliverable(deliv, workdir, messages)
|
||||
validate_bugtracker(deliv, messages)
|
||||
validate_team(deliv, team_data, messages)
|
||||
validate_release_notes(deliverable_info, messages)
|
||||
validate_type(deliverable_info, messages)
|
||||
validate_release_notes(deliv, messages)
|
||||
validate_model(deliverable_info, series_name, messages)
|
||||
validate_release_type(
|
||||
deliverable_info,
|
||||
|
@ -257,6 +257,10 @@ class Deliverable(object):
|
||||
for name, repo in sorted(self._repos.items()):
|
||||
yield repo
|
||||
|
||||
@property
|
||||
def known_repo_names(self):
|
||||
return set(self._repos.keys())
|
||||
|
||||
def get_repo(self, name):
|
||||
return self._repos[name]
|
||||
|
||||
|
@ -8,6 +8,7 @@ additionalProperties: false
|
||||
|
||||
required:
|
||||
- team
|
||||
- type
|
||||
|
||||
properties:
|
||||
team:
|
||||
|
@ -202,7 +202,12 @@ class TestValidateReleaseNotes(base.BaseTestCase):
|
||||
|
||||
def test_no_link(self):
|
||||
validate.validate_release_notes(
|
||||
{},
|
||||
deliverable.Deliverable(
|
||||
team='team',
|
||||
series='series',
|
||||
name='name',
|
||||
data={},
|
||||
),
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
@ -210,7 +215,14 @@ class TestValidateReleaseNotes(base.BaseTestCase):
|
||||
|
||||
def test_invalid_link(self):
|
||||
validate.validate_release_notes(
|
||||
{'release-notes': 'https://docs.openstack.org/no-such-page'},
|
||||
deliverable.Deliverable(
|
||||
team='team',
|
||||
series='series',
|
||||
name='name',
|
||||
data={
|
||||
'release-notes': 'https://docs.openstack.org/no-such-page',
|
||||
},
|
||||
),
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
@ -218,8 +230,13 @@ class TestValidateReleaseNotes(base.BaseTestCase):
|
||||
|
||||
def test_valid_link(self):
|
||||
validate.validate_release_notes(
|
||||
{'release-notes':
|
||||
'https://docs.openstack.org/releasenotes/oslo.config'},
|
||||
deliverable.Deliverable(
|
||||
team='team',
|
||||
series='series',
|
||||
name='name',
|
||||
data={'release-notes':
|
||||
'https://docs.openstack.org/releasenotes/oslo.config'},
|
||||
),
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
@ -227,11 +244,41 @@ class TestValidateReleaseNotes(base.BaseTestCase):
|
||||
|
||||
def test_invalid_link_multi(self):
|
||||
validate.validate_release_notes(
|
||||
{
|
||||
'release-notes': {
|
||||
'openstack/releases': 'https://docs.openstack.org/no-such-page',
|
||||
}
|
||||
},
|
||||
deliverable.Deliverable(
|
||||
team='team',
|
||||
series='series',
|
||||
name='name',
|
||||
data={
|
||||
'repository-settings': {
|
||||
'openstack/releases': {},
|
||||
},
|
||||
'release-notes': {
|
||||
'openstack/releases':
|
||||
'https://docs.openstack.org/no-such-page',
|
||||
}
|
||||
},
|
||||
),
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
self.assertEqual(1, len(self.msg.errors))
|
||||
|
||||
def test_unknown_repo(self):
|
||||
validate.validate_release_notes(
|
||||
deliverable.Deliverable(
|
||||
team='team',
|
||||
series='series',
|
||||
name='name',
|
||||
data={
|
||||
'repository-settings': {
|
||||
'openstack/release-test': {},
|
||||
},
|
||||
'release-notes': {
|
||||
'openstack/oslo.config':
|
||||
'https://docs.openstack.org/releasenotes/oslo.config',
|
||||
}
|
||||
},
|
||||
),
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
@ -239,42 +286,20 @@ class TestValidateReleaseNotes(base.BaseTestCase):
|
||||
|
||||
def test_valid_link_multi(self):
|
||||
validate.validate_release_notes(
|
||||
{
|
||||
'release-notes': {
|
||||
'openstack/releases': 'https://docs.openstack.org/releasenotes/oslo.config',
|
||||
}
|
||||
},
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
self.assertEqual(0, len(self.msg.errors))
|
||||
|
||||
|
||||
class TestValidateDeliverableType(base.BaseTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.msg = validate.MessageCollector()
|
||||
|
||||
def test_no_type(self):
|
||||
validate.validate_type(
|
||||
{},
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
self.assertEqual(1, len(self.msg.errors))
|
||||
|
||||
def test_invalid_type(self):
|
||||
validate.validate_type(
|
||||
{'type': 'not-valid'},
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
self.assertEqual(1, len(self.msg.errors))
|
||||
|
||||
def test_valid_type(self):
|
||||
validate.validate_type(
|
||||
{'type': 'library'},
|
||||
deliverable.Deliverable(
|
||||
team='team',
|
||||
series='series',
|
||||
name='name',
|
||||
data={
|
||||
'repository-settings': {
|
||||
'openstack/releases': {},
|
||||
},
|
||||
'release-notes': {
|
||||
'openstack/releases':
|
||||
'https://docs.openstack.org/releasenotes/oslo.config',
|
||||
},
|
||||
},
|
||||
),
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
|
Loading…
x
Reference in New Issue
Block a user