mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-04-04 03:08:21 +08:00
Changed the filters so they execute when everything is build
Signed-off-by: Martin Curlej <mcurlej@redhat.com>
This commit is contained in:
@@ -178,10 +178,11 @@ class MockModuleBuilder(GenericBuilder):
|
||||
if not rpm.endswith(".rpm"):
|
||||
continue
|
||||
|
||||
# If RPM is filtered-out, do not add it to artifacts list.
|
||||
nvr = kobo.rpmlib.parse_nvr(rpm)
|
||||
if nvr["name"] in m1_mmd.filter.rpms:
|
||||
continue
|
||||
if m1.last_batch_id() == m1.batch:
|
||||
# If RPM is filtered-out, do not add it to artifacts list.
|
||||
nvr = kobo.rpmlib.parse_nvr(rpm)
|
||||
if nvr["name"] in m1_mmd.filter.rpms:
|
||||
continue
|
||||
|
||||
pkglist_f.write(rpm + '\n')
|
||||
rpm = rpm[:-len(".rpm")]
|
||||
|
||||
@@ -181,6 +181,10 @@ class ModuleBuild(MBSBase):
|
||||
if component.batch == self.batch
|
||||
]
|
||||
|
||||
def last_batch_id(self):
|
||||
""" Returns the id of the last batch """
|
||||
return max([build.batch for build in self.component_builds])
|
||||
|
||||
def up_to_current_batch(self, state=None):
|
||||
"""
|
||||
Returns all components of this module in the current batch and
|
||||
|
||||
31
tests/staged_data/testmodule-with-filters.yaml
Normal file
31
tests/staged_data/testmodule-with-filters.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
document: modulemd
|
||||
version: 1
|
||||
data:
|
||||
summary: A test module in all its beautiful beauty
|
||||
description: >-
|
||||
This module demonstrates how to write simple modulemd files And
|
||||
can be used for testing the build and release pipeline.
|
||||
license:
|
||||
module: [ MIT ]
|
||||
dependencies:
|
||||
buildrequires:
|
||||
platform: master
|
||||
# Buildrequire Host until MBS implements transitive deps
|
||||
host: master
|
||||
requires:
|
||||
platform: master
|
||||
references:
|
||||
community: https://docs.pagure.org/modularity/
|
||||
documentation: https://fedoraproject.org/wiki/Fedora_Packaging_Guidelines_for_Modules
|
||||
filter:
|
||||
rpms:
|
||||
- ed
|
||||
components:
|
||||
rpms:
|
||||
ed:
|
||||
rationale: A build dependency of mksh, to test buildorder.
|
||||
ref: master
|
||||
mksh:
|
||||
rationale: The main component of this module.
|
||||
ref: master
|
||||
buildorder: 1
|
||||
147
tests/test_builder/test_mock.py
Normal file
147
tests/test_builder/test_mock.py
Normal file
@@ -0,0 +1,147 @@
|
||||
import os
|
||||
import unittest
|
||||
import mock
|
||||
import koji
|
||||
import tempfile
|
||||
import shutil
|
||||
|
||||
import kobo.rpmlib
|
||||
|
||||
from module_build_service import conf
|
||||
from module_build_service.models import ModuleBuild, ComponentBuild, make_session
|
||||
from module_build_service.builder import MockModuleBuilder
|
||||
from tests import db, init_data
|
||||
|
||||
|
||||
class TestMockModuleBuilder(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
db.drop_all()
|
||||
db.create_all()
|
||||
self.resultdir = tempfile.mkdtemp()
|
||||
|
||||
def tearDown(self):
|
||||
init_data()
|
||||
shutil.rmtree(self.resultdir)
|
||||
|
||||
def _create_module_with_filters(self, session, batch, state):
|
||||
comp_builds = [
|
||||
{
|
||||
"module_id": 1,
|
||||
"package": "ed",
|
||||
"format": "rpms",
|
||||
"scmurl": ("git://pkgs.fedoraproject.org/rpms/ed"
|
||||
"?#01bf8330812fea798671925cc537f2f29b0bd216"),
|
||||
"batch": 2,
|
||||
"ref": "01bf8330812fea798671925cc537f2f29b0bd216"
|
||||
},
|
||||
{
|
||||
"module_id": 1,
|
||||
"package": "mksh",
|
||||
"format": "rpms",
|
||||
"scmurl": ("git://pkgs.fedoraproject.org/rpms/mksh"
|
||||
"?#f70fd11ddf96bce0e2c64309706c29156b39141d"),
|
||||
"batch": 3,
|
||||
"ref": "f70fd11ddf96bce0e2c64309706c29156b39141d"
|
||||
},
|
||||
]
|
||||
|
||||
base_dir = os.path.abspath(os.path.dirname(__file__))
|
||||
modulemd_path = os.path.join(
|
||||
base_dir, '..', 'staged_data', 'testmodule-with-filters.yaml')
|
||||
|
||||
with open(modulemd_path, "r") as fd:
|
||||
module = ModuleBuild.create(
|
||||
session,
|
||||
conf,
|
||||
name="mbs-testmodule",
|
||||
stream="test",
|
||||
version="20171027111452",
|
||||
modulemd=fd.read(),
|
||||
scmurl="file:///testdir",
|
||||
username="test",
|
||||
)
|
||||
module.koji_tag = "module-mbs-testmodule-test-20171027111452"
|
||||
md = module.mmd()
|
||||
md.xmd = {
|
||||
'mbs': {
|
||||
'rpms': {
|
||||
'ed': {'ref': '01bf8330812fea798671925cc537f2f29b0bd216'},
|
||||
'mksh': {'ref': 'f70fd11ddf96bce0e2c64309706c29156b39141d'}
|
||||
},
|
||||
'buildrequires':
|
||||
{
|
||||
'host': {
|
||||
'version': '20171024133034',
|
||||
'filtered_rpms': [],
|
||||
'stream': 'master',
|
||||
'ref': '6df253bb3c53e84706c01b8ab2d5cac24f0b6d45'
|
||||
},
|
||||
'platform': {
|
||||
'version': '20171028112959',
|
||||
'filtered_rpms': [],
|
||||
'stream': 'master',
|
||||
'ref': '4f7787370a931d57421f9f9555fc41c3e31ff1fa'}
|
||||
},
|
||||
'scmurl': 'file:///testdir',
|
||||
'commit': '5566bc792ec7a03bb0e28edd1b104a96ba342bd8',
|
||||
'requires': {
|
||||
'platform': {
|
||||
'version': '20171028112959',
|
||||
'filtered_rpms': [],
|
||||
'stream': 'master',
|
||||
'ref': '4f7787370a931d57421f9f9555fc41c3e31ff1fa'}
|
||||
}
|
||||
}
|
||||
}
|
||||
module.modulemd = md.dumps()
|
||||
module.batch = batch
|
||||
session.add(module)
|
||||
|
||||
for build in comp_builds:
|
||||
cb = ComponentBuild(**dict(build, format="rpms", state=state))
|
||||
session.add(cb)
|
||||
session.commit()
|
||||
|
||||
return module
|
||||
|
||||
@mock.patch("module_build_service.conf.system", new="mock")
|
||||
def test_createrepo_filter_last_batch(self, *args):
|
||||
with make_session(conf) as session:
|
||||
module = self._create_module_with_filters(session, 3, koji.BUILD_STATES['COMPLETE'])
|
||||
|
||||
builder = MockModuleBuilder("mcurlej", module, conf, module.koji_tag,
|
||||
module.component_builds)
|
||||
builder.resultsdir = self.resultdir
|
||||
rpms = [
|
||||
"ed-1.14.1-4.module+24957a32.x86_64.rpm",
|
||||
"mksh-56b-1.module+24957a32.x86_64.rpm",
|
||||
"module-build-macros-0.1-1.module+24957a32.noarch.rpm"
|
||||
]
|
||||
with mock.patch("os.listdir", return_value=rpms):
|
||||
builder._createrepo()
|
||||
|
||||
with open(os.path.join(self.resultdir, "pkglist"), "r") as fd:
|
||||
pkglist = fd.read().strip()
|
||||
rpm_names = [kobo.rpmlib.parse_nvr(rpm)["name"] for rpm in pkglist.split('\n')]
|
||||
assert "ed" not in rpm_names
|
||||
|
||||
@mock.patch("module_build_service.conf.system", new="mock")
|
||||
def test_createrepo_not_last_batch(self):
|
||||
with make_session(conf) as session:
|
||||
module = self._create_module_with_filters(session, 2, koji.BUILD_STATES['COMPLETE'])
|
||||
|
||||
builder = MockModuleBuilder("mcurlej", module, conf, module.koji_tag,
|
||||
module.component_builds)
|
||||
builder.resultsdir = self.resultdir
|
||||
rpms = [
|
||||
"ed-1.14.1-4.module+24957a32.x86_64.rpm",
|
||||
"mksh-56b-1.module+24957a32.x86_64.rpm",
|
||||
]
|
||||
with mock.patch("os.listdir", return_value=rpms):
|
||||
builder._createrepo()
|
||||
|
||||
with open(os.path.join(self.resultdir, "pkglist"), "r") as fd:
|
||||
pkglist = fd.read().strip()
|
||||
rpm_names = [kobo.rpmlib.parse_nvr(rpm)["name"] for rpm in pkglist.split('\n')]
|
||||
assert "ed" in rpm_names
|
||||
Reference in New Issue
Block a user