From 14bac37438ff40c8e5eb850ff8e703b40dee8803 Mon Sep 17 00:00:00 2001 From: Xavier-Do Date: Thu, 29 Aug 2024 09:43:01 +0200 Subject: [PATCH] [IMP] runbot: small change of docker_build api returns now a dict instead of a tuple for easier extension --- runbot/container.py | 18 +++++++++++++++--- runbot/models/docker.py | 10 ++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/runbot/container.py b/runbot/container.py index 473b7546..1064030e 100644 --- a/runbot/container.py +++ b/runbot/container.py @@ -110,19 +110,31 @@ def _docker_build(build_dir, image_tag): :param image_tag: name used to tag the resulting docker image :return: tuple(success, msg) where success is a boolean and msg is the error message or None """ + result = { + 'image': False, + 'msg': '', + } docker_client = docker.from_env() + start = time.time() try: docker_image, result_stream = docker_client.images.build(path=build_dir, tag=image_tag, rm=True) result_stream = list(result_stream) msg = ''.join([r.get('stream', '') for r in result_stream]) - return docker_image, msg + result['image'] = docker_image + result['msg'] = msg except docker.errors.APIError as e: _logger.error('Build of image %s failed', image_tag) - return (False, e.explanation) + result['msg'] = e.explanation except docker.errors.BuildError as e: _logger.error('Build of image %s failed', image_tag) msg = f"{''.join(l.get('stream') or '' for l in e.build_log)}\nERROR:{e.msg}" - return (False, msg) + result['msg'] = msg + + duration = time.time() - start + if duration > 1: + _logger.info('Dockerfile %s finished build in %s', image_tag, duration) + result['duration'] = duration + return result def docker_push(image_tag): return _docker_push(image_tag) diff --git a/runbot/models/docker.py b/runbot/models/docker.py index edaf74f2..96468756 100644 --- a/runbot/models/docker.py +++ b/runbot/models/docker.py @@ -289,7 +289,6 @@ class Dockerfile(models.Model): }) def _build(self, host=None): - start = time.time() docker_build_path = self.env['runbot.runbot']._path('docker', self.image_tag) os.makedirs(docker_build_path, exist_ok=True) @@ -298,15 +297,14 @@ class Dockerfile(models.Model): with open(self.env['runbot.runbot']._path('docker', self.image_tag, 'Dockerfile'), 'w') as Dockerfile: Dockerfile.write(content) - docker_build_identifier, msg = docker_build(docker_build_path, self.image_tag) - duration = time.time() - start + result = docker_build(docker_build_path, self.image_tag) + docker_build_identifier = result['image'] + duration = result['duration'] + msg = result['msg'] docker_build_result_values = {'dockerfile_id': self.id, 'output': msg, 'duration': duration, 'content': content, 'host_id': host and host.id} - duration = time.time() - start if docker_build_identifier: docker_build_result_values['result'] = 'success' docker_build_result_values['identifier'] = docker_build_identifier.id - if duration > 1: - _logger.info('Dockerfile %s finished build in %s', self.image_tag, duration) else: docker_build_result_values['result'] = 'error' self.to_build = False