diff --git a/runbot/container.py b/runbot/container.py
index c95729b1..5e43c5f8 100644
--- a/runbot/container.py
+++ b/runbot/container.py
@@ -151,12 +151,13 @@ def docker_tag(identifier_or_tag, new_tag):
def _docker_tag(identifier_or_tag, new_tag):
if not identifier_or_tag:
return
- _logger.info('Tagging image %s to "%s"', identifier_or_tag, new_tag)
docker_client = docker.from_env()
repo, tag = new_tag.split(':') # runbot DockerFile tags contains the repo part
try:
image = docker_client.images.get(identifier_or_tag)
- image.tag(repo, tag)
+ if new_tag not in image.tags:
+ _logger.info('Tagging image %s to "%s"', identifier_or_tag, new_tag)
+ image.tag(repo, tag)
except docker.errors.ImageNotFound:
_logger.warning('failed to find docker image with identifier %s', identifier_or_tag)
except docker.errors.APIError:
diff --git a/runbot/models/docker.py b/runbot/models/docker.py
index d2c2a1fd..0e17ca08 100644
--- a/runbot/models/docker.py
+++ b/runbot/models/docker.py
@@ -126,12 +126,14 @@ class Dockerfile(models.Model):
active = fields.Boolean('Active', default=True, tracking=True)
image_identifier = fields.Char('Identifier', tracking=True)
image_future_identifier = fields.Char('Future Identifier', tracking=True)
+ image_previous_identifier = fields.Char('Previous Identifier', tracking=True)
image_tag = fields.Char(compute='_compute_image_tag', store=True)
image_future_tag = fields.Char(compute='_compute_image_helper_tags')
image_previous_tag = fields.Char(compute='_compute_image_helper_tags')
template_id = fields.Many2one('ir.ui.view', string='Docker Template', domain=[('type', '=', 'qweb')], context={'default_type': 'qweb', 'default_arch_base': ''})
arch_base = fields.Text(related='template_id.arch_base', readonly=False, related_sudo=True)
dockerfile = fields.Text(compute='_compute_dockerfile', tracking=True)
+ in_error = fields.Boolean('In error', help='The last build failed.', default=False)
to_build = fields.Boolean('To Build', help='Build Dockerfile. Check this when the Dockerfile is ready.', default=False)
always_pull = fields.Boolean('Always pull', help='Always Pull on the hosts, not only at the use time', default=False, tracking=True, copy=False)
version_ids = fields.One2many('runbot.version', 'dockerfile_id', string='Versions')
@@ -196,6 +198,10 @@ class Dockerfile(models.Model):
rec.dockerfile = content
+ @api.onchange('dockerfile')
+ def onchange_dockerfile(self):
+ self.in_error = False
+
@api.depends('name')
def _compute_image_tag(self):
for rec in self:
@@ -214,6 +220,12 @@ class Dockerfile(models.Model):
keys = re.findall(r'
+
@@ -100,11 +101,13 @@
runbot.dockerfile.list
runbot.dockerfile
-
+
+
+