diff --git a/build/fixtures/test_weekly.json b/build/fixtures/test_weekly.json new file mode 100644 index 0000000..abc0537 --- /dev/null +++ b/build/fixtures/test_weekly.json @@ -0,0 +1,16 @@ +[ +{ + "model": "build.buildrelease", + "pk": 1, + "fields": { + "uuid": "dbe569f7-eab6-4532-a6d1-d31fb559649b", + "start_date": "2017-07-14T07:55:11.714Z", + "tag": "", + "branch": "master", + "release": "release-trunk-weekly", + "distribution": "bullseye", + "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,libinewrate,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", + "built_projects": "release-copy-debs-yml,sipwise-base,data-hal,libswrate,libinewrate,libtcap,system-tools,ngcpcfg,check-tools,ngcp-schema,ngcp-panel,cdr-exporter,bootenv,backup-tools,asterisk-voicemail,bulk-processor-projects,cleanup-tools,bulk-processor,csta-testsuite,dhtest,deployment-iso,cloudpbx-sources,faxserver,db-schema,installer,keyring,cfg-schema,klish,license-client,mediator,lnpd,lua-ngcp-kamailio,kamailio-config-tests,metapackages,monitoring-tools,documentation,megacli,ngcp-api-tools,ngcp-fauditd,ngcp-exporter,ngcp-inventory,ngcp-admin-ui,kamailio,ngcp-js-api-client,ngcp-klish-config,ngcp-sudo-plugin,ngcp-status,ngcp-logfs,ngcp-user-framework,ngcp-support,ngcp-web-tests-e2e,ngcpcfg-api,ngcpcfg-ha,ngcp-rest-api,ngrep-sip,ngcp-csc-ui,pushd,prosody,reminder,rate-o-mat,py-ngcp-kamailio,snmp-agent,system-tests,rtpengine,vmnotify,voisniff-ng,sems,templates,sems-pbx,websocket,upgrade" + } +} +] diff --git a/build/tasks.py b/build/tasks.py index 6da47cd..845d363 100644 --- a/build/tasks.py +++ b/build/tasks.py @@ -18,6 +18,7 @@ from django.apps import apps from .conf import settings from .utils import trigger_build +from .utils import trigger_build_matrix from .utils import trigger_copy_deps logger = structlog.get_logger(__name__) @@ -93,4 +94,7 @@ def build_resume(pk): br.append_triggered(prj) else: log.debug("BuildRelease has no next") + if br.release == "release-trunk-weekly": + url = trigger_build_matrix() + log.info("build_matrix triggered", instance=str(br), url=url) break diff --git a/build/test/test_tasks.py b/build/test/test_tasks.py index 2f22eab..45b9173 100644 --- a/build/test/test_tasks.py +++ b/build/test/test_tasks.py @@ -262,3 +262,34 @@ class JBIManageTest(BaseTest): self.assertEqual(br.triggered_projects, "ngcp-schema") params["project"] = "ngcp-schema-get-code" tb.assert_called_with(**params) + + +@override_settings(JBI_ALLOWED_HOSTS=["fake.local"]) +@patch("repoapi.utils.dlfile") +@patch("build.tasks.trigger_build") +@patch("build.tasks.trigger_build_matrix") +class WeeklyTest(BaseTest): + fixtures = [ + "test_weekly", + ] + release = "release-trunk-weekly" + release_uuid = "dbe569f7-eab6-4532-a6d1-d31fb559649b" + + @override_settings(BUILD_POOL=2) + def test_jbi_manage_trigger_matrix(self, tbm, tb, dl): + br = BuildRelease.objects.get(uuid=self.release_uuid) + JenkinsBuildInfo.objects.create( + job_url="http://fake.local/job/ngcp-prompts-repos/", + projectname="ngcp-prompts", + jobname="ngcp-prompts-repos", + tag="UUIDA", + param_release=self.release, + param_release_uuid=self.release_uuid, + buildnumber=1, + result="SUCCESS", + ) + br = BuildRelease.objects.get(pk=br.pk) + self.assertTrue(br.built_projects.endswith("ngcp-prompts")) + self.assertEqual(br.pool_size, 0) + tb.assert_not_called() + tbm.assert_called_once_with() diff --git a/build/utils.py b/build/utils.py index 9a32f5a..834ccc0 100644 --- a/build/utils.py +++ b/build/utils.py @@ -28,15 +28,13 @@ from repoapi.utils import open_jenkins_url logger = structlog.get_logger(__name__) -base_url = ( - "{base}/job/{job}/buildWithParameters?" - "token={token}&cause={cause}&uuid={uuid}&" - "release_uuid={release_uuid}" -) +_url = "{base}/job/{job}/buildWithParameters?" "token={token}&cause={cause}" +base_url = _url + "&uuid={uuid}&release_uuid={release_uuid}" project_url = ( base_url + "&branch={branch}&tag={tag}&release={release}&" "distribution={distribution}" ) +build_matrix_url = _url copy_deps_url = base_url + "&release={release}&internal={internal}" re_release = re.compile(r"^release-(mr[0-9]+\.[0-9]+(\.[0-9]+)?)$") re_release_common = re.compile(r"^(release-)?(mr[0-9]+\.[0-9]+)(\.[0-9]+)?$") @@ -73,6 +71,21 @@ def get_common_release(version): return "master" +def trigger_build_matrix(): + params = { + "base": settings.JENKINS_URL, + "token": urllib.parse.quote(settings.JENKINS_TOKEN), + "job": "weekly-build-matrix-trunk-weekly", + "cause": "repoapi finished to build trunk-weekly", + } + url = _url.format(**params) + if settings.DEBUG: + logger.info("Debug mode, would trigger: %s", url) + else: + open_jenkins_url(url) + return "{base}/job/{job}/".format(**params) + + def trigger_copy_deps(release, internal, release_uuid, uuid=None): if release.startswith("release-trunk-"): simple = release