[IMP] runbot: avoid accidental version creation

This commit is contained in:
Xavier-Do 2025-03-12 08:57:20 +01:00 committed by xdo
parent ea9b714e6c
commit 3fcb7687dd
5 changed files with 22 additions and 6 deletions

View File

@ -1,6 +1,7 @@
import logging import logging
import re import re
from odoo import models, fields, api, tools from odoo import models, fields, api, tools
from odoo.exceptions import ValidationError
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
@ -25,6 +26,20 @@ class Version(models.Model):
dockerfile_id = fields.Many2one('runbot.dockerfile', default=lambda self: self.env['runbot.version'].search([('name', '=', 'master')], limit=1).dockerfile_id or self.env.ref('runbot.docker_default', raise_if_not_found=False)) dockerfile_id = fields.Many2one('runbot.dockerfile', default=lambda self: self.env['runbot.version'].search([('name', '=', 'master')], limit=1).dockerfile_id or self.env.ref('runbot.docker_default', raise_if_not_found=False))
_sql_constraints = [
('unique_name', 'unique (name)', 'avoid duplicate name'),
('unique_number', 'unique (number)', 'avoid duplicate number'),
]
@api.constrains("name")
def _check_match_is_base(self):
icp = self.env['ir.config_parameter'].sudo()
regex = icp.get_param('runbot.runbot_is_base_regex', False)
if regex:
for record in self:
if not re.match(regex, record.name):
raise ValidationError(f"Version name {record.name} does not match base version regex {regex}")
@api.depends('name') @api.depends('name')
def _compute_version_number(self): def _compute_version_number(self):
for version in self: for version in self:

View File

@ -97,7 +97,7 @@ class RunbotCase(TransactionCase):
'token': '123', 'token': '123',
}) })
self.version_13 = self.Version.create({'name': '13.0'}) self.version_13 = self.Version._get('13.0')
self.default_config = self.env.ref('runbot.runbot_build_config_default') self.default_config = self.env.ref('runbot.runbot_build_config_default')
self.initial_server_commit = self.Commit.create({ self.initial_server_commit = self.Commit.create({

View File

@ -6,17 +6,17 @@ class TestVersion(RunbotCase):
def test_basic_version(self): def test_basic_version(self):
major_version = self.Version.create({'name': '12.0'}) major_version = self.Version._get('12.0')
self.assertEqual(major_version.number, '12.00') self.assertEqual(major_version.number, '12.00')
self.assertTrue(major_version.is_major) self.assertTrue(major_version.is_major)
saas_version = self.Version.create({'name': 'saas-12.1'}) saas_version = self.Version._get('saas-12.1')
self.assertEqual(saas_version.number, '12.01') self.assertEqual(saas_version.number, '12.01')
self.assertFalse(saas_version.is_major) self.assertFalse(saas_version.is_major)
self.assertGreater(saas_version.number, major_version.number) self.assertGreater(saas_version.number, major_version.number)
master_version = self.Version.create({'name': 'master'}) master_version = self.Version._get('master')
self.assertEqual(master_version.number, '~') self.assertEqual(master_version.number, '~')
self.assertGreater(master_version.number, saas_version.number) self.assertGreater(master_version.number, saas_version.number)

View File

@ -57,8 +57,8 @@
<button name="action_copy_canonical_tag" type="object" groups="runbot.group_runbot_admin">Disable test using canonical tag</button> <button name="action_copy_canonical_tag" type="object" groups="runbot.group_runbot_admin">Disable test using canonical tag</button>
<field name="test_tags" decoration-danger="True" readonly="1" groups="!runbot.group_runbot_admin"/> <field name="test_tags" decoration-danger="True" readonly="1" groups="!runbot.group_runbot_admin"/>
<field name="test_tags" decoration-danger="True" groups="runbot.group_runbot_admin"/> <field name="test_tags" decoration-danger="True" groups="runbot.group_runbot_admin"/>
<field name="tags_min_version_id" invisible="not test_tags"/> <field name="tags_min_version_id" invisible="not test_tags" options="{'no_create': True, 'no_create_edit':True}"/>
<field name="tags_max_version_id" invisible="not test_tags" /> <field name="tags_max_version_id" invisible="not test_tags" options="{'no_create': True, 'no_create_edit':True}" />
</group> </group>
<group> <group>
<field name="previous_error_id" readonly="1" invisible="not previous_error_id" text-decoration-danger="True"/> <field name="previous_error_id" readonly="1" invisible="not previous_error_id" text-decoration-danger="True"/>

View File

@ -67,6 +67,7 @@
<field name="local_result"/> <field name="local_result"/>
<field name="global_result"/> <field name="global_result"/>
<field name="host"/> <field name="host"/>
<field name="keep_host"/>
<field name="host_id"/> <field name="host_id"/>
<field name="job_start" groups="base.group_no_one"/> <field name="job_start" groups="base.group_no_one"/>
<field name="job_end" groups="base.group_no_one"/> <field name="job_end" groups="base.group_no_one"/>