mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-07-01 01:17:20 +08:00
Make finalization before changing state to done
Signed-off-by: Valerij Maljulin <vmaljuli@redhat.com>
This commit is contained in:
@@ -1205,8 +1205,9 @@ chmod 644 %buildroot/etc/rpm/macros.zz-modules
|
|||||||
return list(nvrs)
|
return list(nvrs)
|
||||||
|
|
||||||
def finalize(self):
|
def finalize(self):
|
||||||
# Only import to koji CG if the module is "done".
|
# Only import to koji CG if the module is "build".
|
||||||
if self.config.koji_enable_content_generator and self.module.state == 3:
|
if self.config.koji_enable_content_generator and \
|
||||||
|
self.module.state == models.BUILD_STATES['build']:
|
||||||
cg = KojiContentGenerator(self.module, self.config)
|
cg = KojiContentGenerator(self.module, self.config)
|
||||||
cg.koji_import()
|
cg.koji_import()
|
||||||
if conf.koji_cg_devel_module:
|
if conf.koji_cg_devel_module:
|
||||||
|
|||||||
@@ -128,12 +128,6 @@ def done(config, session, msg):
|
|||||||
# This is ok.. it's a race condition we can ignore.
|
# This is ok.. it's a race condition we can ignore.
|
||||||
pass
|
pass
|
||||||
|
|
||||||
builder = module_build_service.builder.GenericBuilder.create_from_module(
|
|
||||||
session, build, config)
|
|
||||||
|
|
||||||
# Tell the external buildsystem to wrap up (CG import, createrepo, etc.)
|
|
||||||
builder.finalize()
|
|
||||||
|
|
||||||
build.transition(config, state="ready")
|
build.transition(config, state="ready")
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
|
|||||||
@@ -120,13 +120,9 @@ def done(config, session, msg):
|
|||||||
# So now we can either start a new batch if there are still some to build
|
# So now we can either start a new batch if there are still some to build
|
||||||
# or, if everything is built successfully, then we can bless the module as
|
# or, if everything is built successfully, then we can bless the module as
|
||||||
# complete.
|
# complete.
|
||||||
has_unbuilt_components = False
|
has_unbuilt_components = any(c.state in [None, koji.BUILD_STATES['BUILDING']]
|
||||||
has_failed_components = False
|
for c in module_build.component_builds)
|
||||||
for c in module_build.component_builds:
|
has_failed_components = any(c.state in failed_states for c in module_build.component_builds)
|
||||||
if c.state in [None, koji.BUILD_STATES['BUILDING']]:
|
|
||||||
has_unbuilt_components = True
|
|
||||||
elif (c.state in failed_states):
|
|
||||||
has_failed_components = True
|
|
||||||
|
|
||||||
further_work = []
|
further_work = []
|
||||||
if has_unbuilt_components and not has_failed_components:
|
if has_unbuilt_components and not has_failed_components:
|
||||||
@@ -152,6 +148,9 @@ def done(config, session, msg):
|
|||||||
state=models.BUILD_STATES['failed'],
|
state=models.BUILD_STATES['failed'],
|
||||||
state_reason=state_reason)
|
state_reason=state_reason)
|
||||||
else:
|
else:
|
||||||
|
# Tell the external buildsystem to wrap up (CG import, createrepo, etc.)
|
||||||
|
builder.finalize()
|
||||||
|
|
||||||
module_build.transition(config, state=models.BUILD_STATES['done'])
|
module_build.transition(config, state=models.BUILD_STATES['done'])
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
|
|||||||
@@ -666,7 +666,7 @@ class TestKojiBuilder:
|
|||||||
])
|
])
|
||||||
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiContentGenerator')
|
@mock.patch('module_build_service.builder.KojiModuleBuilder.KojiContentGenerator')
|
||||||
def test_finalize(self, mock_koji_cg_cls, cg_enabled, cg_devel_enabled):
|
def test_finalize(self, mock_koji_cg_cls, cg_enabled, cg_devel_enabled):
|
||||||
self.module.state = 3
|
self.module.state = 2
|
||||||
with patch('module_build_service.config.Config.koji_enable_content_generator',
|
with patch('module_build_service.config.Config.koji_enable_content_generator',
|
||||||
new_callable=mock.PropertyMock, return_value=cg_enabled):
|
new_callable=mock.PropertyMock, return_value=cg_enabled):
|
||||||
with patch('module_build_service.config.Config.koji_cg_devel_module',
|
with patch('module_build_service.config.Config.koji_cg_devel_module',
|
||||||
|
|||||||
@@ -75,6 +75,39 @@ class TestRepoDone:
|
|||||||
source=('https://src.fedoraproject.org/rpms/tangerine?'
|
source=('https://src.fedoraproject.org/rpms/tangerine?'
|
||||||
'#fbed359411a1baa08d4a88e0d12d426fbf8f602c'))
|
'#fbed359411a1baa08d4a88e0d12d426fbf8f602c'))
|
||||||
|
|
||||||
|
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
||||||
|
'KojiModuleBuilder.finalize')
|
||||||
|
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
||||||
|
'KojiModuleBuilder.recover_orphaned_artifact', return_value=[])
|
||||||
|
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
||||||
|
'KojiModuleBuilder.get_average_build_time',
|
||||||
|
return_value=0.0)
|
||||||
|
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
||||||
|
'KojiModuleBuilder.list_tasks_for_components',
|
||||||
|
return_value=[])
|
||||||
|
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
||||||
|
'KojiModuleBuilder.buildroot_ready', return_value=True)
|
||||||
|
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
||||||
|
'KojiModuleBuilder.get_session')
|
||||||
|
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
||||||
|
'KojiModuleBuilder.build')
|
||||||
|
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
||||||
|
'KojiModuleBuilder.buildroot_connect')
|
||||||
|
def test_a_single_match_finalize(self, connect, build_fn, get_session, ready, list_tasks_fn,
|
||||||
|
mock_gabt, mock_uea, finalizer):
|
||||||
|
""" Test that when a repo msg hits us and we have a single match.
|
||||||
|
"""
|
||||||
|
scheduler_init_data(tangerine_state=1)
|
||||||
|
get_session.return_value = mock.Mock(), 'development'
|
||||||
|
build_fn.return_value = 1234, 1, '', None
|
||||||
|
|
||||||
|
msg = module_build_service.messaging.KojiRepoChange(
|
||||||
|
'some_msg_id', 'module-testmodule-master-20170109091357-7c29193d-build')
|
||||||
|
module_build_service.scheduler.handlers.repos.done(
|
||||||
|
config=conf, session=db.session, msg=msg)
|
||||||
|
|
||||||
|
finalizer.assert_called_once()
|
||||||
|
|
||||||
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
||||||
'KojiModuleBuilder.recover_orphaned_artifact', return_value=[])
|
'KojiModuleBuilder.recover_orphaned_artifact', return_value=[])
|
||||||
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
||||||
|
|||||||
Reference in New Issue
Block a user