diff --git a/openstack_releases/cmds/validate.py b/openstack_releases/cmds/validate.py index 3eebc72cdd..a880712528 100644 --- a/openstack_releases/cmds/validate.py +++ b/openstack_releases/cmds/validate.py @@ -283,8 +283,12 @@ def validate_pre_release_progression(deliv, context): return releases = deliv.releases - if len(releases) < 2: - print('this rule only applies to the final release in a series') + + # Milestone-based deliverables cannot directly do a final release + if len(releases) == 1: + if not releases[-1].is_pre_release_version: + context.error('A RC release must be present before final release ' + 'for deliverables following a milestone-based cycle') return previous_release = releases[-2] diff --git a/openstack_releases/tests/test_validate.py b/openstack_releases/tests/test_validate.py index 732ad854c3..a84b5a2148 100644 --- a/openstack_releases/tests/test_validate.py +++ b/openstack_releases/tests/test_validate.py @@ -3248,16 +3248,12 @@ class TestValidatePreReleaseProgression(base.BaseTestCase): self.assertEqual(0, len(self.ctx.warnings)) self.assertEqual(0, len(self.ctx.errors)) - def test_no_rc(self): + def test_missing_rc(self): deliverable_data = yamlutils.loads(textwrap.dedent(''' --- team: Release Management release-model: cycle-with-rc releases: - - version: 1.5.1 - projects: - - repo: openstack/automaton - hash: be2885f544637e6ee6139df7dc7bf937925804dd - version: 1.5.2 projects: - repo: openstack/automaton @@ -3275,7 +3271,7 @@ class TestValidatePreReleaseProgression(base.BaseTestCase): ) self.ctx.show_summary() self.assertEqual(0, len(self.ctx.warnings)) - self.assertEqual(0, len(self.ctx.errors)) + self.assertEqual(1, len(self.ctx.errors)) def test_final_follows_rc(self): deliverable_data = yamlutils.loads(textwrap.dedent('''