mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-04-08 05:08:45 +08:00
Merge #567 Regenerate the repo when module-build-macros is reused to ensure it is in the buildroot.
This commit is contained in:
@@ -245,40 +245,46 @@ def wait(config, session, msg):
|
||||
session.add(build)
|
||||
session.commit()
|
||||
return []
|
||||
else:
|
||||
# Build the module-build-macros
|
||||
# inject dist-tag into buildroot
|
||||
srpm = builder.get_disttag_srpm(
|
||||
disttag=".%s" % get_rpm_release_from_mmd(build.mmd()),
|
||||
module_build=build)
|
||||
|
||||
log.debug("Starting build batch 1")
|
||||
build.batch = 1
|
||||
session.commit()
|
||||
# Build the module-build-macros
|
||||
# inject dist-tag into buildroot
|
||||
srpm = builder.get_disttag_srpm(
|
||||
disttag=".%s" % get_rpm_release_from_mmd(build.mmd()),
|
||||
module_build=build)
|
||||
|
||||
artifact_name = "module-build-macros"
|
||||
task_id, state, reason, nvr = builder.build(artifact_name=artifact_name, source=srpm)
|
||||
log.debug("Starting build batch 1")
|
||||
build.batch = 1
|
||||
session.commit()
|
||||
|
||||
component_build = models.ComponentBuild(
|
||||
module_id=build.id,
|
||||
package=artifact_name,
|
||||
format="rpms",
|
||||
scmurl=srpm,
|
||||
task_id=task_id,
|
||||
state=state,
|
||||
state_reason=reason,
|
||||
nvr=nvr,
|
||||
batch=1,
|
||||
)
|
||||
session.add(component_build)
|
||||
build.transition(config, state="build")
|
||||
session.add(build)
|
||||
session.commit()
|
||||
artifact_name = "module-build-macros"
|
||||
task_id, state, reason, nvr = builder.build(artifact_name=artifact_name, source=srpm)
|
||||
|
||||
# If this build already exists and is done, then fake the repo change event
|
||||
# back to the scheduler
|
||||
component_build = models.ComponentBuild(
|
||||
module_id=build.id,
|
||||
package=artifact_name,
|
||||
format="rpms",
|
||||
scmurl=srpm,
|
||||
task_id=task_id,
|
||||
state=state,
|
||||
state_reason=reason,
|
||||
nvr=nvr,
|
||||
batch=1,
|
||||
)
|
||||
session.add(component_build)
|
||||
build.transition(config, state="build")
|
||||
session.add(build)
|
||||
session.commit()
|
||||
|
||||
# If this build already exists and is done, then regenerate the repository
|
||||
# to ensure module-build-macros is there.
|
||||
if state == koji.BUILD_STATES['COMPLETE']:
|
||||
# TODO: builder.module_build_tag only works for Koji, figure out if
|
||||
# other backends need this implemented (e.g. COPR)
|
||||
return [module_build_service.messaging.KojiRepoChange(
|
||||
'fake msg', builder.module_build_tag['name'])]
|
||||
if config.system == "koji":
|
||||
log.info("module-build-macros is already built. "
|
||||
"Regenerating the repo.")
|
||||
task_id = builder.koji_session.newRepo(
|
||||
builder.module_build_tag['name'])
|
||||
build.new_repo_task_id = task_id
|
||||
session.commit()
|
||||
else:
|
||||
return [module_build_service.messaging.KojiRepoChange(
|
||||
'fake msg', builder.module_build_tag['name'])]
|
||||
|
||||
@@ -22,11 +22,14 @@
|
||||
|
||||
import unittest
|
||||
import mock
|
||||
from mock import patch
|
||||
import module_build_service.messaging
|
||||
import module_build_service.scheduler.handlers.modules
|
||||
import modulemd as _modulemd
|
||||
import os
|
||||
import vcr
|
||||
import koji
|
||||
from tests import conf, db, app, scheduler_init_data
|
||||
from module_build_service import conf
|
||||
|
||||
base_dir = os.path.dirname(os.path.dirname(__file__))
|
||||
@@ -78,3 +81,63 @@ class TestModuleWait(unittest.TestCase):
|
||||
msg = module_build_service.messaging.MBSModule(msg_id=None, module_build_id=1,
|
||||
module_build_state='some state')
|
||||
self.fn(config=self.config, session=self.session, msg=msg)
|
||||
|
||||
@patch("module_build_service.builder.GenericBuilder.default_buildroot_groups",
|
||||
return_value={'build': [], 'srpm-build': []})
|
||||
@patch("module_build_service.builder.KojiModuleBuilder.get_session")
|
||||
@patch("module_build_service.builder.GenericBuilder.create_from_module")
|
||||
@patch('module_build_service.pdc')
|
||||
def test_new_repo_called_when_macros_reused(
|
||||
self, pdc, create_builder, koji_get_session, dbg):
|
||||
"""
|
||||
Test that newRepo is called when module-build-macros build is reused.
|
||||
"""
|
||||
with app.app_context():
|
||||
pdc.get_module_tag.return_value = "module-testmodule-master-20170109091357"
|
||||
scheduler_init_data()
|
||||
koji_session = mock.MagicMock()
|
||||
koji_session.newRepo.return_value = 123456
|
||||
koji_get_session.return_value = koji_session
|
||||
|
||||
builder = mock.MagicMock()
|
||||
builder.koji_session = koji_session
|
||||
builder.module_build_tag = {"name": "module-123-build"}
|
||||
builder.get_disttag_srpm.return_value = 'some srpm disttag'
|
||||
builder.build.return_value = 1234, koji.BUILD_STATES['COMPLETE'], "", "module-build-macros-1-1"
|
||||
create_builder.return_value = builder
|
||||
|
||||
msg = module_build_service.messaging.MBSModule(msg_id=None, module_build_id=1,
|
||||
module_build_state='some state')
|
||||
module_build_service.scheduler.handlers.modules.wait(
|
||||
config=conf, session=db.session, msg=msg)
|
||||
koji_session.newRepo.assert_called_once_with("module-123-build")
|
||||
|
||||
@patch("module_build_service.builder.GenericBuilder.default_buildroot_groups",
|
||||
return_value={'build': [], 'srpm-build': []})
|
||||
@patch("module_build_service.builder.KojiModuleBuilder.get_session")
|
||||
@patch("module_build_service.builder.GenericBuilder.create_from_module")
|
||||
@patch('module_build_service.pdc')
|
||||
def test_new_repo_not_called_when_macros_not_reused(
|
||||
self, pdc, create_builder, koji_get_session, dbg):
|
||||
"""
|
||||
Test that newRepo is not called when module-build-macros build is not reused.
|
||||
"""
|
||||
with app.app_context():
|
||||
pdc.get_module_tag.return_value = "module-testmodule-master-20170109091357"
|
||||
scheduler_init_data()
|
||||
koji_session = mock.MagicMock()
|
||||
koji_session.newRepo.return_value = 123456
|
||||
koji_get_session.return_value = koji_session
|
||||
|
||||
builder = mock.MagicMock()
|
||||
builder.koji_session = koji_session
|
||||
builder.module_build_tag = {"name": "module-123-build"}
|
||||
builder.get_disttag_srpm.return_value = 'some srpm disttag'
|
||||
builder.build.return_value = 1234, koji.BUILD_STATES['BUILDING'], "", "module-build-macros-1-1"
|
||||
create_builder.return_value = builder
|
||||
|
||||
msg = module_build_service.messaging.MBSModule(msg_id=None, module_build_id=1,
|
||||
module_build_state='some state')
|
||||
module_build_service.scheduler.handlers.modules.wait(
|
||||
config=conf, session=db.session, msg=msg)
|
||||
self.assertTrue(not koji_session.newRepo.called)
|
||||
|
||||
Reference in New Issue
Block a user