Compare commits
21
Commits
main
..
7734668166
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7734668166 | ||
|
|
d57e2ac46c | ||
|
|
062132487b | ||
|
|
bb3de8fd4e | ||
|
|
0d0eabf0fa | ||
|
|
61f00647f4 | ||
|
|
ce68a96440 | ||
|
|
1457177f6b | ||
|
|
b66f62a3f3 | ||
|
|
5e154cf654 | ||
|
|
fafb076f2b | ||
|
|
693afc76fd | ||
|
|
82653b4fba | ||
|
|
dc2dc84f4f | ||
|
|
db823ebe3f | ||
|
|
1ad119e7d2 | ||
|
|
816e8f5c12 | ||
|
|
39b44c9a08 | ||
|
|
029a7c3b38 | ||
|
|
5ed95e455c | ||
|
|
204c1da235 |
@@ -1,5 +1,5 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
<component name="ProjectRunConfigurationManager">
|
||||||
<configuration default="false" name="Build BlenderDocker" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
|
<configuration default="false" name="Build BlenderDocker" type="docker-deploy" factoryName="dockerfile" server-name="Docker Desktop">
|
||||||
<deployment type="dockerfile">
|
<deployment type="dockerfile">
|
||||||
<settings>
|
<settings>
|
||||||
<option name="imageTag" value="stilobique/blender:4.5.11" />
|
<option name="imageTag" value="stilobique/blender:4.5.11" />
|
||||||
|
|||||||
@@ -6,22 +6,11 @@ This repository is an automated blender docker image file generated, it's useful
|
|||||||
|
|
||||||
|
|
||||||
# Building
|
# Building
|
||||||
## Docker Hub credentials
|
|
||||||
`main.py` logs into Docker Hub before building, so it needs `DOCKER_HUB_USER` and `DOCKER_HUB_PASSWORD` in the environment.
|
|
||||||
|
|
||||||
Create a `config.env` file at the repo root (gitignored):
|
|
||||||
```shell
|
|
||||||
DOCKER_HUB_USER=your_docker_hub_username
|
|
||||||
DOCKER_HUB_PASSWORD=your_docker_hub_password
|
|
||||||
```
|
|
||||||
It's loaded automatically by the `Automation Builder` run configuration (`ENV_FILES`) when running `main.py` from the IDE. Running it another way? Export those two variables yourself first.
|
|
||||||
|
|
||||||
## Start your build
|
## Start your build
|
||||||
You can use Invoke to easily start a build, a clean or more.
|
You can use Invoke to easily start a build, a clean or more.
|
||||||
```shell
|
```shell
|
||||||
invoke --list
|
invoke --li
|
||||||
```
|
```
|
||||||
|
|
||||||
## Debug and logs
|
## Debug and logs
|
||||||
Some log are generated inside a `logs` folder.
|
Some log are generated inside a `logs` folder.
|
||||||
- `build`: all operation on build docker file.
|
- `build`: all operation on build docker file.
|
||||||
|
|||||||
+6
-11
@@ -13,7 +13,7 @@ _EXTRA_PACKAGE_NAMES = {'wayland protocols'}
|
|||||||
class BlenderDependency:
|
class BlenderDependency:
|
||||||
def __init__(self, blender: BlenderVersion):
|
def __init__(self, blender: BlenderVersion):
|
||||||
self._blender_version = blender
|
self._blender_version = blender
|
||||||
self._url = rf'https://projects.blender.org/api/v1/repos/blender/blender/raw/build_files/build_environment/install_linux_packages.py?ref=v{self._blender_version.tag_name()}'
|
self._url = rf'https://projects.blender.org/blender/blender/raw/tag/v{self._blender_version.tag_name()}/build_files/build_environment/install_linux_packages.py'
|
||||||
self.module = self._get_source_file()
|
self.module = self._get_source_file()
|
||||||
|
|
||||||
self.packages = list()
|
self.packages = list()
|
||||||
@@ -25,7 +25,6 @@ class BlenderDependency:
|
|||||||
def _get_source_file(self):
|
def _get_source_file(self):
|
||||||
"""Download the Blender dependency script and import it at runtime."""
|
"""Download the Blender dependency script and import it at runtime."""
|
||||||
r = requests.get(self._url)
|
r = requests.get(self._url)
|
||||||
r.raise_for_status()
|
|
||||||
|
|
||||||
with tempfile.NamedTemporaryFile(mode='wb', suffix='.py', delete=False) as t:
|
with tempfile.NamedTemporaryFile(mode='wb', suffix='.py', delete=False) as t:
|
||||||
t.write(r.content)
|
t.write(r.content)
|
||||||
@@ -41,10 +40,7 @@ class BlenderDependency:
|
|||||||
|
|
||||||
def _get_list(self):
|
def _get_list(self):
|
||||||
"""Keep the mandatory 'library' packages (and Wayland Protocols) as Debian/Ubuntu apt names."""
|
"""Keep the mandatory 'library' packages (and Wayland Protocols) as Debian/Ubuntu apt names."""
|
||||||
sources = self.module.BUILD_MANDATORY_SUBPACKAGES
|
sources = self.module.BUILD_MANDATORY_SUBPACKAGES + self.module.DEPS_CRITICAL_SUBPACKAGES
|
||||||
if hasattr(self.module, 'DEPS_CRITICAL_SUBPACKAGES'):
|
|
||||||
sources += self.module.DEPS_CRITICAL_SUBPACKAGES
|
|
||||||
|
|
||||||
for package in self._flatten(sources):
|
for package in self._flatten(sources):
|
||||||
if 'library' not in package.name.lower() and package.name.lower() not in _EXTRA_PACKAGE_NAMES:
|
if 'library' not in package.name.lower() and package.name.lower() not in _EXTRA_PACKAGE_NAMES:
|
||||||
continue
|
continue
|
||||||
@@ -54,11 +50,10 @@ class BlenderDependency:
|
|||||||
|
|
||||||
def _get_complete_list(self):
|
def _get_complete_list(self):
|
||||||
"""All packages required to build Blender (PACKAGES_BASICS_BUILD) as Debian/Ubuntu apt names."""
|
"""All packages required to build Blender (PACKAGES_BASICS_BUILD) as Debian/Ubuntu apt names."""
|
||||||
if hasattr(self.module, 'PACKAGES_BASICS_BUILD'):
|
for package in self._flatten(self.module.PACKAGES_BASICS_BUILD):
|
||||||
for package in self._flatten(self.module.PACKAGES_BASICS_BUILD):
|
name = package.distro_package_names.get(self.module.DISTRO_ID_DEBIAN)
|
||||||
name = package.distro_package_names.get(self.module.DISTRO_ID_DEBIAN)
|
if isinstance(name, str):
|
||||||
if isinstance(name, str):
|
self.packages_complete.append(name)
|
||||||
self.packages_complete.append(name)
|
|
||||||
|
|
||||||
def _flatten(self, packages):
|
def _flatten(self, packages):
|
||||||
"""Yield every leaf Package, descending into is_group sub_packages."""
|
"""Yield every leaf Package, descending into is_group sub_packages."""
|
||||||
|
|||||||
+5
-5
@@ -23,7 +23,8 @@ def _clean_log_line(text: str) -> str:
|
|||||||
class BlenderDocker:
|
class BlenderDocker:
|
||||||
def __init__(self, blender: BlenderVersion, severity: int = logging.WARNING):
|
def __init__(self, blender: BlenderVersion, severity: int = logging.WARNING):
|
||||||
self._blender_version = blender
|
self._blender_version = blender
|
||||||
self._docker_client = docker.from_env()
|
# Todo get a user config
|
||||||
|
self._docker_client = docker.DockerClient(base_url=f'unix:///var/run/docker.sock')
|
||||||
self.login()
|
self.login()
|
||||||
self._docker_image = None
|
self._docker_image = None
|
||||||
self._repository = 'stilobique/blender'
|
self._repository = 'stilobique/blender'
|
||||||
@@ -51,10 +52,9 @@ class BlenderDocker:
|
|||||||
release, so the build stage's base image can match it instead of drifting with
|
release, so the build stage's base image can match it instead of drifting with
|
||||||
whatever a floating `python` tag currently resolves to.
|
whatever a floating `python` tag currently resolves to.
|
||||||
"""
|
"""
|
||||||
url = (f'https://projects.blender.org/api/v1/repos/blender/blender/raw/'
|
url = (f'https://projects.blender.org/blender/blender/raw/tag/'
|
||||||
f'build_files/cmake/Modules/FindPythonLibsUnix.cmake?ref=v{self._blender_version.tag_name()}')
|
f'v{self._blender_version.tag_name()}/build_files/cmake/Modules/FindPythonLibsUnix.cmake')
|
||||||
r = requests.get(url)
|
r = requests.get(url)
|
||||||
r.raise_for_status()
|
|
||||||
match = re.search(r'set\(_PYTHON_VERSION_SUPPORTED\s+([0-9]+\.[0-9]+)\)', r.text)
|
match = re.search(r'set\(_PYTHON_VERSION_SUPPORTED\s+([0-9]+\.[0-9]+)\)', r.text)
|
||||||
if not match:
|
if not match:
|
||||||
print(f'Could not determine required Python version from {url}')
|
print(f'Could not determine required Python version from {url}')
|
||||||
@@ -75,7 +75,7 @@ class BlenderDocker:
|
|||||||
logger.propagate = False
|
logger.propagate = False
|
||||||
|
|
||||||
if not logger.handlers:
|
if not logger.handlers:
|
||||||
handler = logging.FileHandler(log_dir / f'{name}.log', encoding='utf-8')
|
handler = logging.FileHandler(log_dir / f'{name}.log')
|
||||||
handler.setFormatter(logging.Formatter(
|
handler.setFormatter(logging.Formatter(
|
||||||
'%(asctime)s | [%(levelname)s] %(message)s'
|
'%(asctime)s | [%(levelname)s] %(message)s'
|
||||||
))
|
))
|
||||||
|
|||||||
@@ -90,9 +90,3 @@ def get_all_tags_from_docker():
|
|||||||
# All tags data:
|
# All tags data:
|
||||||
for release in j:
|
for release in j:
|
||||||
print(release)
|
print(release)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
print('Clean docker')
|
|
||||||
clean_all_dockers()
|
|
||||||
print('Done')
|
|
||||||
Reference in New Issue
Block a user