mirror of
https://github.com/odoo/runbot.git
synced 2025-03-27 13:25:47 +07:00
[IMP] forwardport: move more utility into Queue
- Auto-init cron based on model info, remove from XML file. - Move trigger-on-create into the super class. Signed-off-by: Xavier Morel <xmo@odoo.com>
This commit is contained in:
parent
d4cb314e8f
commit
335a52580c
@ -1,28 +1,4 @@
|
|||||||
<odoo>
|
<odoo>
|
||||||
<record model="ir.cron" id="port_forward">
|
|
||||||
<field name="name">Check if there are merged PRs to port</field>
|
|
||||||
<field name="model_id" ref="model_forwardport_batches"/>
|
|
||||||
<field name="state">code</field>
|
|
||||||
<field name="code">model._process()</field>
|
|
||||||
<field name="interval_number">6</field>
|
|
||||||
<field name="interval_type">hours</field>
|
|
||||||
<field name="numbercall">-1</field>
|
|
||||||
<field name="doall" eval="False"/>
|
|
||||||
<field name="priority">43</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.cron" id="updates">
|
|
||||||
<field name="name">Update followup FP PRs</field>
|
|
||||||
<field name="model_id" ref="model_forwardport_updates"/>
|
|
||||||
<field name="state">code</field>
|
|
||||||
<field name="code">model._process()</field>
|
|
||||||
<field name="interval_number">6</field>
|
|
||||||
<field name="interval_type">hours</field>
|
|
||||||
<field name="numbercall">-1</field>
|
|
||||||
<field name="doall" eval="False"/>
|
|
||||||
<field name="priority">46</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.cron" id="reminder">
|
<record model="ir.cron" id="reminder">
|
||||||
<field name="name">Remind open PR</field>
|
<field name="name">Remind open PR</field>
|
||||||
<field name="model_id" ref="model_runbot_merge_pull_requests"/>
|
<field name="model_id" ref="model_runbot_merge_pull_requests"/>
|
||||||
@ -31,17 +7,5 @@
|
|||||||
<field name="interval_number">1</field>
|
<field name="interval_number">1</field>
|
||||||
<field name="interval_type">days</field>
|
<field name="interval_type">days</field>
|
||||||
<field name="numbercall">-1</field>
|
<field name="numbercall">-1</field>
|
||||||
<field name="doall" eval="False"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.cron" id="remover">
|
|
||||||
<field name="name">Remove branches of merged PRs</field>
|
|
||||||
<field name="model_id" ref="model_forwardport_branch_remover"/>
|
|
||||||
<field name="state">code</field>
|
|
||||||
<field name="code">model._process()</field>
|
|
||||||
<field name="interval_number">6</field>
|
|
||||||
<field name="interval_type">hours</field>
|
|
||||||
<field name="numbercall">-1</field>
|
|
||||||
<field name="doall" eval="False"/>
|
|
||||||
</record>
|
</record>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
@ -16,6 +16,8 @@ from dateutil import relativedelta
|
|||||||
from odoo import api, fields, models
|
from odoo import api, fields, models
|
||||||
from odoo.addons.runbot_merge import git
|
from odoo.addons.runbot_merge import git
|
||||||
|
|
||||||
|
from odoo.modules.registry import Registry
|
||||||
|
|
||||||
# how long a merged PR survives
|
# how long a merged PR survives
|
||||||
MERGE_AGE = relativedelta.relativedelta(weeks=1)
|
MERGE_AGE = relativedelta.relativedelta(weeks=1)
|
||||||
FOOTER = '\nMore info at https://github.com/odoo/odoo/wiki/Mergebot#forward-port\n'
|
FOOTER = '\nMore info at https://github.com/odoo/odoo/wiki/Mergebot#forward-port\n'
|
||||||
@ -26,8 +28,43 @@ PROCESS_LIMIT = 10
|
|||||||
class Queue(models.BaseModel):
|
class Queue(models.BaseModel):
|
||||||
_name = 'forwardport.queue'
|
_name = 'forwardport.queue'
|
||||||
_description = "Common cron behaviour for queue-type models attached to crons"
|
_description = "Common cron behaviour for queue-type models attached to crons"
|
||||||
|
_cron_name: str
|
||||||
|
|
||||||
|
pool: Registry
|
||||||
sequence = fields.Integer(default=0)
|
sequence = fields.Integer(default=0)
|
||||||
|
|
||||||
|
def init(self):
|
||||||
|
super().init()
|
||||||
|
# not sure why this triggers on abstract models...
|
||||||
|
if not self._abstract:
|
||||||
|
self.pool.post_init(self._init_cron)
|
||||||
|
|
||||||
|
def _init_cron(self):
|
||||||
|
cron_values = {
|
||||||
|
'name': self._description,
|
||||||
|
'state': 'code',
|
||||||
|
'code': "model._process()",
|
||||||
|
'interval_number': 12,
|
||||||
|
'interval_type': 'hours',
|
||||||
|
'numbercall': -1,
|
||||||
|
}
|
||||||
|
if c := self.env.ref(self._cron_name, raise_if_not_found=False):
|
||||||
|
c.write(cron_values)
|
||||||
|
else:
|
||||||
|
c = self.env['ir.cron'].create({
|
||||||
|
**cron_values,
|
||||||
|
'model_id': self.env['ir.model']._get(self._name).id,
|
||||||
|
})
|
||||||
|
self.env['ir.model.data']._update_xmlids([{
|
||||||
|
'xml_id': self._cron_name,
|
||||||
|
'record': c,
|
||||||
|
}])
|
||||||
|
|
||||||
|
@api.model_create_multi
|
||||||
|
def create(self, vals_list):
|
||||||
|
self.env.ref(self._cron_name)._trigger()
|
||||||
|
return super().create(vals_list)
|
||||||
|
|
||||||
def _process_item(self):
|
def _process_item(self):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@ -62,7 +99,7 @@ class Queue(models.BaseModel):
|
|||||||
class ForwardPortTasks(models.Model):
|
class ForwardPortTasks(models.Model):
|
||||||
_name = 'forwardport.batches'
|
_name = 'forwardport.batches'
|
||||||
_inherit = ['forwardport.queue', 'mail.thread']
|
_inherit = ['forwardport.queue', 'mail.thread']
|
||||||
_description = 'batches which got merged and are candidates for forward-porting'
|
_description = 'Check merged batches to forward port'
|
||||||
_cron_name = 'forwardport.port_forward'
|
_cron_name = 'forwardport.port_forward'
|
||||||
|
|
||||||
batch_id = fields.Many2one('runbot_merge.batch', required=True, index=True)
|
batch_id = fields.Many2one('runbot_merge.batch', required=True, index=True)
|
||||||
@ -77,14 +114,9 @@ class ForwardPortTasks(models.Model):
|
|||||||
retry_after_relative = fields.Char(compute="_compute_retry_after_relative")
|
retry_after_relative = fields.Char(compute="_compute_retry_after_relative")
|
||||||
pr_id = fields.Many2one('runbot_merge.pull_requests')
|
pr_id = fields.Many2one('runbot_merge.pull_requests')
|
||||||
|
|
||||||
@api.model_create_multi
|
|
||||||
def create(self, vals_list):
|
|
||||||
self.env.ref('forwardport.port_forward')._trigger()
|
|
||||||
return super().create(vals_list)
|
|
||||||
|
|
||||||
def write(self, vals):
|
def write(self, vals):
|
||||||
if retry := vals.get('retry_after'):
|
if retry := vals.get('retry_after'):
|
||||||
self.env.ref('forwardport.port_forward')\
|
self.env.ref(self._cron_name)\
|
||||||
._trigger(fields.Datetime.to_datetime(retry))
|
._trigger(fields.Datetime.to_datetime(retry))
|
||||||
return super().write(vals)
|
return super().write(vals)
|
||||||
|
|
||||||
@ -286,17 +318,12 @@ Updates = list[Update]
|
|||||||
class UpdateQueue(models.Model):
|
class UpdateQueue(models.Model):
|
||||||
_name = 'forwardport.updates'
|
_name = 'forwardport.updates'
|
||||||
_inherit = ['forwardport.queue']
|
_inherit = ['forwardport.queue']
|
||||||
_description = 'if a forward-port PR gets updated & has followups (cherrypick succeeded) the followups need to be updated as well'
|
_description = 'Update forward ports of an updated PR'
|
||||||
_cron_name = 'forwardport.updates'
|
_cron_name = 'forwardport.updates'
|
||||||
|
|
||||||
original_root = fields.Many2one('runbot_merge.pull_requests')
|
original_root = fields.Many2one('runbot_merge.pull_requests')
|
||||||
new_root = fields.Many2one('runbot_merge.pull_requests')
|
new_root = fields.Many2one('runbot_merge.pull_requests')
|
||||||
|
|
||||||
@api.model_create_multi
|
|
||||||
def create(self, vals_list):
|
|
||||||
self.env.ref('forwardport.updates')._trigger()
|
|
||||||
return super().create(vals_list)
|
|
||||||
|
|
||||||
def _process_item(self):
|
def _process_item(self):
|
||||||
previous = self.new_root
|
previous = self.new_root
|
||||||
sentry_sdk.set_tag("update-root", self.new_root.display_name)
|
sentry_sdk.set_tag("update-root", self.new_root.display_name)
|
||||||
@ -376,16 +403,11 @@ _deleter = _logger.getChild('deleter')
|
|||||||
class DeleteBranches(models.Model):
|
class DeleteBranches(models.Model):
|
||||||
_name = 'forwardport.branch_remover'
|
_name = 'forwardport.branch_remover'
|
||||||
_inherit = ['forwardport.queue']
|
_inherit = ['forwardport.queue']
|
||||||
_description = "Removes branches of merged PRs"
|
_description = "Removes branches of merged and closed PRs"
|
||||||
_cron_name = 'forwardport.remover'
|
_cron_name = 'forwardport.remover'
|
||||||
|
|
||||||
pr_id = fields.Many2one('runbot_merge.pull_requests', index=True)
|
pr_id = fields.Many2one('runbot_merge.pull_requests', index=True)
|
||||||
|
|
||||||
@api.model_create_multi
|
|
||||||
def create(self, vals_list):
|
|
||||||
self.env.ref('forwardport.remover')._trigger(datetime.now() - MERGE_AGE)
|
|
||||||
return super().create(vals_list)
|
|
||||||
|
|
||||||
def _search_domain(self):
|
def _search_domain(self):
|
||||||
cutoff = getattr(builtins, 'forwardport_merged_before', None) \
|
cutoff = getattr(builtins, 'forwardport_merged_before', None) \
|
||||||
or fields.Datetime.to_string(datetime.now() - MERGE_AGE)
|
or fields.Datetime.to_string(datetime.now() - MERGE_AGE)
|
||||||
|
Loading…
Reference in New Issue
Block a user