From b05985e7abbaa0ac8ce96d191bebbf459dc567a2 Mon Sep 17 00:00:00 2001 From: Jaroslava Fiedlerova Date: Wed, 1 Apr 2026 22:57:03 +0200 Subject: [PATCH] CI: Extend BuildRunTests() to accept configurable dockerfile and test options - enable configurable dockerfile, runtime-opt, and ctest-opt parameters in the XML file for the Build_Run_Tests step - pass runtime options to `docker run` to support ctest execution with CUDA - allow additional ctest options for selective test execution and labeling --- ci-scripts/cls_containerize.py | 10 +++++----- ci-scripts/main.py | 5 ++++- ci-scripts/xml_files/container_build_run_tests.xml | 1 + 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 503d80eabc..c7831136e2 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -483,10 +483,10 @@ class Containerize(): HTML.CreateHtmlTestRow('commit ' + tag, 'KO', CONST.ALL_PROCESSES_OK) return False - def BuildRunTests(self, ctx, node, HTML): + def BuildRunTests(self, ctx, node, dockerfile, runtime_opt, ctest_opt, HTML): lSourcePath = self.eNBSourceCodePath logging.debug('Building on server: ' + node) - cmd = cls_cmd.RemoteCmd(node) + cmd = cls_cmd.getConnection(node) cmd.cd(lSourcePath) ret = cmd.run('hostnamectl') @@ -513,9 +513,9 @@ class Containerize(): return False # build ran-unittests image - dockerfile = "ci-scripts/docker/Dockerfile.unittest.ubuntu" logfile = f'{lSourcePath}/cmake_targets/log/unittest-build.log' - ret = cmd.run(f'docker build --progress=plain --tag ran-unittests:{baseTag} --file {dockerfile} . &> {logfile}') + ret = cmd.run(f'docker build --progress=plain --tag ran-unittests:{baseTag} --file ci-scripts/{dockerfile} . &> {logfile}') + archiveArtifact(cmd, ctx, logfile) if ret.returncode != 0: logging.error(f'Cannot build unit tests') @@ -528,7 +528,7 @@ class Containerize(): # I would like to run it with --rm and mount the ctest result directory to avoid 'docker cp' # below, but then permissions are messed up and we can't remove the directory without sudo # making the next pipeline fail - ret = cmd.run(f'docker run -a STDOUT --workdir /oai-ran/build/ --env LD_LIBRARY_PATH=/oai-ran/build/ --name ran-unittests ran-unittests:{baseTag} ctest --no-label-summary -j$(nproc)') + ret = cmd.run(f'docker run -a STDOUT {runtime_opt} --workdir /oai-ran/build/ --env LD_LIBRARY_PATH=/oai-ran/build/ --name ran-unittests ran-unittests:{baseTag} ctest --no-label-summary -j$(nproc) {ctest_opt}') cmd.run('docker cp ran-unittests:/oai-ran/build/Testing/Temporary/LastTest.log .') archiveArtifact(cmd, ctx, f'{lSourcePath}/LastTest.log') cmd.run('docker cp ran-unittests:/oai-ran/build/Testing/Temporary/LastTestsFailed.log .') diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 579a90b28d..27cf36bcf8 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -70,6 +70,9 @@ def ExecuteActionWithParam(action, ctx, node): RAN.Build_eNB_args=test.findtext('Build_eNB_args') CONTAINERS.imageKind=test.findtext('kind') proxy_commit = test.findtext('proxy_commit') + dockerfile = test.findtext('dockerfile') or '' + runtime_opt = test.findtext('runtime-opt') or '' + ctest_opt = test.findtext('ctest-opt') or '' if proxy_commit is not None: CONTAINERS.proxyCommit = proxy_commit if action == 'Build_eNB': @@ -81,7 +84,7 @@ def ExecuteActionWithParam(action, ctx, node): elif action == 'Build_Cluster_Image': success = CLUSTER.BuildClusterImage(ctx, node, HTML) elif action == 'Build_Run_Tests': - success = CONTAINERS.BuildRunTests(ctx, node, HTML) + success = CONTAINERS.BuildRunTests(ctx, node, dockerfile, runtime_opt, ctest_opt, HTML) elif action == 'Initialize_eNB': RAN.Initialize_eNB_args=test.findtext('Initialize_eNB_args') diff --git a/ci-scripts/xml_files/container_build_run_tests.xml b/ci-scripts/xml_files/container_build_run_tests.xml index c680ea4983..53341c8810 100644 --- a/ci-scripts/xml_files/container_build_run_tests.xml +++ b/ci-scripts/xml_files/container_build_run_tests.xml @@ -8,6 +8,7 @@ Build_Run_Tests Build and Run UnitTests + docker/Dockerfile.unittest.ubuntu obelix