builder.braak.pro/buildbot/config/worker/blender/test.py
2024-11-20 16:13:44 +01:00

62 lines
2 KiB
Python

# SPDX-License-Identifier: GPL-2.0-or-later
# SPDX-FileCopyrightText: 2011-2024 Blender Authors
# <pep8 compliant>
import os
import shutil
from typing import List
import worker.blender
import worker.blender.pack
import worker.blender.compile
def get_ctest_arguments(builder: worker.blender.CodeBuilder) -> List[str]:
args = ["--output-on-failure"]
# GPU tests are currently slow and can cause timeouts.
if not builder.needs_gpu_tests:
args += ["--parallel", "4"]
args += ["-C", worker.blender.compile.get_cmake_build_type(builder)]
return args
def package_for_upload(builder: worker.blender.CodeBuilder, success: bool) -> None:
build_tests_dir = builder.build_dir / "tests"
package_tests_dir = builder.package_dir / "tests"
if not build_tests_dir.exists():
return
os.makedirs(package_tests_dir, exist_ok=True)
# Upload package on failure
if not success:
package_filename = "tests-" + worker.blender.pack.get_package_name(builder)
package_filepath = package_tests_dir / package_filename
shutil.copytree(build_tests_dir, package_filepath)
shutil.make_archive(
str(package_filepath), "zip", package_tests_dir, package_filename
)
shutil.rmtree(package_filepath)
# Always upload unpacked folder for main and release tracks,
# when using GPU tests. This is useful for debugging GPU
# differences.
if builder.track_id != "vexp" and builder.needs_gpu_tests:
branch = builder.branch_id.replace("blender-", "").replace("-release", "")
name = f"{branch}-{builder.platform}-{builder.architecture}"
shutil.copytree(build_tests_dir, package_tests_dir / name)
def test(builder: worker.blender.CodeBuilder) -> None:
builder.setup_build_environment()
os.chdir(builder.build_dir)
success = False
try:
builder.call(["ctest"] + get_ctest_arguments(builder))
success = True
finally:
package_for_upload(builder, success)