[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
This commit is contained in:
Xavier-Do 2022-12-08 14:38:20 +01:00
parent a563fcf907
commit 1b3e79447b
4 changed files with 12 additions and 4 deletions

View File

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

View File

@ -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')

View File

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

View File

@ -8,6 +8,7 @@
<group>
<field name="name"/>
<field name="keep_sticky_running"/>
<field name="enable_base_triggers"/>
<field name="dockerfile_id"/>
<field name="group_ids"/>
<field name="trigger_ids"/>
@ -23,6 +24,7 @@
<tree string="Projects">
<field name="name"/>
<field name="keep_sticky_running"/>
<field name="enable_base_triggers"/>
<field name="dockerfile_id"/>
<field name="group_ids"/>
<field name="trigger_ids"/>