This commit is contained in:
Xavier-Do 2023-10-25 10:07:19 +02:00
parent 383352d88e
commit 26a4737ba5
3 changed files with 36 additions and 12 deletions

View File

@ -288,12 +288,9 @@ class ConfigStep(models.Model):
def _make_python_ctx(self, build):
return {
'self': self,
# 'fields': fields,
# 'models': models,
'build': build,
'_logger': _logger,
'log_path': build._path('logs', '%s.txt' % self.name),
'glob': glob.glob,
'Command': Command,
're': ReProxy,
'grep': grep,
@ -311,15 +308,19 @@ class ConfigStep(models.Model):
if run and callable(run):
return run()
return eval_ctx.get('docker_params')
except ValueError as e:
save_eval_value_error_re = r'<class \'odoo.addons.runbot.models.repo.RunbotException\'>: "(.*)" while evaluating\n.*'
except RunbotException as e:
message = e.args[0]
groups = re.match(save_eval_value_error_re, message)
if groups:
build._log("run", groups[1], level='ERROR')
build._kill(result='ko')
else:
raise
build._log("run", f'A runbot exception occured:\n{message}', level='ERROR')
build._kill(result='ko')
#except ValueError as e:
# save_eval_value_error_re = r'''<class 'odoo.addons.runbot.commona.RunbotException'>: "(.*)" while evaluating\n.*'''
# message = e.args[0]
# groups = re.match(save_eval_value_error_re, message)
# if groups:
# build._log("run", groups[1], level='ERROR')
# build._kill(result='ko')
# else:
# raise
def _is_docker_step(self):
if not self:

View File

@ -388,7 +388,8 @@ class TestBuildResult(RunbotCase):
self.assertEqual('waiting', build1.global_state)
self.assertEqual('testing', build1_1.global_state)
# with self.assertQueries([]): # write the same value, no update should be triggered
#with self.assertQueries(['''UPDATE "runbot_build" SET "global_state" = %s, "write_date" = %s, "write_uid" = %s WHERE id IN %s''']):
build1.local_state = 'done'
build1.flush_recordset()

View File

@ -588,6 +588,28 @@ def run():
retult = config_step._run_python(self.parent_build)
self.assertEqual(retult, {'a': 'b'})
@patch('odoo.addons.runbot.models.build.BuildResult._checkout')
def test_run_python_exception(self, mock_checkout):
"""minimal test for python steps. Also test that `-d` in cmd creates a database"""
def raise_runbot_exception():
raise RunbotException('Nope')
mock_checkout.side_effect = raise_runbot_exception
test_code = """
def run():
build._checkout()
"""
config_step = self.ConfigStep.create({
'name': 'default',
'job_type': 'python',
'python_code': test_code,
})
config_step._run_python(self.parent_build)
self.assertEqual(self.parent_build.log_ids.mapped('message'), ['A runbot exception occured:\nNope'])
self.assertEqual(self.parent_build.log_ids.mapped('level'), ['ERROR'])
@patch('odoo.addons.runbot.models.build.BuildResult._checkout')
def test_sub_command(self, mock_checkout):
config_step = self.ConfigStep.create({