From 1b3e79447ba53c63e0deca0199d792b404382988 Mon Sep 17 00:00:00 2001 From: Xavier-Do Date: Thu, 8 Dec 2022 14:38:20 +0100 Subject: [PATCH] [IMP] runbot: cross project trigger Allow to create a trigger without project, that execute for every project. In this case the repos are all the repo of the project that where updated. This is mainly for psxrunbot. Also allows to create a trigger that cross category --- runbot/models/batch.py | 11 ++++++++--- runbot/models/project.py | 1 + runbot/models/repo.py | 2 +- runbot/views/bundle_views.xml | 2 ++ 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/runbot/models/batch.py b/runbot/models/batch.py index d7a68c39..1d2859e2 100644 --- a/runbot/models/batch.py +++ b/runbot/models/batch.py @@ -162,8 +162,9 @@ class Batch(models.Model): _logger.error('No dockerfile found !') triggers = self.env['runbot.trigger'].search([ # could be optimised for multiple batches. Ormcached method? - ('project_id', '=', project.id), - ('category_id', '=', self.category_id.id) + ('category_id', 'in', [False, self.category_id.id]), + ('project_id', 'in', [project.id, False] if project.enable_base_triggers else [project.id]), + ('project_id', '=', False), ]).filtered( lambda t: not t.version_domain or \ self.bundle_id.version_id.filtered_domain(t.get_version_domain()) @@ -172,6 +173,8 @@ class Batch(models.Model): pushed_repo = self.commit_link_ids.mapped('commit_id.repo_id') dependency_repos = triggers.mapped('dependency_ids') all_repos = triggers.mapped('repo_ids') | dependency_repos + if any(not trigger.project_id for trigger in triggers): + all_repos |= project.repo_ids missing_repos = all_repos - pushed_repo ###################################### @@ -298,6 +301,8 @@ class Batch(models.Model): for trigger in triggers: trigger_custom = trigger_customs.get(trigger, self.env['runbot.bundle.trigger.custom']) trigger_repos = trigger.repo_ids | trigger.dependency_ids + if not trigger.project_id: + trigger_repos |= project.repo_ids if trigger_repos & missing_repos: self.warning('Missing commit for repo %s for trigger %s', (trigger_repos & missing_repos).mapped('name'), trigger.name) continue @@ -306,7 +311,7 @@ class Batch(models.Model): extra_params = trigger_custom.extra_params or '' config_data = trigger_custom.config_data or {} params_value = { - 'version_id': version_id, + 'version_id': version_id, 'extra_params': extra_params, 'config_id': config.id, 'project_id': project_id, diff --git a/runbot/models/project.py b/runbot/models/project.py index 10fb9585..d33fd424 100644 --- a/runbot/models/project.py +++ b/runbot/models/project.py @@ -12,6 +12,7 @@ class Project(models.Model): trigger_ids = fields.One2many('runbot.trigger', 'project_id', string='Triggers') dockerfile_id = fields.Many2one('runbot.dockerfile', index=True, help="Project Default Dockerfile") repo_ids = fields.One2many('runbot.repo', 'project_id', string='Repos') + enable_base_triggers = fields.Boolean('Enable base triggers', default=True) sequence = fields.Integer('Sequence') diff --git a/runbot/models/repo.py b/runbot/models/repo.py index c593d735..e09822bb 100644 --- a/runbot/models/repo.py +++ b/runbot/models/repo.py @@ -38,7 +38,7 @@ class Trigger(models.Model): sequence = fields.Integer('Sequence') name = fields.Char("Name") description = fields.Char("Description", help="Informative description") - project_id = fields.Many2one('runbot.project', string="Project id", required=True) # main/security/runbot + project_id = fields.Many2one('runbot.project', string="Project id", default=lambda self: self.env.ref('runbot.main_project')) repo_ids = fields.Many2many('runbot.repo', relation='runbot_trigger_triggers', string="Triggers", domain="[('project_id', '=', project_id)]") dependency_ids = fields.Many2many('runbot.repo', relation='runbot_trigger_dependencies', string="Dependencies") config_id = fields.Many2one('runbot.build.config', string="Config", required=True) diff --git a/runbot/views/bundle_views.xml b/runbot/views/bundle_views.xml index 05ccbe46..7e542480 100644 --- a/runbot/views/bundle_views.xml +++ b/runbot/views/bundle_views.xml @@ -8,6 +8,7 @@ + @@ -23,6 +24,7 @@ +