Update all CI config
This commit is contained in:
+69
-11
@@ -1,17 +1,75 @@
|
||||
import docker
|
||||
import os
|
||||
import sys
|
||||
|
||||
from pathlib import PurePosixPath
|
||||
from docker.errors import DockerException
|
||||
from .issue import ContainerErrorTest
|
||||
from .properties import ContainerObject
|
||||
|
||||
|
||||
def clear_container_test(tag: str = 'stilobique/blender:latest'):
|
||||
client = docker.from_env()
|
||||
containers = client.containers.list(all=True)
|
||||
class VirtualMachine:
|
||||
def __init__(self, container: ContainerObject):
|
||||
self.client = self.start_docker()
|
||||
|
||||
for container in containers:
|
||||
image_tag = container.image.tags[0]
|
||||
status = container.status
|
||||
if image_tag == tag and status == 'exited':
|
||||
container.remove()
|
||||
self.container = container
|
||||
self.base_command = self.container.commands
|
||||
self.clear_containers()
|
||||
|
||||
@staticmethod
|
||||
def start_docker():
|
||||
"""Generate docker client information"""
|
||||
try:
|
||||
client = docker.from_env()
|
||||
return client
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Clear all unused blender container
|
||||
clear_container_test()
|
||||
except DockerException:
|
||||
print('Docker isn\'t start or installed')
|
||||
exit(1)
|
||||
|
||||
def clear_containers(self):
|
||||
"""Look all docker containers, and remove-it if the task are used with the unit test."""
|
||||
containers = self.client.containers.list(all=True)
|
||||
|
||||
for container in containers:
|
||||
image_tag = container.image.tags[0]
|
||||
status = container.status
|
||||
if image_tag in self.container.ref and status in 'exited':
|
||||
container.remove()
|
||||
|
||||
@staticmethod
|
||||
def workspace():
|
||||
"""Define the workspace folder"""
|
||||
if os.environ.get('GITHUB_WORKSPACE'):
|
||||
return os.environ['GITHUB_WORKSPACE']
|
||||
else:
|
||||
return os.getcwd()
|
||||
|
||||
def launch_unit_test(self, tests: list[str]):
|
||||
"""Execute a docker container to start unit test dedicated"""
|
||||
if tests is None:
|
||||
unit_test = os.listdir(self.workspace())
|
||||
else:
|
||||
if type(tests) is not list:
|
||||
tests = [tests]
|
||||
unit_test = tests
|
||||
|
||||
try:
|
||||
for test in unit_test:
|
||||
print(f'Launch unit test "{test}"')
|
||||
cmds = self.base_command + [f'{PurePosixPath(self.container.local_folder, "tests", "unit_test", test)}']
|
||||
|
||||
docker_test = self.client.containers.run(self.container.ref, command=cmds,
|
||||
volumes=self.container.volumes, privileged=True,
|
||||
environment=self.container.environments, detach=True,
|
||||
name=test, tty=True)
|
||||
exit_docker = docker_test.wait()
|
||||
if exit_docker['StatusCode'] != 0:
|
||||
print(f'Container error "{exit_docker["StatusCode"]}".\n\t'
|
||||
f'Show log : \n\t'
|
||||
f'{docker_test.logs()}')
|
||||
raise ContainerErrorTest
|
||||
|
||||
except ContainerErrorTest as exception:
|
||||
print(f'{exception.__doc__}')
|
||||
sys.exit(1)
|
||||
|
||||
Reference in New Issue
Block a user