diff --git a/runbot/models/build.py b/runbot/models/build.py index 64abf0f0..b05e9256 100644 --- a/runbot/models/build.py +++ b/runbot/models/build.py @@ -679,9 +679,10 @@ class runbot_build(models.Model): if grep(build._server("tools/config.py"), "no-netrpc"): cmd.append("--no-netrpc") if grep(build._server("tools/config.py"), "log-db"): + logdb_uri = self.env['ir.config_parameter'].get_param('runbot.runbot_logdb_uri') logdb = self.env.cr.dbname - if config['db_host'] and grep(build._server('sql_db.py'), 'allow_uri'): - logdb = 'postgres://{cfg[db_user]}:{cfg[db_password]}@{cfg[db_host]}/{db}'.format(cfg=config, db=self.env.cr.dbname) + if logdb_uri and grep(build._server('sql_db.py'), 'allow_uri'): + logdb = '%s' % logdb_uri cmd += ["--log-db=%s" % logdb] if grep(build._server('tools/config.py'), 'log-db-level'): cmd += ["--log-db-level", '25'] diff --git a/runbot/models/res_config_settings.py b/runbot/models/res_config_settings.py index 6f47624c..b1ef50a2 100644 --- a/runbot/models/res_config_settings.py +++ b/runbot/models/res_config_settings.py @@ -13,6 +13,7 @@ class ResConfigSettings(models.TransientModel): runbot_starting_port = fields.Integer('Starting port for running builds') runbot_domain = fields.Char('Runbot domain') runbot_max_age = fields.Integer('Max branch age (in days)') + runbot_logdb_uri = fields.Char('Runbot URI for build logs') @api.model def get_values(self): @@ -23,7 +24,9 @@ class ResConfigSettings(models.TransientModel): runbot_timeout=int(get_param('runbot.runbot_timeout', default=1800)), runbot_starting_port=int(get_param('runbot.runbot_starting_port', default=2000)), runbot_domain=get_param('runbot.runbot_domain', default=common.fqdn()), - runbot_max_age=int(get_param('runbot.runbot_max_age', default=30))) + runbot_max_age=int(get_param('runbot.runbot_max_age', default=30)), + runbot_logdb_uri=get_param('runbot.runbot_logdb_uri', default=False), + ) return res @api.multi @@ -36,3 +39,4 @@ class ResConfigSettings(models.TransientModel): set_param("runbot.runbot_starting_port", self.runbot_starting_port) set_param("runbot.runbot_domain", self.runbot_domain) set_param("runbot.runbot_max_age", self.runbot_max_age) + set_param("runbot.runbot_logdb_uri", self.runbot_logdb_uri) diff --git a/runbot/tests/test_build.py b/runbot/tests/test_build.py index 2a12f221..b13f9bea 100644 --- a/runbot/tests/test_build.py +++ b/runbot/tests/test_build.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from unittest.mock import patch +from odoo.tools.config import configmanager from odoo.tests import common class Test_Build(common.TransactionCase): @@ -43,6 +44,20 @@ class Test_Build(common.TransactionCase): build._get_domain() self.assertEqual(build.domain, 'runbot99.example.org:1234') + @patch('odoo.addons.runbot.models.build.os.mkdir') + @patch('odoo.addons.runbot.models.build.grep') + def test_build_cmd_log_db(self, mock_grep, mock_mkdir): + """ test that the logdb connection URI is taken from the .odoorc file """ + uri = 'postgres://someone:pass@somewhere.com/db' + self.env['ir.config_parameter'].sudo().set_param("runbot.runbot_logdb_uri", uri) + build = self.Build.create({ + 'branch_id': self.branch.id, + 'name': 'd0d0caca0000ffffffffffffffffffffffffffff', + 'port': '1234', + }) + cmd = build._cmd()[0] + self.assertIn('--log-db=%s' % uri, cmd) + def test_pr_is_duplicate(self): """ test PR is a duplicate of a dev branch build """ dup_repo = self.Repo.create({ diff --git a/runbot/views/res_config_settings_views.xml b/runbot/views/res_config_settings_views.xml index 728947da..3076e01b 100644 --- a/runbot/views/res_config_settings_views.xml +++ b/runbot/views/res_config_settings_views.xml @@ -42,6 +42,10 @@