diff --git a/build/models/br.py b/build/models/br.py index cfe2f0a..9d13856 100644 --- a/build/models/br.py +++ b/build/models/br.py @@ -228,10 +228,19 @@ class BuildRelease(models.Model): return t_list = self.triggered_projects_list built_list = self.built_projects_list + deps_missing = [] for grp in self.build_deps: for prj in grp: - if prj not in built_list and prj not in t_list: - return prj + if prj not in built_list: + if prj not in t_list: + return prj + else: + deps_missing.append(prj) + else: + if len(deps_missing) > 0: + msg = "release {} has build_deps {} missing" + logger.info(msg.format(self, deps_missing)) + return None for prj in self.projects_list: if prj not in built_list and prj not in t_list: return prj @@ -240,7 +249,8 @@ class BuildRelease(models.Model): def next(self): failed_projects = self.failed_projects_list if any(job in failed_projects for job in settings.BUILD_RELEASE_JOBS): - logger.info("release has failed release_jobs, stop sending jobs") + msg = "release {} has failed release_jobs, stop sending jobs" + logger.info(msg.format(self)) return res = self._next() if res is not None: diff --git a/build/test/test_models.py b/build/test/test_models.py index 05db206..d98c2a2 100644 --- a/build/test/test_models.py +++ b/build/test/test_models.py @@ -274,6 +274,28 @@ class BuildReleaseStepsTest(BaseTest): self.assertTrue(self.br.append_built(self.jbi)) self.assertEqual(self.br.next, "asterisk-voicemail") + def test_next_build_deps_stop(self): + build_deps = [ + "data-hal", + "libinewrate", + "libswrate", + "libtcap", + "sipwise-base", + "check-tools", + ] + i = 1 + self.jbi.projectname = "release-copy-debs-yml" + self.assertTrue(self.br.append_built(self.jbi)) + for prj in build_deps: + self.jbi.projectname = prj + self.assertTrue(self.br.append_triggered(prj)) + _next = self.br.next + try: + self.assertEqual(_next, build_deps[i]) + i += 1 + except IndexError: + self.assertIsNone(_next) + def test_next_last(self): pl = self.br.projects_list[:-1] pl.insert(0, "release-copy-debs-yml") diff --git a/build/test/test_tasks.py b/build/test/test_tasks.py index f1d8174..2f22eab 100644 --- a/build/test/test_tasks.py +++ b/build/test/test_tasks.py @@ -147,3 +147,118 @@ class JBIManageTest(BaseTest): tb.assert_called_once_with(**params) self.assertEqual(br.pool_size, 2) self.assertEqual(br.triggered_projects, "libinewrate,libswrate") + + @override_settings(BUILD_POOL=3) + def test_jbi_manage_pool_deps(self, tb, dl): + br = BuildRelease.objects.get(uuid=self.release_uuid) + self.assertEqual(br.pool_size, 0) + JenkinsBuildInfo.objects.create( + job_url="http://fake.local/job/release-copy-debs-yml/", + projectname="release-copy-debs-yml", + jobname="release-copy-debs-yml", + tag="UUIDA", + param_release="mr8.1", + param_release_uuid=self.release_uuid, + buildnumber=1, + result="SUCCESS", + ) + params = { + "project": "data-hal-get-code", + "release_uuid": br.uuid, + "trigger_release": br.release, + "trigger_branch_or_tag": br.branch_or_tag, + "trigger_distribution": br.distribution, + } + calls = [call(**params)] + params["project"] = "libinewrate-get-code" + calls.append(call(**params)) + params["project"] = "libswrate-get-code" + calls.append(call(**params)) + tb.assert_has_calls(calls) + + JenkinsBuildInfo.objects.create( + job_url="http://fake.local/job/data-hal-repos/", + projectname="data-hal", + jobname="data-hal-repos", + tag="UUIDA", + param_release=self.release, + param_release_uuid=self.release_uuid, + buildnumber=1, + result="SUCCESS", + ) + params["project"] = "libtcap-get-code" + tb.assert_called_with(**params) + + JenkinsBuildInfo.objects.create( + job_url="http://fake.local/job/libswrate-repos/", + projectname="libswrate", + jobname="libswrate-repos", + tag="UUIDA", + param_release=self.release, + param_release_uuid=self.release_uuid, + buildnumber=1, + result="SUCCESS", + ) + params["project"] = "sipwise-base-get-code" + tb.assert_called_with(**params) + + JenkinsBuildInfo.objects.create( + job_url="http://fake.local/job/libinewrate-repos/", + projectname="libinewrate", + jobname="libinewrate-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, "libtcap,sipwise-base,check-tools" + ) + params["project"] = "check-tools-get-code" + tb.assert_called_with(**params) + tb.reset_mock() + + JenkinsBuildInfo.objects.create( + job_url="http://fake.local/job/libtcap-repos/", + projectname="libtcap", + jobname="libtcap-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, "sipwise-base,check-tools") + tb.assert_not_called() + + JenkinsBuildInfo.objects.create( + job_url="http://fake.local/job/check-tools-repos/", + projectname="check-tools", + jobname="check-tools-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, "sipwise-base") + tb.assert_not_called() + + JenkinsBuildInfo.objects.create( + job_url="http://fake.local/job/sipwise-base-repos/", + projectname="sipwise-base", + jobname="sipwise-base-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, "ngcp-schema") + params["project"] = "ngcp-schema-get-code" + tb.assert_called_with(**params)