import os import docker from .version import BlenderVersion from pathlib import Path from docker.errors import BuildError class BlenderDocker: def __init__(self, blender: BlenderVersion): self._blender_version = blender # Todo get a user config # self._docker_client = docker.DockerClient(base_url=f'unix://{Path.home()}/.docker/desktop/docker.sock') self._docker_client = docker.DockerClient(base_url=f'unix:///var/run/docker.sock') self._docker_image = None self._docker_file = Path(os.getcwd(), 'Dockerfile') if not self._docker_file.exists(): print(f'Dockerfile not found: {self._docker_file}') exit(1) self.args = { 'b3d_vs_major': f'{self._blender_version.major}', 'b3d_vs_minor': f'{self._blender_version.minor}.{self._blender_version.hotfix}', } def build(self): try: print('\tBuilding Blender Docker') print(f'\tWhere to build: {os.getcwd()}') print(f'\tArgs: {self.args}') print(f'\tTage generated: {self._blender_version.format_to_tag()}') build = self._docker_client.images.build( path=os.getcwd(), buildargs=self.args, tag=self._blender_version.format_to_tag(), quiet=False, ) print(f'\tBuilding Blender Docker Image done: {build}') return build except BuildError as e: print("Hey something went wrong with image build!") for line in e.build_log: if 'stream' in line: print(line['stream'].strip()) raise @staticmethod def tag(self): print('\tSet Tags version and/or Latest') pass @staticmethod def test(self): print('\tTesting Blender Docker') # docker run --rm stilobique/blender:5.1.2 ./blender --version pass def push(self): # TODO Login to hub pass