TT#190200 build: support several levels of dependencies

Change-Id: I19a930fe95bb292912dadc67440b750533c34b20
pull/9/head
Victor Seva 3 years ago
parent 9692d18b06
commit cc47f0acac

@ -0,0 +1,317 @@
distris:
- release-mr11.0
- bullseye
debian_release: bullseye
release-mr11.0: &packages
# TT#44190 TT#182900 needed by ngcp-panel
- grafana: 9.0.2
# TT#69950 needed by bulk-processor, not available in Debian (project abandoned upstream)
- libexcel-reader-xlsx-perl: 0.00~git20161017.3b576a55-0.1sipwise1~bpo11+1
# TT#73105 system testing
- goss: 0.3.14-0.1~bpo11+1sipwise1
# TT#44918 Needed for PRO/Carrier
- ngcp-pxe-boot: 0.7.2.2+0~sipwise20220607
# TT#126500: Fix race in reboot uptime timestamp computation and comparison
- monit: 5.27.2-1sipwise1~bpo11+1
# TT#59330 rebuild of package pulled from non-free, required for snmp-agent
- snmp-mibs-downloader: 1.5~bpo11+1
# MT#19499, TT#126650: local robustness patches
- net-snmp: 5.9+dfsg-3sipwise1~bpo11+2
# TT#149552 needed by lua-sql-kamailio
- lua-sql: 2.6.0-1~bpo11+1
# TT#154255 replacement of redis, not in debian
- keydb: 6.3.1-1~bpo11+1
# TT#140500 needed by prometheus stack
- dh-golang: 1.53~bpo11+1
- golang-1.17: 1.17.8-1~bpo11+1
- golang-defaults: 1.17~1~bpo11+2
- golang-github-alecthomas-units: 0.0~git20211218.b94a6e3-1~bpo11+1
- golang-github-allegro-bigcache: 2.2.5-5~bpo11+1
- golang-github-andybalholm-brotli: 1.0.4-3~bpo11+1
- golang-github-beevik-ntp: 0.3.0-4~bpo11+1
- golang-github-cheggaaa-pb.v3: 3.0.5-2~bpo11+1
- golang-github-dennwc-varint: 1.0.0-2~bpo11+1
- golang-github-ema-qdisc: 0.0~git20200603.62d0308-2~bpo11+1
- golang-github-go-kit-log: 0.2.0-3~bpo11+1
- golang-github-go-openapi-analysis: 0.21.2-1~bpo11+1
- golang-github-go-openapi-errors: 0.20.2-1~bpo11+1
- golang-github-go-openapi-jsonpointer: 0.19.5-3~bpo11+1
- golang-github-go-openapi-jsonreference: 0.19.6-2~bpo11+1
- golang-github-go-openapi-loads: 0.21.1-2~bpo11+1
- golang-github-go-openapi-runtime: 0.23.3-1~bpo11+1
- golang-github-go-openapi-spec: 0.20.4-1~bpo11+1
- golang-github-go-openapi-strfmt: 0.21.2-1~bpo11+1
- golang-github-go-openapi-swag: 0.21.1-1~bpo11+1
- golang-github-go-openapi-validate: 0.21.0-1~bpo11+1
- golang-github-hashicorp-go-envparse: 0.0~git20200406.d9cfd74-3~bpo11+1
- golang-github-hodgesds-perf-utils: 0.5.1-2~bpo11+1
- golang-github-josharian-native: 1.0.0-1~bpo11+1
- golang-github-jsimonetti-rtnetlink: 1.1.0-1~bpo11+1
- golang-github-mattn-go-xmlrpc: 0.0.3-2~bpo11+1
- golang-github-mdlayher-genetlink: 1.1.0-3~bpo11+1
- golang-github-mdlayher-netlink: 1.6.0-2~bpo11+1
- golang-github-mdlayher-socket: 0.1.1-2~bpo11+1
- golang-github-mdlayher-wifi: 0.0~git20200527.84f0b94-4~bpo11+1
- golang-github-mna-redisc: 1.1.7-3~bpo11+1
- golang-github-ncabatoff-go-seq: 0.0~git20180805.b08ef85-4~bpo11+1
- golang-github-nginxinc-nginx-plus-go-client: 0.9.0-2~bpo11+1
- golang-github-prometheus-client-golang: 1.11.1-1~bpo11+1
- golang-github-prometheus-client-model: 0.2.0-3~bpo11+1
- golang-github-prometheus-common: 0.32.1-6~bpo11+1
- golang-github-prometheus-exporter-toolkit: 0.7.1-1~bpo11+1
- golang-github-prometheus-procfs: 0.7.3-2~bpo11+1
- golang-github-soundcloud-go-runit: 0.0~git20150630.06ad41a-3~bpo11+1
- golang-github-valyala-fasthttp: 1.31.0-3~bpo11+1
- golang-github-valyala-fastjson: 1.6.3-4~bpo11+1
- golang-github-valyala-fastrand: 1.1.0-2~bpo11+1
- golang-github-valyala-fasttemplate: 1.2.1+ds1-1~bpo11+1
- golang-github-valyala-gozstd: 1.16.0+ds1-1~bpo11+1
- golang-github-valyala-histogram: 1.2.0+ds-2~bpo11+1
- golang-github-valyala-quicktemplate: 1.7.0+ds1-1~bpo11+1
- golang-github-victoriametrics-fastcache: 1.9.0+ds1-1~bpo11+1
- golang-github-victoriametrics-metrics: 1.18.1+ds-2~bpo11+1
- golang-github-victoriametrics-metricsql: 0.40.0+ds1-1~bpo11+1
- golang-github-xdg-go-pbkdf2: 1.0.0-2~bpo11+1
- golang-github-xdg-go-scram: 1.1.1-1~bpo11+1
- golang-github-xdg-go-stringprep: 1.0.3-1~bpo11+1
- golang-go-flags: 1.4.0-5~bpo11+1
- golang-mongodb-mongo-driver: 1.8.4+ds1-1~bpo11+1
- prometheus-alertmanager: 0.23.0-5~bpo11+1
- prometheus-haproxy-exporter: 0.13.0+ds1-2~bpo11+1
- prometheus-mysqld-exporter: 0.14.0-1~bpo11+1
- prometheus-nginx-exporter: 0.10.0-2~bpo11+1
- prometheus-node-exporter: 1.3.1-1~bpo11+1
- prometheus-process-exporter: 0.7.10-2sipwise1~bpo11+1
- prometheus-redis-exporter: 1.37.0-2~bpo11+1
- prometheus-snmp-exporter: 0.20.0-1~bpo11+1
- victoriametrics: 1.75.0+ds1-1~bpo11+1
# TT#187100 asterisk g729 (not even in Debian)
- asterisk-g72x: 0.0~git20201027.3855cec-1~bpo11+1
bullseye: *packages
repository-verify:
white-list: []
jenkins-jobs:
build_deps:
system-tests:
- data-hal # jenkins-tap-test-${distribution} needed for tap-test job
- libswrate
- libtcap
- ngcp-panel
- sipwise-base
- system-tools
system-tools:
- check-tools # libngcp-log-perl libngcp-service-perl
data-hal:
- ngcp-panel
ngcp-schema:
- ngcp-panel
libswrate:
- kamailio
- sems-pbx
libtcap:
- kamailio
- lnpd
sipwise-base:
- ngcp-panel
- ngcp-schema
check-tools:
- snmp-agent
ngcpcfg:
- bootenv # libngcp-template-perl needed on Dockerfile
ngcp-panel:
- csta-testsuite # ngcp-api-testframework needed on Dockerfile
projects:
- asterisk-voicemail
- backup-tools
- bulk-processor
- bulk-processor-projects
- bootenv
- cdr-exporter
- cfg-schema
- check-tools
- cleanup-tools
- cloudpbx-sources
- csta-testsuite
- data-hal
- db-schema
- deployment-iso
- dhtest
- documentation
- faxserver
- installer
- kamailio
- kamailio-config-tests
- keyring
- klish
- libswrate
- libtcap
- license-client
- lnpd
- lua-ngcp-kamailio
- mediator
- megacli
- metapackages
- monitoring-tools
- ngcp-admin-ui
- ngcp-api-tools
- ngcp-csc-ui
- ngcp-exporter
- ngcp-fauditd
- ngcp-inventory
- ngcp-js-api-client
- ngcp-logfs
- ngcp-klish-config
- ngcp-panel
- ngcp-prompts
- ngcp-rest-api
- ngcp-schema
- ngcp-status
- ngcp-sudo-plugin
- ngcp-support
- ngcp-user-framework
- ngcp-web-tests-e2e
- ngcpcfg
- ngcpcfg-api
- ngcpcfg-ha
- ngrep-sip
- prosody
- pushd
- py-ngcp-kamailio
- rate-o-mat
- reminder
- rtpengine
- sems
- sems-pbx
- sipwise-base
- snmp-agent
- system-tests
- system-tools
- templates
- upgrade
- vmnotify
- voisniff-ng
- websocket
release_mirror:
common:
copysrc:
- kamailio-config-tests
- klish
- libdata-hal-perl
- libsipwise-base-perl
- lua-ngcp-kamailio
- ngcp-admin-ui
- ngcp-api-tools
- ngcp-asterisk-voicemail
- ngcp-bulk-processor
- ngcp-cdr-exporter
- ngcp-cfg-schema
- ngcp-check-tools
- ngcp-cleanup-tools
- ngcp-csc-ui
- ngcp-db-schema
- ngcp-deployment-iso
- ngcp-dhtest
- ngcp-handbook
- ngcp-installer
- ngcp-js-api-client
- ngcp-kamailio
- ngcp-keyring
- ngcp-klish-config
- ngcp-libswrate
- ngcp-libtcap
- ngcp-license-client
- ngcp-mediator
- ngcp-metapackages
- ngcp-ngcpcfg
- ngcp-panel
- ngcp-prompts
- ngcp-prosody-modules
- ngcp-rate-o-mat
- ngcp-reminder
- ngcp-rest-api
- ngcp-rtpengine
- ngcp-schema
- ngcp-status
- ngcp-support
- ngcp-system-tests
- ngcp-system-tools
- ngcp-templates
- ngcp-upgrade
- ngcp-vmnotify
- ngcp-web-tests-e2e
- ngrep-sip
- py-ngcp-kamailio
remove:
source:
- ngcp-handbook
- ngcp-installer
- ngcp-libswrate
- ngcp-license-client
- ngcp-prompts
- ngcp-templates
- ngcp-upgrade
binary:
- ngcp-handbook-internal
- ngcp-handbook-pdf-internal
matched: []
ce:
copysrc:
- ngcp-sems
remove:
source: []
binary:
- ngcp-ngcpcfg-testsuite
matched:
- '*-carrier'
- '*-pro'
- '*-pro-dbgsym'
- 'ngcp-prompts-pro*'
pro:
backports: []
copysrc:
- megacli
- ngcp-backup-tools
- ngcp-bootenv
- ngcp-bulk-processor-projects
- ngcp-cloudpbx-devices
- ngcp-csta-testsuite
- ngcp-exporter
- ngcp-fauditd
- ngcp-faxserver
- ngcp-inventory
- ngcp-lnpd
- ngcp-logfs
- ngcp-monitoring-tools
- ngcp-ngcpcfg-ha
- ngcp-pushd
- ngcp-sems-pbx
- ngcp-snmp
- ngcp-sudo-plugin
- ngcp-user-framework
- ngcp-voisniff
- ngcp-websocket
- ngcpcfg-api
remove:
binary: []
source:
- ngcp-cloudpbx-devices
- ngcp-csta-testsuite
- ngcp-fauditd
- ngcp-logfs
- ngcp-monitoring-tools
- ngcp-ngcpcfg-ha
- ngcp-pushd
- ngcp-sems-pbx
- ngcp-sudo-plugin
- ngcp-user-framework
- ngcp-voisniff
- ngcpcfg-api
matched:
- '*ngcp*-ce'
- '*ngcp*-ce-*'

