can only promote COMPLETE draft build

This commit is contained in:
Yu Ming Zhu 2023-10-13 05:10:01 +00:00
parent 6fe42b6212
commit 44d59ecbc7
2 changed files with 43 additions and 0 deletions

View file

@ -15981,6 +15981,13 @@ def _promote_build(build, user=None, strict=True, force=False):
raise koji.GenericError(f'Not a draft build: {binfo}')
else:
return None
state = koji.BUILD_STATES[binfo['state']]
if state != 'COMPLETE':
if strict:
raise koji.GenericError(f"Cannot promote build - {binfo['nvr']}."
f' Reason: state ({state}) is not COMPLETE.')
else:
return None
old_release = binfo['release']
extra = binfo.get('extra') or {}
# get target release in binfo.extra

View file

@ -45,11 +45,13 @@ class TestPromoteBuild(unittest.TestCase):
'name': 'foo',
'version': 'bar',
'release': 'dftrel_1',
'nvr': 'testnvr',
'extra': {
'draft': {
'promoted': False,
'target_release': 'tgtrel_1'
}},
'state': 1,
'draft': True,
'volume_id': 99,
'volume_name': 'X',
@ -123,6 +125,7 @@ class TestPromoteBuild(unittest.TestCase):
'promoted': False
# no target_release
}},
'state': 1,
'draft': True,
'volume_id': 99,
'volume_name': 'X',
@ -140,6 +143,39 @@ class TestPromoteBuild(unittest.TestCase):
self.assertIsNone(ret)
self.assertEqual(len(self.updates), 0)
def test_promote_build_not_completed(self):
draft = {
'id': 1,
'name': 'foo',
'version': 'bar',
'release': 'dftrel_1',
'nvr': 'testnvr',
'extra': {
'draft': {
'promoted': False
# no target_release
}},
'draft': True,
'state': 0,
'volume_id': 99,
'volume_name': 'X',
'task_id': 222
}
self.get_build.return_value = draft
with self.assertRaises(koji.GenericError) as cm:
self.exports.promoteBuild('a-regular-build', strict=True)
self.assertEqual(
str(cm.exception),
f"Cannot promote build - {draft['nvr']}. Reason: state (BUILDING) is not COMPLETE."
)
self.assertEqual(len(self.updates), 0)
ret = self.exports.promoteBuild('a-regular-build', strict=False)
self.assertIsNone(ret)
self.assertEqual(len(self.updates), 0)
def test_promote_build_target_build_exists(self):
old = {
'id': 'any'