require new releases in a series to include a minor version bump
ceilometermiddleware 1.0.1 was released from master as part of the pike series. It should have either been 1.1.0 or on the stable/ocata branch. This extra validation should avoid a similar mistake in the future. Change-Id: I044bf288a659ce144ed3d7896e9057cc361a2cf3 Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
@@ -120,6 +120,28 @@ def validate_series_open(deliverable_info,
|
||||
expected_branch, previous_deliverable_file, series_name))
|
||||
|
||||
|
||||
def validate_series_first(deliverable_info, series_name,
|
||||
mk_warning, mk_error):
|
||||
"The first release in a series needs to end with '.0'."
|
||||
# When the releases entry is present but empty, it's value may not
|
||||
# be a list, so we default to a list using 'or'.
|
||||
releases = deliverable_info.get('releases') or []
|
||||
if len(releases) != 1:
|
||||
# We only have to check this when the first release is being
|
||||
# applied in the file.
|
||||
return
|
||||
if series_name == '_independent':
|
||||
# These rules don't apply to independent projects.
|
||||
return
|
||||
versionstr = releases[0]['version']
|
||||
patchlevel = versionstr.rpartition('.')[-1]
|
||||
if patchlevel != '0':
|
||||
mk_error(
|
||||
'Initial releases in a series must increment at '
|
||||
'least the minor version. %r' % (versionstr,)
|
||||
)
|
||||
|
||||
|
||||
def validate_launchpad(deliverable_info, mk_warning, mk_error):
|
||||
"Look for the launchpad project"
|
||||
try:
|
||||
@@ -696,6 +718,12 @@ def main():
|
||||
mk_warning,
|
||||
mk_error,
|
||||
)
|
||||
validate_series_first(
|
||||
deliverable_info,
|
||||
series_name,
|
||||
mk_warning,
|
||||
mk_error,
|
||||
)
|
||||
validate_branch_prefixes(
|
||||
deliverable_info,
|
||||
mk_warning,
|
||||
|
||||
@@ -1506,3 +1506,118 @@ class TestValidateSeriesOpen(base.BaseTestCase):
|
||||
print(warnings, errors)
|
||||
self.assertEqual(1, len(warnings))
|
||||
self.assertEqual(0, len(errors))
|
||||
|
||||
|
||||
class TestValidateSeriesFirst(base.BaseTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestValidateSeriesFirst, self).setUp()
|
||||
self.tmpdir = self.useFixture(fixtures.TempDir()).path
|
||||
|
||||
def test_version_ok(self):
|
||||
series_a_dir = self.tmpdir + '/a'
|
||||
series_a_filename = series_a_dir + '/automaton.yaml'
|
||||
os.makedirs(series_a_dir)
|
||||
deliverable_data = textwrap.dedent('''
|
||||
---
|
||||
releases:
|
||||
- version: 1.5.0
|
||||
projects:
|
||||
- repo: openstack/automaton
|
||||
hash: be2885f544637e6ee6139df7dc7bf937925804dd
|
||||
''')
|
||||
with open(series_a_filename, 'w') as f:
|
||||
f.write(deliverable_data)
|
||||
warnings = []
|
||||
errors = []
|
||||
deliverable_info = yaml.safe_load(deliverable_data)
|
||||
validate.validate_series_first(
|
||||
deliverable_info,
|
||||
'a',
|
||||
warnings.append,
|
||||
errors.append,
|
||||
)
|
||||
print(warnings, errors)
|
||||
self.assertEqual(0, len(warnings))
|
||||
self.assertEqual(0, len(errors))
|
||||
|
||||
def test_ignore_if_second_release(self):
|
||||
series_a_dir = self.tmpdir + '/a'
|
||||
series_a_filename = series_a_dir + '/automaton.yaml'
|
||||
os.makedirs(series_a_dir)
|
||||
deliverable_data = textwrap.dedent('''
|
||||
---
|
||||
releases:
|
||||
- version: 1.5.1
|
||||
projects:
|
||||
- repo: openstack/automaton
|
||||
hash: be2885f544637e6ee6139df7dc7bf937925804dd
|
||||
- version: 1.5.2
|
||||
projects:
|
||||
- repo: openstack/automaton
|
||||
hash: be2885f544637e6ee6139df7dc7bf937925804dd
|
||||
''')
|
||||
with open(series_a_filename, 'w') as f:
|
||||
f.write(deliverable_data)
|
||||
warnings = []
|
||||
errors = []
|
||||
deliverable_info = yaml.safe_load(deliverable_data)
|
||||
validate.validate_series_first(
|
||||
deliverable_info,
|
||||
'a',
|
||||
warnings.append,
|
||||
errors.append,
|
||||
)
|
||||
print(warnings, errors)
|
||||
self.assertEqual(0, len(warnings))
|
||||
self.assertEqual(0, len(errors))
|
||||
|
||||
def test_ignore_if_no_releases(self):
|
||||
series_a_dir = self.tmpdir + '/a'
|
||||
series_a_filename = series_a_dir + '/automaton.yaml'
|
||||
os.makedirs(series_a_dir)
|
||||
deliverable_data = textwrap.dedent('''
|
||||
---
|
||||
releases:
|
||||
''')
|
||||
with open(series_a_filename, 'w') as f:
|
||||
f.write(deliverable_data)
|
||||
warnings = []
|
||||
errors = []
|
||||
deliverable_info = yaml.safe_load(deliverable_data)
|
||||
validate.validate_series_first(
|
||||
deliverable_info,
|
||||
'a',
|
||||
warnings.append,
|
||||
errors.append,
|
||||
)
|
||||
print(warnings, errors)
|
||||
self.assertEqual(0, len(warnings))
|
||||
self.assertEqual(0, len(errors))
|
||||
|
||||
def test_version_bad(self):
|
||||
series_a_dir = self.tmpdir + '/a'
|
||||
series_a_filename = series_a_dir + '/automaton.yaml'
|
||||
os.makedirs(series_a_dir)
|
||||
deliverable_data = textwrap.dedent('''
|
||||
---
|
||||
releases:
|
||||
- version: 1.5.1
|
||||
projects:
|
||||
- repo: openstack/automaton
|
||||
hash: be2885f544637e6ee6139df7dc7bf937925804dd
|
||||
''')
|
||||
with open(series_a_filename, 'w') as f:
|
||||
f.write(deliverable_data)
|
||||
warnings = []
|
||||
errors = []
|
||||
deliverable_info = yaml.safe_load(deliverable_data)
|
||||
validate.validate_series_first(
|
||||
deliverable_info,
|
||||
'a',
|
||||
warnings.append,
|
||||
errors.append,
|
||||
)
|
||||
print(warnings, errors)
|
||||
self.assertEqual(0, len(warnings))
|
||||
self.assertEqual(1, len(errors))
|
||||
|
||||
Reference in New Issue
Block a user