[IMP] runbot: add has_pr filter

This commit is contained in:
Xavier-Do 2024-02-09 10:13:56 +01:00 committed by Christophe Monniez
parent a0dd2fa560
commit 2fa5a6aee7
4 changed files with 39 additions and 3 deletions

View File

@ -42,6 +42,7 @@ def route(routes, **kw):
search = cookie_search
else:
search = kwargs.get('search', '')
has_pr = kwargs.get('has_pr', None)
if keep_search and cookie_search != search:
response.set_cookie('search', search)
@ -56,7 +57,7 @@ def route(routes, **kw):
response.qcontext['filter_mode'] = filter_mode
response.qcontext['default_category'] = request.env['ir.model.data']._xmlid_to_res_id('runbot.default_category')
response.qcontext['qu'] = QueryURL('/runbot/%s' % (slug(project) if project else ''), path_args=['search'], search=search, refresh=refresh)
response.qcontext['qu'] = QueryURL('/runbot/%s' % (slug(project) if project else ''), search=search, refresh=refresh, has_pr=has_pr)
if 'title' not in response.qcontext:
response.qcontext['title'] = 'Runbot %s' % project.name or ''
response.qcontext['nb_build_errors'] = nb_build_errors
@ -107,7 +108,7 @@ class Runbot(Controller):
'/runbot',
'/runbot/<model("runbot.project"):project>',
'/runbot/<model("runbot.project"):project>/search/<search>'], website=True, auth='public', type='http')
def bundles(self, project=None, search='', projects=False, refresh=False, for_next_freeze=False, limit=40, **kwargs):
def bundles(self, project=None, search='', projects=False, refresh=False, for_next_freeze=False, limit=40, has_pr=None, **kwargs):
search = search if len(search) < 60 else search[:60]
env = request.env
categories = env['runbot.category'].search([])
@ -128,6 +129,9 @@ class Runbot(Controller):
if project:
domain = [('last_batch', '!=', False), ('project_id', '=', project.id), ('no_build', '=', False)]
if has_pr is not None:
domain.append(('has_pr', '=', bool(has_pr)))
filter_mode = request.httprequest.cookies.get('filter_mode', False)
if filter_mode == 'sticky':
domain.append(('sticky', '=', True))
@ -176,6 +180,8 @@ class Runbot(Controller):
'project': project,
'triggers': triggers,
'trigger_display': trigger_display,
'has_pr': has_pr,
'search': search,
})
context.update({'message': request.env['ir.config_parameter'].sudo().get_param('runbot.runbot_message')})

View File

@ -35,6 +35,8 @@ class Bundle(models.Model):
base_id = fields.Many2one('runbot.bundle', 'Base bundle', compute='_compute_base_id', store=True)
to_upgrade = fields.Boolean('To upgrade', compute='_compute_to_upgrade', store=True, index=False)
has_pr = fields.Boolean('Has PR', compute='_compute_has_pr', store=True)
version_id = fields.Many2one('runbot.version', 'Version', compute='_compute_version_id', store=True, recursive=True)
version_number = fields.Char(related='version_id.number', store=True, index=True)
@ -110,6 +112,11 @@ class Bundle(models.Model):
else:
bundle.base_id = master_base or fallback
@api.depends('branch_ids.is_pr', 'branch_ids.alive')
def _compute_has_pr(self):
for bundle in self:
bundle.has_pr = any(branch.is_pr and branch.alive for branch in bundle.branch_ids)
@tools.ormcache('project_id')
def _get_base_ids(self, project_id):
return [(b.id, b.name) for b in self.search([('is_base', '=', True), ('project_id', '=', project_id)])]

View File

@ -8,7 +8,13 @@
<div class="input-group md-form form-sm form-2 pl-0">
<input class="form-control my-0 py-1" type="text" placeholder="Search" aria-label="Search" name="search" t-att-value="search"/>
<div class="input-group-append">
<button type='submit' class="input-group-text red lighten-3" id="basic-text1">
<a t-if="has_pr" class="btn btn-primary active input-group-text" title="All" t-att-href="qu(has_pr=None)">
<i class="fa fa-github text-grey"/>
</a>
<a t-else="" class="btn input-group-text" title="Open pull requests" t-att-href="qu(has_pr=1)">
<i class="fa fa-github text-grey"/>
</a>
<button type='submit' class="input-group-text">
<i class="fa fa-search text-grey"/>
</button>
</div>

View File

@ -53,6 +53,7 @@
<field name="defined_base_id"/>
<field name="version_id"/>
<field name="for_next_freeze"/>
<field name="has_pr"/>
</group>
<group string="Testing options">
<field name="no_build"/>
@ -154,6 +155,22 @@
</field>
</record>
<record id="runbot_bundle_search_view" model="ir.ui.view">
<field name="name">runbot.bundle.filter</field>
<field name="model">runbot.bundle</field>
<field name="arch" type="xml">
<search string="Search bundle">
<field name="name"/>
<field name="version_id"/>
<separator/>
<filter string="For next freeze" name="for_next_freeze" domain="[('for_next_freeze', '=', True)]"/>
<filter string="Has open pr" name="has_pr" domain="[('has_pr', '=', True)]"/>
<filter string="No pr" name="no_pr" domain="[('branch_ids', '!=', []), '!', ('branch_ids', 'any', [('is_pr', '=', True)])]"/>
<separator/>
</search>
</field>
</record>
<record id="view_runbot_batch" model="ir.ui.view">
<field name="model">runbot.batch</field>
<field name="arch" type="xml">