Update logs setup.

Add clean dockers env.
Fix Dockerfile with the latest step.
This commit is contained in:
2026-07-20 23:34:59 +02:00
parent 5e154cf654
commit b66f62a3f3
6 changed files with 162 additions and 15 deletions
+49 -12
View File
@@ -1,5 +1,6 @@
import os
import docker
import logging
from .version import BlenderVersion
from pathlib import Path
@@ -7,7 +8,7 @@ from docker.errors import BuildError, APIError, ContainerError, ImageNotFound
class BlenderDocker:
def __init__(self, blender: BlenderVersion):
def __init__(self, blender: BlenderVersion, severity: int = logging.WARNING):
self._blender_version = blender
# Todo get a user config
self._docker_client = docker.DockerClient(base_url=f'unix:///var/run/docker.sock')
@@ -21,12 +22,37 @@ class BlenderDocker:
print(f'Dockerfile not found: {self._docker_file}')
exit(1)
self.args = {
self._args = {
'b3d_vs_major': f'{self._blender_version.major}',
'b3d_vs_minor': f'{self._blender_version.minor}.{self._blender_version.hotfix}',
}
self._severity = severity
def _get_logger(self, name: str) -> logging.Logger:
"""
Private Method to set a logger for a specific method set (by his name)
:param name: Make the logger file name.
:return:
"""
log_dir = Path('logs')
log_dir.mkdir(parents=True, exist_ok=True)
logger = logging.getLogger(f'blender_docker.{name}')
logger.setLevel(self._severity)
logger.propagate = False
if not logger.handlers:
handler = logging.FileHandler(log_dir / f'{name}.log')
handler.setFormatter(logging.Formatter(
'%(asctime)s|%(name)s [%(levelname)s] %(message)s'
))
logger.addHandler(handler)
return logger
def login(self):
"""Login to the Docker Hub"""
try:
print('Login to Hub Docker.')
self._docker_client.login(
@@ -39,28 +65,39 @@ class BlenderDocker:
exit(1)
def build(self):
"""Build the Blender Docker Image"""
logger = self._get_logger('build')
try:
print('\tBuilding Blender Docker')
print(f'\tWhere to build: {os.getcwd()}')
print(f'\tArgs: {self.args}')
print(f'\tTag: {self._docker_image_name}')
self._docker_image = self._docker_client.images.build(
logger.info('Building Blender Docker Image')
logger.info(f'\tBuilds withs args: {self._args}')
logger.info(f'\tTag generate: {self._docker_image_name}')
self._docker_image, build_logs = self._docker_client.images.build(
path=os.getcwd(),
# nocache=True,
buildargs=self.args,
buildargs=self._args,
tag=self._docker_image_name,
quiet=True,
quiet=False,
rm=True,
forcerm=True
)
print(f'\tBuilding Blender Docker Image done: {self._docker_image}')
# Debug log:
for chunk in build_logs:
if 'stream' in chunk:
line = chunk['stream'].strip()
if line:
logger.debug(line)
elif 'error' in chunk:
logger.error(chunk['error'])
except BuildError as e:
print("Hey something went wrong with image build!")
logger.exception(f'Build docker image failed: {e}')
for line in e.build_log:
if 'stream' in line:
print(line['stream'].strip())
logger.debug(line['stream'].strip())
raise
@staticmethod