diff --git a/runbot/models/build_config.py b/runbot/models/build_config.py
index 469ef413..0a4aa155 100644
--- a/runbot/models/build_config.py
+++ b/runbot/models/build_config.py
@@ -708,7 +708,7 @@ class ConfigStep(models.Model):
dbs = dump_builds.database_ids.sorted('db_suffix')
valid_databases += list(self._filter_upgrade_database(dbs, upgrade_db.db_pattern))
if not valid_databases:
- build._log('_run_configure_upgrade', 'No datase found for pattern %s' % (upgrade_db.db_pattern), level='ERROR')
+ build._log('_run_configure_upgrade', 'No database found for pattern %s' % (upgrade_db.db_pattern), level='ERROR')
for db in valid_databases:
#commit_ids = build.params_id.commit_ids
#if commit_ids != target.params_id.commit_ids:
@@ -722,7 +722,7 @@ class ConfigStep(models.Model):
'upgrade_to_build_id': target.id,
'upgrade_from_build_id': source,
'dump_db': db.id,
- 'config_id': self.upgrade_config_id
+ 'config_id': self.upgrade_config_id,
})
child.description = 'Testing migration from %s to %s using db %s (%s)' % (
diff --git a/runbot/templates/batch.xml b/runbot/templates/batch.xml
index d64ec194..cdbaab5c 100644
--- a/runbot/templates/batch.xml
+++ b/runbot/templates/batch.xml
@@ -37,13 +37,6 @@
-
- Version reference batches (for upgrade) |
-
-
-
- |
-
Commits |
@@ -118,6 +111,30 @@
|
+
+
+
+
+ Reference batches (is base)
+
+
+
+ Reference batches (custom, not using base)
+
+
+
+ Reference batches (from base)
+
+
+ |
+
+
+
+
+ |
+
diff --git a/runbot/tests/test_upgrade.py b/runbot/tests/test_upgrade.py
index 556f93f7..dd523843 100644
--- a/runbot/tests/test_upgrade.py
+++ b/runbot/tests/test_upgrade.py
@@ -45,13 +45,32 @@ class TestUpgradeFlow(RunbotCase):
}).id,
})
+ self.default_category = self.env.ref('runbot.default_category')
+ self.nightly_category = self.env.ref('runbot.nightly_category')
+
+
#######################
- # Basic upgrade config
+ # Basic test config
#######################
+
+ # 0. Basic configs
+ # 0.1. Install
+ self.config_step_install = self.env['runbot.build.config.step'].create({
+ 'name': 'all',
+ 'job_type': 'install_odoo',
+ })
+ self.config_install = self.env['runbot.build.config'].create({
+ 'name': 'Install config',
+ 'step_order_ids': [
+ (0, 0, {'step_id': self.config_step_install.id}),
+ ],
+ })
+
+ # 0.2. Restore and upgrade
self.step_restore = self.env['runbot.build.config.step'].create({
'name': 'restore',
'job_type': 'restore',
- 'restore_rename_db_suffix': False
+ 'restore_rename_db_suffix': False,
})
self.step_test_upgrade = self.env['runbot.build.config.step'].create({
'name': 'test_upgrade',
@@ -61,60 +80,42 @@ class TestUpgradeFlow(RunbotCase):
'name': 'Upgrade server',
'step_order_ids': [
(0, 0, {'step_id': self.step_restore.id}),
- (0, 0, {'step_id': self.step_test_upgrade.id})
- ]
+ (0, 0, {'step_id': self.step_test_upgrade.id}),
+ ],
})
- ##########
- # Nightly
- ##########
- self.nightly_category = self.env.ref('runbot.nightly_category')
- self.config_nightly = self.env['runbot.build.config'].create({'name': 'Nightly config'})
- self.config_nightly_db_generate = self.env['runbot.build.config'].create({'name': 'Nightly generate'})
- self.config_all = self.env['runbot.build.config'].create({'name': 'Demo'})
- self.config_all_no_demo = self.env['runbot.build.config'].create({'name': 'No demo'})
- self.trigger_server_nightly = self.env['runbot.trigger'].create({
- 'name': 'Nighly server',
- 'dependency_ids': [(4, self.repo_server.id)],
- 'config_id': self.config_nightly.id,
- 'project_id': self.project.id,
- 'category_id': self.nightly_category.id
+
+ # 1. Template demo + nodemo
+ self.config_step_install_no_demo = self.env['runbot.build.config.step'].create({
+ 'name': 'no-demo-all',
+ 'job_type': 'install_odoo',
})
- self.trigger_addons_nightly = self.env['runbot.trigger'].create({
- 'name': 'Nighly addons',
+ self.config_step_upgrade_complement = self.env['runbot.build.config.step'].create({
+ 'name': 'upgrade_complement',
+ 'job_type': 'configure_upgrade_complement',
+ 'upgrade_config_id': self.test_upgrade_config.id,
+ })
+
+ self.config_template = self.env['runbot.build.config'].create({
+ 'name': 'Template config',
+ 'step_order_ids': [
+ (0, 0, {'step_id': self.config_step_install.id}),
+ (0, 0, {'step_id': self.config_step_install_no_demo.id}),
+ (0, 0, {'step_id': self.config_step_upgrade_complement.id}),
+ ],
+ })
+ self.trigger_template = self.env['runbot.trigger'].create({
+ 'name': 'Template',
'dependency_ids': [(4, self.repo_server.id), (4, self.repo_addons.id)],
- 'config_id': self.config_nightly.id,
+ 'config_id': self.config_template.id,
'project_id': self.project.id,
- 'category_id': self.nightly_category.id
+ 'category_id': self.default_category.id,
})
- ##########
- # Weekly
- ##########
- self.weekly_category = self.env.ref('runbot.weekly_category')
- self.config_weekly = self.env['runbot.build.config'].create({'name': 'Nightly config'})
- self.config_single = self.env['runbot.build.config'].create({'name': 'Single'})
- self.trigger_server_weekly = self.env['runbot.trigger'].create({
- 'name': 'Nighly server',
- 'dependency_ids': [(4, self.repo_server.id)],
- 'config_id': self.config_weekly.id,
- 'project_id': self.project.id,
- 'category_id': self.weekly_category.id
- })
- self.trigger_addons_weekly = self.env['runbot.trigger'].create({
- 'name': 'Nighly addons',
- 'dependency_ids': [(4, self.repo_server.id), (4, self.repo_addons.id)],
- 'config_id': self.config_weekly.id,
- 'project_id': self.project.id,
- 'category_id': self.weekly_category.id
- })
- ########################################
- # Configure upgrades for 'to current' version
- ########################################
- master = self.env['runbot.version']._get('master')
- self.step_upgrade_server = self.env['runbot.build.config.step'].create({
- 'name': 'upgrade_server',
+ # 2. upgrade to current
+ self.step_upgrade_to_current = self.env['runbot.build.config.step'].create({
+ 'name': 'upgrade',
'job_type': 'configure_upgrade',
'upgrade_to_current': True,
'upgrade_from_previous_major_version': True,
@@ -122,26 +123,27 @@ class TestUpgradeFlow(RunbotCase):
'upgrade_flat': True,
'upgrade_config_id': self.test_upgrade_config.id,
'upgrade_dbs': [
- (0, 0, {'config_id': self.config_all.id, 'db_pattern': 'all', 'min_target_version_id': master.id}),
- (0, 0, {'config_id': self.config_all_no_demo.id, 'db_pattern': 'no-demo-all'})
- ]
+ (0, 0, {'config_id': self.config_template.id, 'db_pattern': 'all', 'min_target_version_id': self.master_bundle.version_id.id}),
+ (0, 0, {'config_id': self.config_template.id, 'db_pattern': 'no-demo-all'}),
+ ],
})
- self.upgrade_server_config = self.env['runbot.build.config'].create({
+ self.config_upgrade_to_current = self.env['runbot.build.config'].create({
'name': 'Upgrade server',
- 'step_order_ids': [(0, 0, {'step_id': self.step_upgrade_server.id})]
+ 'step_order_ids': [(0, 0, {'step_id': self.step_upgrade_to_current.id})],
})
- self.trigger_upgrade_server = self.env['runbot.trigger'].create({
+ self.trigger_upgrade_to_current = self.env['runbot.trigger'].create({
'name': 'Server upgrade',
- 'repo_ids': [(4, self.repo_upgrade.id), (4, self.repo_server.id)],
- 'config_id': self.upgrade_server_config.id,
+ 'repo_ids': [(4, self.repo_upgrade.id), (4, self.repo_server.id), (4, self.repo_addons.id)],
+ 'config_id': self.config_upgrade_to_current.id,
'project_id': self.project.id,
- 'upgrade_dumps_trigger_id': self.trigger_server_nightly.id,
+ 'upgrade_dumps_trigger_id': self.trigger_template.id,
})
- ########################################
- # Configure upgrades for previouses versions
- ########################################
- self.step_upgrade = self.env['runbot.build.config.step'].create({
+ # update the template trigger to cross reference the upgrade trigger
+ self.trigger_template.upgrade_dumps_trigger_id = self.trigger_upgrade_to_current
+
+ # 3. upgrade between stable (master upgrade)
+ self.step_upgrade_stable = self.env['runbot.build.config.step'].create({
'name': 'upgrade',
'job_type': 'configure_upgrade',
'upgrade_to_major_versions': True,
@@ -149,32 +151,78 @@ class TestUpgradeFlow(RunbotCase):
'upgrade_flat': True,
'upgrade_config_id': self.test_upgrade_config.id,
'upgrade_dbs': [
- (0, 0, {'config_id': self.config_all.id, 'db_pattern': 'all', 'min_target_version_id': master.id}),
- (0, 0, {'config_id': self.config_all_no_demo.id, 'db_pattern': 'no-demo-all'})
- ]
+ (0, 0, {'config_id': self.config_template.id, 'db_pattern': 'all', 'min_target_version_id': self.master_bundle.version_id.id}),
+ (0, 0, {'config_id': self.config_template.id, 'db_pattern': 'no-demo-all'}),
+ ],
})
- self.upgrade_config = self.env['runbot.build.config'].create({
- 'name': 'Upgrade',
- 'step_order_ids': [(0, 0, {'step_id': self.step_upgrade.id})]
+ self.config_upgrade_stable = self.env['runbot.build.config'].create({
+ 'name': 'Upgrade server',
+ 'step_order_ids': [(0, 0, {'step_id': self.step_upgrade_stable.id})],
})
- self.trigger_upgrade = self.env['runbot.trigger'].create({
- 'name': 'Upgrade',
+ self.trigger_upgrade_stable = self.env['runbot.trigger'].create({
+ 'name': 'Server upgrade',
'repo_ids': [(4, self.repo_upgrade.id)],
- 'config_id': self.upgrade_config.id,
+ 'dependency_ids': [(4, self.repo_server.id), (4, self.repo_addons.id)],
+ 'config_id': self.config_upgrade_stable.id,
'project_id': self.project.id,
- 'upgrade_dumps_trigger_id': self.trigger_addons_nightly.id,
+ 'upgrade_dumps_trigger_id': self.trigger_template.id,
})
+ self.config_all = self.env['runbot.build.config'].create({'name': 'Demo'})
+ self.config_all_no_demo = self.env['runbot.build.config'].create({'name': 'No demo'})
+
+ ##########
+ # Nightly
+ ##########
+ self.config_single_module = self.env['runbot.build.config'].create({'name': 'Single'})
+ self.trigger_single_nightly = self.env['runbot.trigger'].create({
+ 'name': 'Nighly server',
+ 'dependency_ids': [(4, self.repo_server.id), (4, self.repo_addons.id)],
+ 'config_id': self.config_single_module.id,
+ 'project_id': self.project.id,
+ 'category_id': self.nightly_category.id,
+ })
+
+
+ self.step_upgrade_all = self.env['runbot.build.config.step'].create({
+ 'name': 'upgrade',
+ 'job_type': 'configure_upgrade',
+ 'upgrade_to_master': True,
+ 'upgrade_to_major_versions': True,
+ 'upgrade_from_previous_major_version': True,
+ 'upgrade_from_all_intermediate_version': True,
+ 'upgrade_flat': False,
+ 'upgrade_config_id': self.test_upgrade_config.id,
+ 'upgrade_dbs': [
+ (0, 0, {'config_id': self.config_install.id, 'db_pattern': '*'}),
+ ],
+ })
+ self.upgrade_config_nighly = self.env['runbot.build.config'].create({
+ 'name': 'Upgrade',
+ 'step_order_ids': [(0, 0, {'step_id': self.step_upgrade_all.id})],
+ })
+ self.trigger_upgrade_nightly = self.env['runbot.trigger'].create({
+ 'name': 'Upgrade',
+ 'dependency_ids': [(4, self.repo_upgrade.id)],
+ 'config_id': self.upgrade_config_nighly.id,
+ 'project_id': self.project.id,
+ 'upgrade_dumps_trigger_id': self.trigger_single_nightly.id,
+ 'category_id': self.nightly_category.id,
+ })
+
+ self.batches_per_version = {}
+ self.nightly_batches_per_version = {}
+ self.template_per_version = {}
+ self.nightly_single_per_version = {}
with mute_logger('odoo.addons.runbot.models.commit'):
- self.build_niglty_master, self.build_weekly_master = self.create_version('master')
- self.build_niglty_11, self.build_weekly_11 = self.create_version('11.0')
- self.build_niglty_113, self.build_weekly_113 = self.create_version('saas-11.3')
- self.build_niglty_12, self.build_weekly_12 = self.create_version('12.0')
- self.build_niglty_123, self.build_weekly_123 = self.create_version('saas-12.3')
- self.build_niglty_13, self.build_weekly_13 = self.create_version('13.0')
- self.build_niglty_131, self.build_weekly_131 = self.create_version('saas-13.1')
- self.build_niglty_132, self.build_weekly_132 = self.create_version('saas-13.2')
- self.build_niglty_133, self.build_weekly_133 = self.create_version('saas-13.3')
+ self.create_version('master')
+ self.create_version('15.0')
+ self.create_version('16.0')
+ self.create_version('saas-16.3')
+ self.create_version('17.0')
+ self.create_version('saas-17.1')
+ self.create_version('saas-17.2')
+ self.create_version('saas-17.3')
def create_version(self, name):
intname = int(''.join(c for c in name if c.isdigit())) if name != 'master' else 0
@@ -201,62 +249,42 @@ class TestUpgradeFlow(RunbotCase):
branch_server = self.branch_server
branch_addons = self.branch_addons
+ host = self.env['runbot.host']._get_current()
+
self.assertEqual(branch_server.bundle_id, branch_addons.bundle_id)
bundle = branch_server.bundle_id
self.assertEqual(bundle.name, name)
bundle.is_base = True
- # create nightly
+ batch = bundle._force()
+ batch._process()
+ build_per_config = {build.params_id.config_id: build for build in batch.slot_ids.mapped('build_id')}
+ template_build = build_per_config[self.config_template]
+ template_build.database_ids = [
+ (0, 0, {'name': '%s-%s' % (template_build.dest, 'all')}),
+ (0, 0, {'name': '%s-%s' % (template_build.dest, 'no-demo-all')}),
+ ]
+ template_build.host = host.name
+ template_build.local_state = 'done'
+ batch.state = 'done'
+
+ self.batches_per_version[name] = batch
+ self.template_per_version[name] = template_build
batch_nigthly = bundle._force(self.nightly_category.id)
batch_nigthly._process()
self.assertEqual(batch_nigthly.category_id, self.nightly_category)
- builds_nigthly = {}
- host = self.env['runbot.host']._get_current()
- for build in batch_nigthly.slot_ids.mapped('build_id'):
- self.assertEqual(build.params_id.config_id, self.config_nightly)
- main_child = build._add_child({'config_id': self.config_nightly_db_generate.id})
- demo = main_child._add_child({'config_id': self.config_all.id})
- demo.database_ids = [
- (0, 0, {'name': '%s-%s' % (demo.dest, 'base')}),
- (0, 0, {'name': '%s-%s' % (demo.dest, 'dummy')}),
- (0, 0, {'name': '%s-%s' % (demo.dest, 'all')})]
- demo.host = host.name
- no_demo = main_child._add_child({'config_id': self.config_all_no_demo.id})
- no_demo.database_ids = [
- (0, 0, {'name': '%s-%s' % (no_demo.dest, 'base')}),
- (0, 0, {'name': '%s-%s' % (no_demo.dest, 'dummy')}),
- (0, 0, {'name': '%s-%s' % (no_demo.dest, 'no-demo-all')})]
- no_demo.host = host.name
- (build | main_child | demo | no_demo).write({'local_state': 'done'})
- builds_nigthly[('root', build.params_id.trigger_id)] = build
- builds_nigthly[('demo', build.params_id.trigger_id)] = demo
- builds_nigthly[('no_demo', build.params_id.trigger_id)] = no_demo
+ build_per_config = {build.params_id.config_id: build for build in batch_nigthly.slot_ids.mapped('build_id')}
+ single_module_build = build_per_config[self.config_single_module]
+ for module in ['web', 'base', 'website']:
+ module_child = single_module_build._add_child({'config_id': self.config_install.id}, description=f"Installing module {module}")
+ module_child.database_ids = [
+ (0, 0, {'name': '%s-%s' % (module_child.dest, module)}),
+ ]
+ module_child.host = host.name
+ single_module_build.local_state = 'done'
batch_nigthly.state = 'done'
-
- batch_weekly = bundle._force(self.weekly_category.id)
- batch_weekly._process()
- self.assertEqual(batch_weekly.category_id, self.weekly_category)
- builds_weekly = {}
- build = batch_weekly.slot_ids.filtered(lambda s: s.trigger_id == self.trigger_addons_weekly).build_id
- build.database_ids = [(0, 0, {'name': '%s-%s' % (build.dest, 'dummy')})]
- self.assertEqual(build.params_id.config_id, self.config_weekly)
- builds_weekly[('root', build.params_id.trigger_id)] = build
- for db in ['l10n_be', 'l10n_ch', 'mail', 'account', 'stock']:
- child = build._add_child({'config_id': self.config_single.id})
- child.database_ids = [(0, 0, {'name': '%s-%s' % (child.dest, db)})]
- child.local_state = 'done'
- child.host = host.name
- builds_weekly[(db, build.params_id.trigger_id)] = child
- build.local_state = 'done'
- batch_weekly.state = 'done'
-
- batch_default = bundle._force()
- batch_default._process()
- build = batch_default.slot_ids.filtered(lambda s: s.trigger_id == self.trigger_server).build_id
- build.local_state = 'done'
- batch_default.state = 'done'
-
- return builds_nigthly, builds_weekly
+ self.nightly_batches_per_version[name] = batch_nigthly
+ self.nightly_single_per_version[name] = single_module_build
@patch('odoo.addons.runbot.models.build.BuildResult._parse_config')
def test_all(self, *_):
@@ -264,82 +292,61 @@ class TestUpgradeFlow(RunbotCase):
self.assertEqual(self.branch_server.bundle_id, self.branch_upgrade.bundle_id)
self.assertTrue(self.branch_upgrade.bundle_id.is_base)
self.assertTrue(self.branch_upgrade.bundle_id.version_id)
- self.assertEqual(self.trigger_upgrade_server.upgrade_step_id, self.step_upgrade_server)
+ self.assertEqual(self.trigger_upgrade_to_current.upgrade_step_id, self.step_upgrade_to_current)
with self.assertRaises(UserError):
- self.step_upgrade_server.job_type = 'install_odoo'
- self.trigger_upgrade_server.flush_recordset(['upgrade_step_id'])
+ self.step_upgrade_to_current.job_type = 'install_odoo'
+ self.trigger_upgrade_to_current.flush_recordset(['upgrade_step_id'])
- batch = self.master_bundle._force()
- batch._process()
- upgrade_current_build = batch.slot_ids.filtered(lambda slot: slot.trigger_id == self.trigger_upgrade_server).build_id
- #host = self.env['runbot.host']._get_current()
- #upgrade_current_build.host = host.name
- upgrade_current_build._schedule()
+ master_batch = self.master_bundle._force()
+ master_batch._process()
+ self.assertEqual(master_batch.reference_batch_ids, self.env['runbot.batch'].browse([b.id for b in self.batches_per_version.values()]))
+ master_upgrade_build = master_batch.slot_ids.filtered(lambda slot: slot.trigger_id == self.trigger_upgrade_to_current).build_id
+ self.assertEqual(master_upgrade_build.params_id.builds_reference_ids, (self.template_per_version['17.0'] | self.template_per_version['saas-17.3']))
+ master_upgrade_build._schedule()
self.start_patcher('fetch_local_logs', 'odoo.addons.runbot.models.host.Host._fetch_local_logs', []) # the local logs have to be empty
- upgrade_current_build._schedule()
- self.assertEqual(upgrade_current_build.local_state, 'done')
- self.assertEqual(len(upgrade_current_build.children_ids), 4)
+ master_upgrade_build._schedule()
+ self.assertEqual(master_upgrade_build.local_state, 'done')
+ self.assertEqual(len(master_upgrade_build.children_ids), 4)
- [b_13_master_demo, b_13_master_no_demo, b_133_master_demo, b_133_master_no_demo] = upgrade_current_build.children_ids
+ [b_17_master_demo, b_17_master_no_demo, b_173_master_demo, b_173_master_no_demo] = master_upgrade_build.children_ids
- def assertOk(build, t, f, b_type, db_suffix, trigger):
- self.assertEqual(build.params_id.upgrade_to_build_id, t)
- self.assertEqual(build.params_id.upgrade_from_build_id, f[('root', trigger)])
- self.assertEqual(build.params_id.dump_db.build_id, f[(b_type, trigger)])
+ def assertOk(build, from_build, target_build, db_suffix):
+ self.assertEqual(build.params_id.upgrade_to_build_id, target_build)
+ self.assertEqual(build.params_id.upgrade_from_build_id, from_build)
+ self.assertEqual(build.params_id.dump_db.build_id, from_build)
self.assertEqual(build.params_id.dump_db.db_suffix, db_suffix)
self.assertEqual(build.params_id.config_id, self.test_upgrade_config)
- assertOk(b_13_master_demo, upgrade_current_build, self.build_niglty_13, 'demo', 'all', self.trigger_server_nightly)
- assertOk(b_13_master_no_demo, upgrade_current_build, self.build_niglty_13, 'no_demo', 'no-demo-all', self.trigger_server_nightly)
- assertOk(b_133_master_demo, upgrade_current_build, self.build_niglty_133, 'demo', 'all', self.trigger_server_nightly)
- assertOk(b_133_master_no_demo, upgrade_current_build, self.build_niglty_133, 'no_demo', 'no-demo-all', self.trigger_server_nightly)
+ assertOk(b_17_master_demo, self.template_per_version['17.0'], master_upgrade_build, 'all')
+ assertOk(b_17_master_no_demo, self.template_per_version['17.0'], master_upgrade_build, 'no-demo-all')
+ assertOk(b_173_master_demo, self.template_per_version['saas-17.3'], master_upgrade_build, 'all')
+ assertOk(b_173_master_no_demo, self.template_per_version['saas-17.3'], master_upgrade_build, 'no-demo-all')
- self.assertEqual(b_13_master_demo.params_id.commit_ids.repo_id, self.repo_server | self.repo_upgrade)
+ self.assertEqual(b_17_master_demo.params_id.commit_ids.repo_id, self.repo_server | self.repo_upgrade | self.repo_addons)
# upgrade repos tests
- upgrade_build = batch.slot_ids.filtered(lambda slot: slot.trigger_id == self.trigger_upgrade).build_id
- #upgrade_build.host = host.name
- upgrade_build._schedule()
- upgrade_build._schedule()
- self.assertEqual(upgrade_build.local_state, 'done')
- self.assertEqual(len(upgrade_build.children_ids), 2)
+ upgrade_stable_build = master_batch.slot_ids.filtered(lambda slot: slot.trigger_id == self.trigger_upgrade_stable).build_id
+ upgrade_stable_build._schedule()
+ upgrade_stable_build._schedule()
+ self.assertEqual(upgrade_stable_build.local_state, 'done')
+ self.assertEqual(len(upgrade_stable_build.children_ids), 2)
- [b_11_12, b_12_13] = upgrade_build.children_ids
+ [b_15_16, b_16_17] = upgrade_stable_build.children_ids
+ assertOk(b_15_16, self.template_per_version['15.0'], self.template_per_version['16.0'], 'no-demo-all')
+ assertOk(b_16_17, self.template_per_version['16.0'], self.template_per_version['17.0'], 'no-demo-all')
+ # nightly
+ nightly_batch = self.master_bundle._force(self.nightly_category.id)
+ nightly_batch._process()
+ nightly_batches = self.env['runbot.batch'].browse([b.id for b in self.nightly_batches_per_version.values()])
- assertOk(b_11_12, self.build_niglty_12[('root', self.trigger_addons_nightly)], self.build_niglty_11, 'no_demo', 'no-demo-all', self.trigger_addons_nightly)
- assertOk(b_12_13, self.build_niglty_13[('root', self.trigger_addons_nightly)], self.build_niglty_12, 'no_demo', 'no-demo-all', self.trigger_addons_nightly)
+ self.assertEqual(self.trigger_upgrade_nightly.upgrade_step_id, self.step_upgrade_all)
+ self.assertEqual(nightly_batch.reference_batch_ids, nightly_batches)
+ upgrade_nightly = nightly_batch.slot_ids.filtered(lambda slot: slot.trigger_id == self.trigger_upgrade_nightly).build_id
- step_upgrade_nightly = self.env['runbot.build.config.step'].create({
- 'name': 'upgrade_nightly',
- 'job_type': 'configure_upgrade',
- 'upgrade_to_master': True,
- 'upgrade_to_major_versions': True,
- 'upgrade_from_previous_major_version': True,
- 'upgrade_from_all_intermediate_version': True,
- 'upgrade_flat': False,
- 'upgrade_config_id': self.test_upgrade_config.id,
- 'upgrade_dbs': [
- (0, 0, {'config_id': self.config_single.id, 'db_pattern': '*'})
- ]
- })
- upgrade_config_nightly = self.env['runbot.build.config'].create({
- 'name': 'Upgrade nightly',
- 'step_order_ids': [(0, 0, {'step_id': step_upgrade_nightly.id})]
- })
- trigger_upgrade_addons_nightly = self.env['runbot.trigger'].create({
- 'name': 'Nigtly upgrade',
- 'config_id': upgrade_config_nightly.id,
- 'project_id': self.project.id,
- 'dependency_ids': [(4, self.repo_upgrade.id)],
- 'upgrade_dumps_trigger_id': self.trigger_addons_weekly.id,
- 'category_id': self.nightly_category.id
- })
- batch = self.master_bundle._force(self.nightly_category.id)
- batch._process()
- upgrade_nightly = batch.slot_ids.filtered(lambda slot: slot.trigger_id == trigger_upgrade_addons_nightly).build_id
- #upgrade_nightly.host = host.name
+ nightly_single_builds = self.env['runbot.build'].browse([b.id for b in self.nightly_single_per_version.values()])
+ self.assertEqual(upgrade_nightly.params_id.builds_reference_ids, nightly_single_builds)
upgrade_nightly._schedule()
upgrade_nightly._schedule()
to_version_builds = upgrade_nightly.children_ids
@@ -347,13 +354,23 @@ class TestUpgradeFlow(RunbotCase):
self.assertEqual(len(to_version_builds), 4)
self.assertEqual(
to_version_builds.mapped('params_id.upgrade_to_build_id.params_id.version_id.name'),
- ['11.0', '12.0', '13.0', 'master']
+ ['15.0', '16.0', '17.0', 'master'],
)
self.assertEqual(
to_version_builds.mapped('params_id.upgrade_from_build_id.params_id.version_id.name'),
- []
+ [],
)
- #to_version_builds.host = host.name
+ self.assertEqual(
+ to_version_builds.mapped('description'),
+ [
+ 'Testing migration to 15.0',
+ 'Testing migration to 16.0',
+ 'Testing migration to 17.0',
+ 'Testing migration to master',
+ ],
+ )
+
+
for build in to_version_builds:
build._schedule() # starts builds
self.assertEqual(build.local_state, 'testing')
@@ -363,27 +380,31 @@ class TestUpgradeFlow(RunbotCase):
self.assertEqual(to_version_builds.mapped('global_state'), ['done', 'waiting', 'waiting', 'waiting'], 'One build have no child, other should wait for children')
from_version_builds = to_version_builds.children_ids
+
self.assertEqual(
+ from_version_builds.mapped('description'),
[
- '%s->%s' % (
- b.params_id.upgrade_from_build_id.params_id.version_id.name,
- b.params_id.upgrade_to_build_id.params_id.version_id.name
- )
- for b in from_version_builds
+ 'Testing migration from 15.0 to 16.0',
+ 'Testing migration from 16.0 to 17.0',
+ 'Testing migration from saas-16.3 to 17.0',
+ 'Testing migration from 17.0 to master',
+ 'Testing migration from saas-17.1 to master',
+ 'Testing migration from saas-17.2 to master',
+ 'Testing migration from saas-17.3 to master',
],
- ['11.0->12.0', 'saas-11.3->12.0', '12.0->13.0', 'saas-12.3->13.0', '13.0->master', 'saas-13.1->master', 'saas-13.2->master', 'saas-13.3->master']
)
- #from_version_builds.host = host.name
+
for build in from_version_builds:
build._schedule()
self.assertEqual(build.local_state, 'testing')
build._schedule()
self.assertEqual(build.local_state, 'done')
+ self.assertEqual(len(build.children_ids), 3)
- self.assertEqual(from_version_builds.mapped('global_state'), ['waiting'] * 8)
+ self.assertEqual(from_version_builds.mapped('global_state'), ['waiting'] * 7)
db_builds = from_version_builds.children_ids
- self.assertEqual(len(db_builds), 40)
+ self.assertEqual(len(db_builds), 3 * 7)
self.assertEqual(
db_builds.mapped('params_id.config_id'), self.test_upgrade_config
@@ -394,27 +415,28 @@ class TestUpgradeFlow(RunbotCase):
self.repo_upgrade,
"Build should only have the upgrade commit"
)
- b11_12 = db_builds[:5]
+
+ b15_16 = to_version_builds[1].children_ids[0].children_ids
self.assertEqual(
- b11_12.mapped('params_id.upgrade_to_build_id.params_id.version_id.name'),
- ['12.0']
+ b15_16.mapped('params_id.upgrade_to_build_id.params_id.version_id.name'),
+ ['16.0']
)
self.assertEqual(
- b11_12.mapped('params_id.upgrade_from_build_id.params_id.version_id.name'),
- ['11.0']
+ b15_16.mapped('params_id.upgrade_from_build_id.params_id.version_id.name'),
+ ['15.0']
)
- b133_master = db_builds[-5:]
+ b173_master = to_version_builds[-1].children_ids[-1].children_ids
self.assertEqual(
- b133_master.mapped('params_id.upgrade_to_build_id.params_id.version_id.name'),
- ['master']
+ b173_master.mapped('params_id.upgrade_to_build_id.params_id.version_id.name'),
+ ['master'],
)
self.assertEqual(
- b133_master.mapped('params_id.upgrade_from_build_id.params_id.version_id.name'),
- ['saas-13.3']
+ b173_master.mapped('params_id.upgrade_from_build_id.params_id.version_id.name'),
+ ['saas-17.3'],
)
self.assertEqual(
- [b.params_id.dump_db.db_suffix for b in b133_master],
- ['account', 'l10n_be', 'l10n_ch', 'mail', 'stock'] # is this order ok?
+ [b.params_id.dump_db.db_suffix for b in b173_master],
+ ['base', 'web', 'website'],
)
current_build = db_builds[0]
@@ -479,81 +501,48 @@ class TestUpgradeFlow(RunbotCase):
self.assertEqual(current_build.global_state, 'done')
# self.assertEqual(current_build.global_result, 'ok')
- self.assertEqual(self.patchers['docker_run'].call_count, 80)
+ self.assertEqual(self.patchers['docker_run'].call_count, 3 * 7 * 2)
- self.assertEqual(from_version_builds.mapped('global_state'), ['done'] * 8)
+ self.assertEqual(from_version_builds.mapped('global_state'), ['done'] * 7)
self.assertEqual(to_version_builds.mapped('global_state'), ['done'] * 4)
- # test_build_references
- batch = self.master_bundle._force()
- batch._process()
- upgrade_slot = batch.slot_ids.filtered(lambda slot: slot.trigger_id == self.trigger_upgrade_server)
- self.assertTrue(upgrade_slot)
- upgrade_build = upgrade_slot.build_id
- self.assertTrue(upgrade_build)
- self.assertEqual(upgrade_build.params_id.config_id, self.upgrade_server_config)
- # we should have 2 builds, the nightly roots of 13 and 13.3
- self.assertEqual(
- upgrade_build.params_id.builds_reference_ids,
- (
- self.build_niglty_13[('root', self.trigger_server_nightly)] |
- self.build_niglty_133[('root', self.trigger_server_nightly)]
- )
- )
+ # Test complement upgrades
- self.trigger_upgrade_server.upgrade_step_id.upgrade_from_all_intermediate_version = True
- batch = self.master_bundle._force()
- batch._process()
- upgrade_build = batch.slot_ids.filtered(lambda slot: slot.trigger_id == self.trigger_upgrade_server).build_id
- self.assertEqual(
- upgrade_build.params_id.builds_reference_ids,
- (
- self.build_niglty_13[('root', self.trigger_server_nightly)] |
- self.build_niglty_131[('root', self.trigger_server_nightly)] |
- self.build_niglty_132[('root', self.trigger_server_nightly)] |
- self.build_niglty_133[('root', self.trigger_server_nightly)]
- )
- )
+ bundle_17 = self.master_bundle.previous_major_version_base_id
+ bundle_173 = self.master_bundle.intermediate_version_base_ids[-1]
+ self.assertEqual(bundle_17.name, '17.0')
+ self.assertEqual(bundle_173.name, 'saas-17.3')
- # test future upgrades
- step_upgrade_complement = self.env['runbot.build.config.step'].create({
- 'name': 'upgrade_complement',
- 'job_type': 'configure_upgrade_complement',
- 'upgrade_config_id': self.test_upgrade_config.id,
- })
-
- config_upgrade_complement = self.env['runbot.build.config'].create({
- 'name': 'Stable policy',
- 'step_order_ids': [(0, 0, {'step_id': step_upgrade_complement.id})]
- })
- trigger_upgrade_complement = self.env['runbot.trigger'].create({
- 'name': 'Stable policy',
- 'repo_ids': [(4, self.repo_server.id)],
- 'dependency_ids': [(4, self.repo_upgrade.id)],
- 'config_id': config_upgrade_complement.id,
- 'upgrade_dumps_trigger_id': self.trigger_upgrade_server.id,
- 'project_id': self.project.id,
- })
-
- bundle_13 = self.master_bundle.previous_major_version_base_id
- bundle_133 = self.master_bundle.intermediate_version_base_ids[-1]
- self.assertEqual(bundle_13.name, '13.0')
- self.assertEqual(bundle_133.name, 'saas-13.3')
-
- batch13 = bundle_13._force()
+ batch13 = bundle_17._force()
batch13._process()
- upgrade_complement_build_13 = batch13.slot_ids.filtered(lambda slot: slot.trigger_id == trigger_upgrade_complement).build_id
- # upgrade_complement_build_13.host = host.name
- self.assertEqual(upgrade_complement_build_13.params_id.config_id, config_upgrade_complement)
- for db in ['base', 'all', 'no-demo-all']:
- upgrade_complement_build_13.database_ids = [(0, 0, {'name': '%s-%s' % (upgrade_complement_build_13.dest, db)})]
+ upgrade_complement_build_17 = batch13.slot_ids.filtered(lambda slot: slot.trigger_id == self.trigger_template).build_id
+ self.assertEqual(upgrade_complement_build_17.params_id.config_id, self.config_template)
- upgrade_complement_build_13._schedule()
+ def _run_install_odoo(build):
+ self.env['runbot.database'].create({
+ 'name': f'{build.dest}-{build.active_step.name}',
+ 'build_id': build.id,
+ })
- self.assertEqual(len(upgrade_complement_build_13.children_ids), 5)
- master_child = upgrade_complement_build_13.children_ids[0]
- self.assertEqual(master_child.params_id.upgrade_from_build_id, upgrade_complement_build_13)
+ with (
+ patch('odoo.addons.runbot.models.build_config.ConfigStep._run_install_odoo', side_effect=_run_install_odoo),
+ patch('odoo.addons.runbot.models.build_config.ConfigStep._make_results', return_value=None),
+ ):
+ self.assertEqual(len(upgrade_complement_build_17.database_ids), 0)
+ # install db 1
+ upgrade_complement_build_17._schedule()
+ self.assertEqual(len(upgrade_complement_build_17.database_ids), 1)
+ # install db 2
+ upgrade_complement_build_17._schedule()
+ self.assertEqual(len(upgrade_complement_build_17.database_ids), 2)
+
+ # create upgrade builds
+ upgrade_complement_build_17._schedule()
+
+ self.assertEqual(len(upgrade_complement_build_17.children_ids), 5)
+ master_child = upgrade_complement_build_17.children_ids[0]
+ self.assertEqual(master_child.params_id.upgrade_from_build_id, upgrade_complement_build_17)
self.assertEqual(master_child.params_id.dump_db.db_suffix, 'all')
self.assertEqual(master_child.params_id.config_id, self.test_upgrade_config)
self.assertEqual(master_child.params_id.upgrade_to_build_id.params_id.version_id.name, 'master')