use deliverable object model to validate the release-model setting
Rely on the schema to detect invalid release models. Change-Id: I4999a7981479888b17e673a3c280439724a4d9c9 Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
@@ -65,13 +65,6 @@ _CLOSED_SERIES = set([
|
||||
'kilo',
|
||||
'liberty',
|
||||
])
|
||||
_VALID_MODELS = set([
|
||||
'cycle-with-milestones',
|
||||
'cycle-with-intermediary',
|
||||
'cycle-trailing',
|
||||
'independent',
|
||||
'untagged',
|
||||
])
|
||||
_USES_PREVER = set([
|
||||
'cycle-with-milestones',
|
||||
'cycle-trailing',
|
||||
@@ -297,35 +290,38 @@ def get_model(deliverable_info, series_name):
|
||||
return release_model
|
||||
|
||||
|
||||
def validate_model(deliverable_info, series_name, messages):
|
||||
def validate_model(deliv, series_name, messages):
|
||||
"Require a valid release model"
|
||||
header('Validate Model')
|
||||
release_model = get_model(deliverable_info, series_name)
|
||||
if release_model not in _VALID_MODELS:
|
||||
|
||||
if not deliv.is_independent and not deliv.model:
|
||||
# If the deliverable is not independent it must declare a
|
||||
# release model.
|
||||
messages.error(
|
||||
'Unknown release model %r, must be one of %r' %
|
||||
(release_model, sorted(list(_VALID_MODELS)))
|
||||
'no release-model specified',
|
||||
)
|
||||
|
||||
# If the project is release:independent, make sure
|
||||
# that's where the deliverable file is.
|
||||
if release_model == 'independent' and series_name != '_independent':
|
||||
if deliv.model == 'independent' and deliv.series != 'independent':
|
||||
# If the project is release:independent, make sure
|
||||
# that's where the deliverable file is.
|
||||
messages.error(
|
||||
'uses the independent release model '
|
||||
'and should be in the _independent '
|
||||
'directory'
|
||||
)
|
||||
|
||||
# If the project is declaring some other release model, make sure
|
||||
# it is not in h the _independent directory.
|
||||
if series_name == '_independent':
|
||||
model_value = deliverable_info.get('release-model',
|
||||
'independent')
|
||||
if model_value != 'independent':
|
||||
messages.error(
|
||||
'deliverables in the _independent directory '
|
||||
'should all use the independent release model'
|
||||
)
|
||||
# If the project is declaring some other release model, make
|
||||
# sure it is not in the _independent directory. We have to
|
||||
# bypass the model property because that always returns
|
||||
# 'independent' for deliverables in that series.
|
||||
model_value = deliv.data.get('release-model', 'independent')
|
||||
if deliv.series == 'independent' and model_value != 'independent':
|
||||
messages.error(
|
||||
'deliverables in the _independent directory '
|
||||
'should all use the independent release model'
|
||||
)
|
||||
|
||||
LOG.debug('release model {}'.format(deliv.model))
|
||||
|
||||
|
||||
def clone_deliverable(deliv, workdir, messages):
|
||||
@@ -575,6 +571,7 @@ def validate_releases(deliverable_info, zuul_projects,
|
||||
"""
|
||||
header('Validate Releases')
|
||||
|
||||
# TODO(dhellmann): delete get_model
|
||||
release_model = get_model(deliverable_info, series_name)
|
||||
is_independent = (release_model == 'independent')
|
||||
|
||||
@@ -1328,7 +1325,7 @@ def main():
|
||||
validate_bugtracker(deliv, messages)
|
||||
validate_team(deliv, team_data, messages)
|
||||
validate_release_notes(deliv, messages)
|
||||
validate_model(deliverable_info, series_name, messages)
|
||||
validate_model(deliv, series_name, messages)
|
||||
validate_release_type(
|
||||
deliverable_info,
|
||||
zuul_projects,
|
||||
|
||||
@@ -266,9 +266,13 @@ class Deliverable(object):
|
||||
|
||||
@property
|
||||
def model(self):
|
||||
if self.series == '_independent':
|
||||
if self.is_independent:
|
||||
return 'independent'
|
||||
return self._data.get('release-model', '').lstrip('_')
|
||||
return self._data.get('release-model', '')
|
||||
|
||||
@property
|
||||
def is_independent(self):
|
||||
return self.series == 'independent'
|
||||
|
||||
@property
|
||||
def is_releasable(self):
|
||||
|
||||
@@ -345,17 +345,28 @@ class TestValidateModel(base.BaseTestCase):
|
||||
|
||||
def test_no_model_series(self):
|
||||
validate.validate_model(
|
||||
{},
|
||||
deliverable.Deliverable(
|
||||
team='team',
|
||||
series='ocata',
|
||||
name='name',
|
||||
data={},
|
||||
),
|
||||
'ocata',
|
||||
self.msg,
|
||||
)
|
||||
self.msg.show_summary()
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
self.assertEqual(1, len(self.msg.errors))
|
||||
|
||||
def test_no_model_independent(self):
|
||||
validate.validate_model(
|
||||
{},
|
||||
'_independent',
|
||||
deliverable.Deliverable(
|
||||
team='team',
|
||||
series='independent',
|
||||
name='name',
|
||||
data={},
|
||||
),
|
||||
'independent',
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
@@ -363,8 +374,13 @@ class TestValidateModel(base.BaseTestCase):
|
||||
|
||||
def test_with_model_independent_match(self):
|
||||
validate.validate_model(
|
||||
{'release-model': 'independent'},
|
||||
'_independent',
|
||||
deliverable.Deliverable(
|
||||
team='team',
|
||||
series='independent',
|
||||
name='name',
|
||||
data={'release-model': 'independent'},
|
||||
),
|
||||
'independent',
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
@@ -372,8 +388,13 @@ class TestValidateModel(base.BaseTestCase):
|
||||
|
||||
def test_with_model_independent_nomatch(self):
|
||||
validate.validate_model(
|
||||
{'release-model': 'cycle-with-intermediary'},
|
||||
'_independent',
|
||||
deliverable.Deliverable(
|
||||
team='team',
|
||||
series='independent',
|
||||
name='name',
|
||||
data={'release-model': 'cycle-with-intermediary'},
|
||||
),
|
||||
'independent',
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
@@ -381,7 +402,12 @@ class TestValidateModel(base.BaseTestCase):
|
||||
|
||||
def test_with_independent_and_model(self):
|
||||
validate.validate_model(
|
||||
{'release-model': 'independent'},
|
||||
deliverable.Deliverable(
|
||||
team='team',
|
||||
series='ocata',
|
||||
name='name',
|
||||
data={'release-model': 'independent'},
|
||||
),
|
||||
'ocata',
|
||||
self.msg,
|
||||
)
|
||||
@@ -390,22 +416,18 @@ class TestValidateModel(base.BaseTestCase):
|
||||
|
||||
def test_with_model_series(self):
|
||||
validate.validate_model(
|
||||
{'release-model': 'cycle-with-intermediary'},
|
||||
deliverable.Deliverable(
|
||||
team='team',
|
||||
series='ocata',
|
||||
name='name',
|
||||
data={'release-model': 'cycle-with-intermediary'},
|
||||
),
|
||||
'ocata',
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
self.assertEqual(0, len(self.msg.errors))
|
||||
|
||||
def test_with_unknown_model_series(self):
|
||||
validate.validate_model(
|
||||
{'release-model': 'not-a-model'},
|
||||
'ocata',
|
||||
self.msg,
|
||||
)
|
||||
self.assertEqual(0, len(self.msg.warnings))
|
||||
self.assertEqual(1, len(self.msg.errors))
|
||||
|
||||
|
||||
class TestValidateReleases(base.BaseTestCase):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user