mirror of
https://github.com/odoo/runbot.git
synced 2025-03-15 23:45:44 +07:00
[IMP] runbot: allow to ignore forward-ports for a team
This commit is contained in:
parent
1c49aaacf7
commit
fdb144a3af
@ -112,6 +112,11 @@ class ConfigStep(models.Model):
|
||||
codeowners = build.env['runbot.codeowner'].search([('project_id', '=', bundle.project_id.id)])
|
||||
regexes = self._codeowners_regexes(codeowners, build.params_id.version_id)
|
||||
modified_files = self._modified_files(build, pr_by_commit.keys())
|
||||
|
||||
if not modified_files:
|
||||
return
|
||||
|
||||
skippable_teams = self.env['runbot.team'].search(['|', ('skip_team_pr', '=', True), ('skip_fw_pr', '=', True)])
|
||||
for commit_link, files in modified_files.items():
|
||||
build._log('', 'Checking %s codeowner regexed on %s files' % (len(regexes), len(files)))
|
||||
reviewers = set()
|
||||
@ -128,12 +133,19 @@ class ConfigStep(models.Model):
|
||||
pr = pr_by_commit[commit_link]
|
||||
new_reviewers = reviewers - set((pr.reviewers or '').split(','))
|
||||
if new_reviewers:
|
||||
skippable_teams = self.env['runbot.team'].search([('github_team', 'in', list(new_reviewers)), ('skip_team_pr', '=', True)])
|
||||
skippable_teams = skippable_teams.filtered(lambda team: pr.pr_author in team._get_members_logins())
|
||||
skipped_teams = set(skippable_teams.mapped('github_team'))
|
||||
if skipped_teams:
|
||||
new_reviewers = new_reviewers - skipped_teams
|
||||
build._log('', 'Skipping teams %s since author is part of the team members' % (sorted(skipped_teams),), log_type='markdown')
|
||||
# todo replace all team by a runbot team and simplify this logic to remove search
|
||||
author_skippable_teams = skippable_teams.filtered(lambda team: team.skip_team_pr and team.github_team in new_reviewers and pr.pr_author in team._get_members_logins())
|
||||
author_skipped_teams = set(author_skippable_teams.mapped('github_team'))
|
||||
if author_skipped_teams:
|
||||
new_reviewers = new_reviewers - author_skipped_teams
|
||||
build._log('', 'Skipping teams %s since author is part of the team members' % (sorted(author_skipped_teams),), log_type='markdown')
|
||||
|
||||
fw_skippable_teams = skippable_teams.filtered(lambda team: team.skip_fw_pr and team.github_team in new_reviewers and pr.pr_author == fw_bot)
|
||||
fw_skipped_teams = set(fw_skippable_teams.mapped('github_team'))
|
||||
if fw_skipped_teams:
|
||||
new_reviewers = new_reviewers - fw_skipped_teams
|
||||
build._log('', 'Skipping teams %s (ignore forwardport)' % (sorted(fw_skipped_teams),), log_type='markdown')
|
||||
|
||||
new_reviewers = sorted(new_reviewers)
|
||||
|
||||
build._log('', 'Requesting review for pull request [%s](%s): %s' % (pr.dname, pr.branch_url, ', '.join(new_reviewers)), log_type='markdown')
|
||||
|
@ -41,6 +41,7 @@ class RunbotTeam(models.Model):
|
||||
github_team = fields.Char('Github team', tracking=True)
|
||||
github_logins = fields.Char('Github logins', help='Additional github logins, prefer adding the login on the member of the team', tracking=True)
|
||||
skip_team_pr = fields.Boolean('Skip team pr', help="Don't add codeowner if pr was created by a member of the team", tracking=True)
|
||||
skip_fw_pr = fields.Boolean('Skip forward-port pr', help="Don't add codeowner if pr is a forwardport, even when forced pushed", tracking=True)
|
||||
|
||||
@api.model_create_single
|
||||
def create(self, values):
|
||||
|
@ -12,6 +12,7 @@
|
||||
<field name="github_team" widget="github_team"/>
|
||||
<field name="github_logins"/>
|
||||
<field name="skip_team_pr"/>
|
||||
<field name="skip_fw_pr"/>
|
||||
<field name="dashboard_id"/>
|
||||
<field name="path_glob"/>
|
||||
</group>
|
||||
|
Loading…
Reference in New Issue
Block a user