This commit is contained in:
Xavier-Do 2025-02-27 08:43:06 +01:00
parent f5a56f54f9
commit 382dc11021
2 changed files with 36 additions and 7 deletions

View File

@ -191,7 +191,12 @@ class ConfigStep(models.Model):
# wip replace previous field by matrix
upgrade_matrix_id = fields.Many2one('runbot.upgrade.matrix', 'Upgrade matrix', tracking=True)
upgrade_current_source = fields.Boolean('Upgrade Curent source', help='Use current build as Source if version match', default=True, tracking=True)
upgrade_current_target = fields.Boolean('Upgrade Curent target', help='Use current build as target if version match', default=True, tracking=True)
# TODO maybe remove this field in the future, should all work in the same build
upgrade_from_bellow = fields.boolean('Upgrade from bellow', help="Standard upgrade behaviour", default=True, tracking=True)
upgrade_to_above = fields.boolean('Upgrade to above', help="Will behave as a complement", default=True, tracking=True)
upgrade_flat = fields.Boolean("Flat", help="Take all decisions in on build")
upgrade_config_id = fields.Many2one('runbot.build.config',string='Upgrade Config', tracking=True, index=True)
@ -864,16 +869,32 @@ class ConfigStep(models.Model):
refs_builds = refs_batches.mapped('slot_ids').filtered(
lambda slot: slot.trigger_id == upgrade_dumps_trigger_id
).mapped('build_id')
# should we filter on active? implicit. On match type? on skipped ?
# is last_"done"_batch enough?
# TODO active test false and take last done/running build limit 1 -> in case of rebuild
return refs_builds
def _is_upgrade_step(self):
return self.job_type in ('configure_upgrade', 'configure_upgrade_complement')
def _reference_batches(self, batch, trigger):
if self.job_type == 'configure_upgrade_complement':
# upgrade_matrix_id
# upgrade_current_source
# upgrade_current_target
# upgrade_from_bellow
# upgrade_to_above
if self.upgrade_matrix_id:
batches = self.env['runbot.batch']
base_batch = batch if batch.reference_batch_ids else batch.base_reference_batch_id
reference_batch_ids = base_batch.reference_batch_ids
if self.upgrade_from_bellow:
from_versions = self.upgrade_matrix_id._get_versions_to(batch.version_id)
batches |= reference_batch_ids.filtered(lambda batch: batch.bundle_id.version_id in from_versions)
if self.upgrade_to_above:
to_versions = self.upgrade_matrix_id._get_versions_from(batch.version_id)
batches |= reference_batch_ids.filtered(lambda batch: batch.bundle_id.version_id in to_versions)
return batches
elif self.job_type == 'configure_upgrade_complement':
return self._reference_batches_complement(batch, trigger)
else:
return self._reference_batches_upgrade(batch, trigger.upgrade_dumps_trigger_id.category_id.id)

View File

@ -105,8 +105,6 @@ class UpgradeMatrix(models.Model):
from_versions_string = ', '.join(sorted(from_versions))
lines.append(f'{to_version.number} - ({from_versions_string})')
matrix.matrix_summary = '\n'.join(lines)
print('recompute')
print(matrix.matrix_summary)
def update_matrix_entries(self):
for metric in self:
@ -138,6 +136,16 @@ class UpgradeMatrix(models.Model):
def reset_matrix_enabled(self):
for matrix in self:
matrix.entry_ids._update_enabled(force=True)
def _get_versions_from(self, from_version):
entries = self.entries.filtered(lambda e: e.enabled)
if from_version:
return entries.filtered(lambda e: e.from_version_id == from_version).mapped('to_version_id')
def _get_versions_to(self, to_version):
entries = self.entries.filtered(lambda e: e.enabled)
if to_version:
return entries.filtered(lambda e: e.to_version_id == to_version).mapped('from_version_id')
class UpgradeMatrixEntry(models.Model):