@ -365,10 +365,13 @@ class BuildRelease(models.Model):
@property @property
def build_deps(self): def build_deps(self):
if getattr(self, "_build_deps", None) is None: if getattr(self, "_build_deps", None) is None:
self._build_deps = [ self._build_deps = []
list(self.config.wanna_build_deps(0)), step = 0
list(self.config.wanna_build_deps(1)), deps = list(self.config.wanna_build_deps(step))
] while len(deps) > 0:
self._build_deps.append(deps)
step = step + 1
deps = list(self.config.wanna_build_deps(step))
return self._build_deps return self._build_deps
@property @property

@ -202,18 +202,40 @@ class BuildReleaseTestCase(BaseTest):
def test_build_deps(self): def test_build_deps(self):
build_deps = [ build_deps = [
[ [
"check-tools",
"data-hal", "data-hal",
"libinewrate", "libinewrate",
"libswrate", "libswrate",
"libtcap", "libtcap",
"sipwise-base", "sipwise-base",
"check-tools",
], ],
["ngcp-schema"], ["ngcp-schema"],
] ]
build = BuildRelease.objects.create_build_release("AAA", "trunk") build = BuildRelease.objects.create_build_release("AAA", "trunk")
self.assertListEqual(build.build_deps, build_deps) self.assertListEqual(build.build_deps, build_deps)
def test_build_deps_mr11_0(self):
build_deps = [
[
"ngcpcfg",
"system-tests",
],
[
"data-hal",
"libswrate",
"libtcap",
"sipwise-base",
"system-tools",
],
[
"check-tools",
"ngcp-schema",
],
["ngcp-panel"],
]
build = BuildRelease.objects.create_build_release("AAA", "mr11.0")
self.assertListEqual(build.build_deps, build_deps)
class BuildReleaseStepsTest(BaseTest): class BuildReleaseStepsTest(BaseTest):
fixtures = ["test_models"] fixtures = ["test_models"]
@ -330,17 +352,17 @@ class BuildReleaseStepsTest(BaseTest):
self.assertIsNone(self.br.next) self.assertIsNone(self.br.next)
def test_next_empty(self): def test_next_empty(self):
self.assertEqual(self.br.next, "data-hal") self.assertEqual(self.br.next, "check-tools")
def test_next_build_deps(self): def test_next_build_deps(self):
build_deps = [ build_deps = [
[ [
"check-tools",
"data-hal", "data-hal",
"libinewrate", "libinewrate",
"libswrate", "libswrate",
"libtcap", "libtcap",
"sipwise-base", "sipwise-base",
"check-tools",
], ],
["ngcp-schema"], ["ngcp-schema"],
] ]
@ -364,12 +386,12 @@ class BuildReleaseStepsTest(BaseTest):
def test_next_build_deps_stop(self): def test_next_build_deps_stop(self):
build_deps = [ build_deps = [
"check-tools",
"data-hal", "data-hal",
"libinewrate", "libinewrate",
"libswrate", "libswrate",
"libtcap", "libtcap",
"sipwise-base", "sipwise-base",
"check-tools",
] ]
i = 1 i = 1
self.jbi.projectname = "release-copy-debs-yml" self.jbi.projectname = "release-copy-debs-yml"

