Setup python builder
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
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
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
|
||||
|
||||
class BlenderVersion:
|
||||
def __init__(self, version: str = '5.1.0'):
|
||||
"""
|
||||
Need an object like 'X.Y.Z' to work correctly, build a pythonic object about a blender version.
|
||||
:param version:
|
||||
"""
|
||||
self.major : str = ''
|
||||
self.minor : str = ''
|
||||
self.hotfix : str = ''
|
||||
self.version_object(version)
|
||||
|
||||
def version_object(self, version: str):
|
||||
"""Set all version properties to a string"""
|
||||
version = version.split('.')
|
||||
self.major = version[0]
|
||||
self.minor = version[1]
|
||||
self.hotfix = version[2]
|
||||
|
||||
def format_to_tag(self) -> str:
|
||||
"""From version information, format to return a string"""
|
||||
return f'{self.major}.{self.minor}.{self.hotfix}'
|
||||
|
||||
def __str__(self):
|
||||
return str(self.major + '.' + self.minor + '.' + self.hotfix)
|
||||
Reference in New Issue
Block a user