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 @@ +