@ -47,7 +47,7 @@ class JBIManageTest(BaseTest):
result="SUCCESS", result="SUCCESS",
) )
params = { params = {
"project": "data-hal-get-code", "project": "check-tools-get-code",
"release_uuid": br.uuid, "release_uuid": br.uuid,
"trigger_release": br.release, "trigger_release": br.release,
"trigger_branch_or_tag": br.branch_or_tag, "trigger_branch_or_tag": br.branch_or_tag,
@ -56,7 +56,7 @@ class JBIManageTest(BaseTest):
tb.assert_called_once_with(**params) tb.assert_called_once_with(**params)
br = BuildRelease.objects.get(uuid=self.release_uuid) br = BuildRelease.objects.get(uuid=self.release_uuid)
self.assertEqual(br.pool_size, 1) self.assertEqual(br.pool_size, 1)
self.assertEqual(br.triggered_projects, "data-hal") self.assertEqual(br.triggered_projects, "check-tools")
@override_settings(BUILD_POOL=2) @override_settings(BUILD_POOL=2)
def test_jbi_manage_pool(self, tb, dl): def test_jbi_manage_pool(self, tb, dl):
@ -75,19 +75,19 @@ class JBIManageTest(BaseTest):
br = BuildRelease.objects.get(id=br.pk) br = BuildRelease.objects.get(id=br.pk)
self.assertEqual(br.built_projects, "release-copy-debs-yml") self.assertEqual(br.built_projects, "release-copy-debs-yml")
params = { params = {
"project": "data-hal-get-code", "project": "check-tools-get-code",
"release_uuid": br.uuid, "release_uuid": br.uuid,
"trigger_release": br.release, "trigger_release": br.release,
"trigger_branch_or_tag": br.branch_or_tag, "trigger_branch_or_tag": br.branch_or_tag,
"trigger_distribution": br.distribution, "trigger_distribution": br.distribution,
} }
calls = [call(**params)] calls = [call(**params)]
params["project"] = "libinewrate-get-code" params["project"] = "data-hal-get-code"
calls.append(call(**params)) calls.append(call(**params))
tb.assert_has_calls(calls) tb.assert_has_calls(calls)
br = BuildRelease.objects.get(pk=br.pk) br = BuildRelease.objects.get(pk=br.pk)
self.assertEqual(br.pool_size, 2) self.assertEqual(br.pool_size, 2)
self.assertEqual(br.triggered_projects, "data-hal,libinewrate") self.assertEqual(br.triggered_projects, "check-tools,data-hal")
@override_settings(BUILD_POOL=2) @override_settings(BUILD_POOL=2)
def test_jbi_manage_pool_building(self, tb, dl): def test_jbi_manage_pool_building(self, tb, dl):
@ -95,9 +95,9 @@ class JBIManageTest(BaseTest):
br = BuildRelease.objects.get(uuid=self.release_uuid) br = BuildRelease.objects.get(uuid=self.release_uuid)
self.assertEqual(br.pool_size, 2) self.assertEqual(br.pool_size, 2)
JenkinsBuildInfo.objects.create( JenkinsBuildInfo.objects.create(
job_url="http://fake.local/job/data-hal-binaries/", job_url="http://fake.local/job/check-tools-binaries/",
projectname="data-hal", projectname="check-tools",
jobname="data-hal-binaries", jobname="check-tools-binaries",
tag="UUIDA", tag="UUIDA",
param_release=self.release, param_release=self.release,
param_release_uuid=self.release_uuid, param_release_uuid=self.release_uuid,
@ -106,11 +106,11 @@ class JBIManageTest(BaseTest):
) )
br = BuildRelease.objects.get(id=br.pk) br = BuildRelease.objects.get(id=br.pk)
self.assertEqual(br.pool_size, 2) self.assertEqual(br.pool_size, 2)
self.assertEqual(br.triggered_projects, "data-hal,libinewrate") self.assertEqual(br.triggered_projects, "check-tools,data-hal")
JenkinsBuildInfo.objects.create( JenkinsBuildInfo.objects.create(
job_url="http://fake.local/job/libinewrate-binaries/", job_url="http://fake.local/job/data-hal-binaries/",
projectname="libinewrate", projectname="data-hal",
jobname="libinewrate-binaries", jobname="data-hal-binaries",
tag="UUIDA", tag="UUIDA",
param_release=self.release, param_release=self.release,
param_release_uuid=self.release_uuid, param_release_uuid=self.release_uuid,
@ -119,7 +119,7 @@ class JBIManageTest(BaseTest):
) )
br = BuildRelease.objects.get(pk=br.pk) br = BuildRelease.objects.get(pk=br.pk)
self.assertEqual(br.pool_size, 2) self.assertEqual(br.pool_size, 2)
self.assertEqual(br.triggered_projects, "data-hal,libinewrate") self.assertEqual(br.triggered_projects, "check-tools,data-hal")
@override_settings(BUILD_POOL=2) @override_settings(BUILD_POOL=2)
def test_jbi_manage_pool_next(self, tb, dl): def test_jbi_manage_pool_next(self, tb, dl):
@ -127,9 +127,9 @@ class JBIManageTest(BaseTest):
br = BuildRelease.objects.get(uuid=self.release_uuid) br = BuildRelease.objects.get(uuid=self.release_uuid)
self.assertEqual(br.pool_size, 2) self.assertEqual(br.pool_size, 2)
JenkinsBuildInfo.objects.create( JenkinsBuildInfo.objects.create(
job_url="http://fake.local/job/data-hal-repos/", job_url="http://fake.local/job/check-tools-repos/",
projectname="data-hal", projectname="check-tools",
jobname="data-hal-repos", jobname="check-tools-repos",
tag="UUIDA", tag="UUIDA",
param_release=self.release, param_release=self.release,
param_release_uuid=self.release_uuid, param_release_uuid=self.release_uuid,
@ -137,9 +137,11 @@ class JBIManageTest(BaseTest):
result="SUCCESS", result="SUCCESS",
) )
br = BuildRelease.objects.get(pk=br.pk) br = BuildRelease.objects.get(pk=br.pk)
self.assertEqual(br.built_projects, "release-copy-debs-yml,data-hal") self.assertEqual(
br.built_projects, "release-copy-debs-yml,check-tools"
)
params = { params = {
"project": "libswrate-get-code", "project": "libinewrate-get-code",
"release_uuid": br.uuid, "release_uuid": br.uuid,
"trigger_release": br.release, "trigger_release": br.release,
"trigger_branch_or_tag": br.branch_or_tag, "trigger_branch_or_tag": br.branch_or_tag,
@ -147,7 +149,7 @@ class JBIManageTest(BaseTest):
} }
tb.assert_called_once_with(**params) tb.assert_called_once_with(**params)
self.assertEqual(br.pool_size, 2) self.assertEqual(br.pool_size, 2)
self.assertEqual(br.triggered_projects, "libinewrate,libswrate") self.assertEqual(br.triggered_projects, "data-hal,libinewrate")
@override_settings(BUILD_POOL=3) @override_settings(BUILD_POOL=3)
def test_jbi_manage_pool_deps(self, tb, dl): def test_jbi_manage_pool_deps(self, tb, dl):
@ -164,31 +166,39 @@ class JBIManageTest(BaseTest):
result="SUCCESS", result="SUCCESS",
) )
params = { params = {
"project": "data-hal-get-code", "project": "check-tools-get-code",
"release_uuid": br.uuid, "release_uuid": br.uuid,
"trigger_release": br.release, "trigger_release": br.release,
"trigger_branch_or_tag": br.branch_or_tag, "trigger_branch_or_tag": br.branch_or_tag,
"trigger_distribution": br.distribution, "trigger_distribution": br.distribution,
} }
calls = [call(**params)] calls = [call(**params)]
params["project"] = "libinewrate-get-code" params["project"] = "data-hal-get-code"
calls.append(call(**params)) calls.append(call(**params))
params["project"] = "libswrate-get-code" params["project"] = "libinewrate-get-code"
calls.append(call(**params)) calls.append(call(**params))
tb.assert_has_calls(calls) tb.assert_has_calls(calls)
br = BuildRelease.objects.get(uuid=self.release_uuid)
self.assertEqual(
br.triggered_projects, "check-tools,data-hal,libinewrate"
)
JenkinsBuildInfo.objects.create( JenkinsBuildInfo.objects.create(
job_url="http://fake.local/job/data-hal-repos/", job_url="http://fake.local/job/check-tools-repos/",
projectname="data-hal", projectname="check-tools",
jobname="data-hal-repos", jobname="check-tools-repos",
tag="UUIDA", tag="UUIDA",
param_release=self.release, param_release=self.release,
param_release_uuid=self.release_uuid, param_release_uuid=self.release_uuid,
buildnumber=1, buildnumber=1,
result="SUCCESS", result="SUCCESS",
) )
params["project"] = "libtcap-get-code" params["project"] = "libswrate-get-code"
tb.assert_called_with(**params) tb.assert_called_with(**params)
br = BuildRelease.objects.get(uuid=self.release_uuid)
self.assertEqual(
br.triggered_projects, "data-hal,libinewrate,libswrate"
)
JenkinsBuildInfo.objects.create( JenkinsBuildInfo.objects.create(
job_url="http://fake.local/job/libswrate-repos/", job_url="http://fake.local/job/libswrate-repos/",
@ -200,13 +210,15 @@ class JBIManageTest(BaseTest):
buildnumber=1, buildnumber=1,
result="SUCCESS", result="SUCCESS",
) )
params["project"] = "sipwise-base-get-code" params["project"] = "libtcap-get-code"
tb.assert_called_with(**params) tb.assert_called_with(**params)
br = BuildRelease.objects.get(uuid=self.release_uuid)
self.assertEqual(br.triggered_projects, "data-hal,libinewrate,libtcap")
JenkinsBuildInfo.objects.create( JenkinsBuildInfo.objects.create(
job_url="http://fake.local/job/libinewrate-repos/", job_url="http://fake.local/job/data-hal-repos/",
projectname="libinewrate", projectname="data-hal",
jobname="libinewrate-repos", jobname="data-hal-repos",
tag="UUIDA", tag="UUIDA",
param_release=self.release, param_release=self.release,
param_release_uuid=self.release_uuid, param_release_uuid=self.release_uuid,
@ -215,9 +227,9 @@ class JBIManageTest(BaseTest):
) )
br = BuildRelease.objects.get(uuid=self.release_uuid) br = BuildRelease.objects.get(uuid=self.release_uuid)
self.assertEqual( self.assertEqual(
br.triggered_projects, "libtcap,sipwise-base,check-tools" br.triggered_projects, "libinewrate,libtcap,sipwise-base"
) )
params["project"] = "check-tools-get-code" params["project"] = "sipwise-base-get-code"
tb.assert_called_with(**params) tb.assert_called_with(**params)
tb.reset_mock() tb.reset_mock()
@ -232,13 +244,13 @@ class JBIManageTest(BaseTest):
result="SUCCESS", result="SUCCESS",
) )
br = BuildRelease.objects.get(uuid=self.release_uuid) br = BuildRelease.objects.get(uuid=self.release_uuid)
self.assertEqual(br.triggered_projects, "sipwise-base,check-tools") self.assertEqual(br.triggered_projects, "libinewrate,sipwise-base")
tb.assert_not_called() tb.assert_not_called()
JenkinsBuildInfo.objects.create( JenkinsBuildInfo.objects.create(
job_url="http://fake.local/job/check-tools-repos/", job_url="http://fake.local/job/libinewrate-repos/",
projectname="check-tools", projectname="libinewrate",
jobname="check-tools-repos", jobname="libinewrate-repos",
tag="UUIDA", tag="UUIDA",
param_release=self.release, param_release=self.release,
param_release_uuid=self.release_uuid, param_release_uuid=self.release_uuid,
@ -263,6 +275,31 @@ class JBIManageTest(BaseTest):
self.assertEqual(br.triggered_projects, "ngcp-schema") self.assertEqual(br.triggered_projects, "ngcp-schema")
params["project"] = "ngcp-schema-get-code" params["project"] = "ngcp-schema-get-code"
tb.assert_called_with(**params) tb.assert_called_with(**params)
tb.reset_mock()
JenkinsBuildInfo.objects.create(
job_url="http://fake.local/job/ngcp-schema-repos/",
projectname="ngcp-schema",
jobname="ngcp-schema-repos",
tag="UUIDA",
param_release=self.release,
param_release_uuid=self.release_uuid,
buildnumber=1,
result="SUCCESS",
)
br = BuildRelease.objects.get(uuid=self.release_uuid)
self.assertEqual(
br.triggered_projects,
"asterisk-voicemail,lua-ngcp-kamailio,ngcp-panel",
)
params["project"] = "asterisk-voicemail-get-code"
calls = [call(**params)]
params["project"] = "lua-ngcp-kamailio-get-code"
calls.append(call(**params))
params["project"] = "ngcp-panel-get-code"
calls.append(call(**params))
tb.assert_has_calls(calls)
@override_settings(JBI_ALLOWED_HOSTS=["fake.local"]) @override_settings(JBI_ALLOWED_HOSTS=["fake.local"])

@ -113,6 +113,7 @@ class ReleaseConfigTestCase(SimpleTestCase):
"trunk-weekly", "trunk-weekly",
"release-trunk-buster", "release-trunk-buster",
"release-trunk-bullseye", "release-trunk-bullseye",
"mr11.0",
"mr10.1.1", "mr10.1.1",
"mr10.1", "mr10.1",
"mr10.0", "mr10.0",
@ -154,7 +155,6 @@ class ReleaseConfigTestCase(SimpleTestCase):
def test_ok(self): def test_ok(self):
rc = ReleaseConfig("trunk") rc = ReleaseConfig("trunk")
self.assertIsNotNone(rc.config) self.assertIsNotNone(rc.config)
self.assertListEqual(list(rc.build_deps.keys()), self.build_deps)
self.assertEqual(rc.debian_release, "buster") self.assertEqual(rc.debian_release, "buster")
self.assertEqual(len(rc.projects), 73) self.assertEqual(len(rc.projects), 73)
@ -202,39 +202,148 @@ class ReleaseConfigTestCase(SimpleTestCase):
self.assertEqual(rc.tag, "mr7.5.2.1") self.assertEqual(rc.tag, "mr7.5.2.1")
def test_build_deps(self): def test_build_deps(self):
rc = ReleaseConfig("trunk")
self.assertListEqual(list(rc.build_deps.keys()), self.build_deps)
def test_build_deps_iter_step_1(self):
rc = ReleaseConfig("trunk") rc = ReleaseConfig("trunk")
build_deps = [ build_deps = [
"check-tools",
"data-hal", "data-hal",
"ngcp-schema",
"libinewrate", "libinewrate",
"libswrate", "libswrate",
"libtcap", "libtcap",
"sipwise-base", "sipwise-base",
]
values = []
res = rc.wanna_build_deps(0)
self.assertListEqual(build_deps, res.list_no_deps[0])
self.assertListEqual(["ngcp-schema"], res.list_deps[0])
for prj in res:
values.append(prj)
self.assertListEqual(build_deps, values)
def test_build_deps_iter_step_2(self):
rc = ReleaseConfig("trunk")
build_deps = ["ngcp-schema"]
values = []
res = rc.wanna_build_deps(1)
self.assertListEqual([], res.list_deps[1])
self.assertListEqual(build_deps, res.list_no_deps[1])
for prj in res:
values.append(prj)
self.assertListEqual(build_deps, values)
def test_build_deps_iter_step_3(self):
rc = ReleaseConfig("trunk")
values = []
for prj in rc.wanna_build_deps(2):
values.append(prj)
self.assertListEqual([], values)
def test_build_deps_mr11_0(self):
rc = ReleaseConfig("mr11.0")
build_deps = [
"system-tests",
"system-tools",
"data-hal",
"ngcp-schema",
"libswrate",
"libtcap",
"sipwise-base",
"check-tools", "check-tools",
"ngcpcfg",
"ngcp-panel",
] ]
self.assertListEqual(list(rc.build_deps.keys()), build_deps) self.assertListEqual(list(rc.build_deps.keys()), build_deps)
def test_build_deps_iter_step_1(self): def test_build_deps_mr11_0_iter_step_1(self):
rc = ReleaseConfig("trunk") rc = ReleaseConfig("mr11.0")
build_deps = [
"ngcpcfg",
"system-tests",
]
values = []
res = rc.wanna_build_deps(0)
self.assertListEqual(
[
"check-tools",
"data-hal",
"libswrate",
"libtcap",
"ngcp-panel",
"ngcp-schema",
"sipwise-base",
"system-tools",
],
res.list_deps[0],
)
self.assertListEqual(build_deps, res.list_no_deps[0])
for prj in res:
values.append(prj)
self.assertListEqual(build_deps, values)
def test_build_deps_mr11_0_iter_step_2(self):
rc = ReleaseConfig("mr11.0")
build_deps = [ build_deps = [
"data-hal", "data-hal",
"libinewrate",
"libswrate", "libswrate",
"libtcap", "libtcap",
"sipwise-base", "sipwise-base",
"system-tools",
]
values = []
res = rc.wanna_build_deps(1)
self.assertListEqual(
[
"check-tools",
"ngcp-panel",
"ngcp-schema",
],
res.list_deps[1],
)
self.assertListEqual(build_deps, res.list_no_deps[1])
for prj in res:
values.append(prj)
self.assertListEqual(build_deps, values)
def test_build_deps_mr11_0_iter_step_3(self):
rc = ReleaseConfig("mr11.0")
build_deps = [
"check-tools", "check-tools",
"ngcp-schema",
] ]
values = [] values = []
for prj in rc.wanna_build_deps(0): res = rc.wanna_build_deps(2)
self.assertListEqual(
["ngcp-panel"],
res.list_deps[2],
)
self.assertListEqual(build_deps, res.list_no_deps[2])
for prj in res:
values.append(prj) values.append(prj)
self.assertListEqual(build_deps, values) self.assertListEqual(build_deps, values)
def test_build_deps_iter_step_2(self): def test_build_deps_mr11_0_iter_step_4(self):
rc = ReleaseConfig("trunk") rc = ReleaseConfig("mr11.0")
build_deps = ["ngcp-panel"]
values = []
res = rc.wanna_build_deps(3)
self.assertListEqual(
[],
res.list_deps[3],
)
self.assertListEqual(build_deps, res.list_no_deps[3])
for prj in res:
values.append(prj)
self.assertListEqual(build_deps, values)
def test_build_deps_mr11_0_iter_step_5(self):
rc = ReleaseConfig("mr11.0")
values = [] values = []
for prj in rc.wanna_build_deps(1): for prj in rc.wanna_build_deps(4):
values.append(prj) values.append(prj)
self.assertListEqual(["ngcp-schema"], values) self.assertListEqual([], values)
@patch("build.utils.open_jenkins_url") @patch("build.utils.open_jenkins_url")

@ -173,30 +173,53 @@ def trigger_build(
class ReleaseConfig(object): class ReleaseConfig(object):
class WannaBuild: class WannaBuild:
def __init__(self, config, step=1): def _step_deps(self, level):
self.config = config no_deps = dict()
self.no_deps = [] deps = dict()
self.deps = [] if level == 0:
self.step = step search_map = self.build_deps
build_deps = self.config.build_deps else:
for name in build_deps.keys(): search_map = self.deps[level - 1]
for name in search_map:
flag = False flag = False
for prj, values in build_deps.items(): for prj, values in search_map.items():
if name == prj:
continue
if name in values: if name in values:
flag = True flag = True
self.deps.append(name) deps[name] = search_map[name]
logger.debug(f"{name} has dependency on {prj}")
break break
if not flag: if not flag:
self.no_deps.append(name) no_deps[name] = search_map[name]
logger.debug(f"** {name} has NO dependency")
self.deps.append(deps)
self.list_deps.append(humansorted(deps.keys()))
self.no_deps.append(no_deps)
self.list_no_deps.append(humansorted(no_deps.keys()))
def __init__(self, config, step):
self.config = config
self.list_no_deps = []
self.list_deps = []
self.no_deps = []
self.deps = []
self.step = step
self.build_deps = self.config.build_deps
level = 0
while self.step - level >= 0:
logger.debug(f"--- level:{level} ---")
self._step_deps(level)
level = level + 1
def __iter__(self): def __iter__(self):
return self return self
def __next__(self): def __next__(self):
if self.step == 0: try:
list_prj = self.no_deps list_prj = self.list_no_deps[self.step]
else: except IndexError:
list_prj = self.deps raise StopIteration
if len(list_prj) > 0: if len(list_prj) > 0:
return list_prj.pop(0) return list_prj.pop(0)

Loading…
Cancel
Save