Setup python builder

This commit is contained in:
2026-07-18 16:45:19 +02:00
parent 82653b4fba
commit 693afc76fd
11 changed files with 108 additions and 48 deletions
+3 -3
View File
@@ -2,16 +2,16 @@
<configuration default="false" name="Build BlenderDocker" type="docker-deploy" factoryName="dockerfile" server-name="Docker Desktop">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="stilobique/blender:5.2.0" />
<option name="imageTag" value="stilobique/blender:4.5.11" />
<option name="buildArgs">
<list>
<DockerEnvVarImpl>
<option name="name" value="b3d_vs_major" />
<option name="value" value="5.2" />
<option name="value" value="4.5" />
</DockerEnvVarImpl>
<DockerEnvVarImpl>
<option name="name" value="b3d_vs_minor" />
<option name="value" value="0" />
<option name="value" value="11" />
</DockerEnvVarImpl>
</list>
</option>
+3 -1
View File
@@ -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)
+1 -2
View File
@@ -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
View File
+63
View File
@@ -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
+26
View File
@@ -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)
-8
View File
@@ -1,8 +0,0 @@
{
"tags":
[{
"b3d_vs_major": 5.1,
"b3d_vs_minor": 2
}
]
}
-2
View File
@@ -1,2 +0,0 @@
- major: 5.1
minor: 2
+11 -31
View File
@@ -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()
-1
View File
@@ -1 +0,0 @@
docker
+1
View File
@@ -0,0 +1 @@
docker==7.2.0