From 693afc76fd7958f5d5a8824fadbbb3473fad3087 Mon Sep 17 00:00:00 2001 From: stilobique Date: Sat, 18 Jul 2026 16:45:19 +0200 Subject: [PATCH] Setup python builder --- .run/Build BlenderDocker.run.xml | 6 +-- Dockerfile | 4 +- README.md | 3 +- blender/__init__.py | 0 blender/docker.py | 63 ++++++++++++++++++++++++++++++++ blender/version.py | 26 +++++++++++++ build.json | 8 ---- build.yaml | 2 - main.py | 42 ++++++--------------- requirement-build.txt | 1 - requirements.txt | 1 + 11 files changed, 108 insertions(+), 48 deletions(-) create mode 100644 blender/__init__.py create mode 100644 blender/docker.py create mode 100644 blender/version.py delete mode 100644 build.json delete mode 100644 build.yaml delete mode 100644 requirement-build.txt create mode 100644 requirements.txt diff --git a/.run/Build BlenderDocker.run.xml b/.run/Build BlenderDocker.run.xml index 0bfdcb7..f4c50d0 100644 --- a/.run/Build BlenderDocker.run.xml +++ b/.run/Build BlenderDocker.run.xml @@ -2,16 +2,16 @@ - diff --git a/Dockerfile b/Dockerfile index 1ac6d1b..d986d8f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,7 +23,9 @@ RUN git clone --depth 1 --branch v${b3d_vs_major}.${b3d_vs_minor} \ COPY ./scripts/gen_packages_txt.py /opt/blender/build_files/build_environment/gen_packages_txt.py RUN cd /opt/blender/build_files/build_environment && \ python gen_packages_txt.py -RUN python /opt/blender/build_files/build_environment/install_linux_packages.py +RUN cd /opt/blender/build_files/build_environment && chmod a+x ./install_linux_packages.py && \ + python install_linux_packages.py + RUN cd /opt/blender && make update RUN cd /opt/blender && make -j$(nproc) diff --git a/README.md b/README.md index 369575a..9ccb774 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,7 @@ # Blender Docker -This repository is an automated blender docker image file generated, it's usefully with blender addon unit test. To -build a new specific image, you need to update the `build.json` file with the new version witched ; or +This repository is an automated blender docker image file generated, it's usefully with blender addon unit test. # Adding an Addon diff --git a/blender/__init__.py b/blender/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blender/docker.py b/blender/docker.py new file mode 100644 index 0000000..e15f507 --- /dev/null +++ b/blender/docker.py @@ -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 + \ No newline at end of file diff --git a/blender/version.py b/blender/version.py new file mode 100644 index 0000000..4fa09ea --- /dev/null +++ b/blender/version.py @@ -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) \ No newline at end of file diff --git a/build.json b/build.json deleted file mode 100644 index af44176..0000000 --- a/build.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "tags": - [{ - "b3d_vs_major": 5.1, - "b3d_vs_minor": 2 - } - ] -} \ No newline at end of file diff --git a/build.yaml b/build.yaml deleted file mode 100644 index 10baeb8..0000000 --- a/build.yaml +++ /dev/null @@ -1,2 +0,0 @@ -- major: 5.1 - minor: 2 \ No newline at end of file diff --git a/main.py b/main.py index e1cf1c1..666d57c 100644 --- a/main.py +++ b/main.py @@ -1,27 +1,10 @@ import os -import pathlib -import json -import docker -import sys + +from blender.version import BlenderVersion +from blender.docker import BlenderDocker # TODO Update readme file badge with blender version # TODO add a check if the image build are stored in the docker register - - -def get_data_from_json() -> (str, str): - """From the json file, get blender version (major and minor), and return this information.""" - file = pathlib.Path(os.getcwd(), 'build.json') - - with open(file, 'r') as f: - data = json.load(f) - f.close() - - version_values = data['tags'][0] - major, minor = version_values['b3d_vs_major'], version_values['b3d_vs_minor'] - - return major, minor - - def build_docker(b3d_version: (str, str), latest: bool = False): """ Generate docker image, request the blender version (major, minor) with the keyword b3d_version, and can be @@ -52,14 +35,11 @@ def build_docker(b3d_version: (str, str), latest: bool = False): if __name__ == "__main__": - version = get_data_from_json() - print(f'Start -> Setup the package with blender version "{version[0]}.{version[1]}"') - for arg in sys.argv: - if '--tag=' in arg: - print(f'Build with the tag "{arg}".') - build_docker(b3d_version=version, latest=True) - break - else: - build_docker(b3d_version=version) - print(f'Start to build the docker file.') - pass + version = BlenderVersion(input("Give the blender version (X.Y.Z): ")) + + # build_docker(b3d_version=(f'{version.major}', f'{version.minor}.{version.hotfix}'), + # latest=False) + + print(f"Build a blender version {version}.") + docker = BlenderDocker(version) + docker.build() \ No newline at end of file diff --git a/requirement-build.txt b/requirement-build.txt deleted file mode 100644 index 6d0eac4..0000000 --- a/requirement-build.txt +++ /dev/null @@ -1 +0,0 @@ -docker \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..c031b17 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +docker==7.2.0 \ No newline at end of file