316 Commits

Author SHA1 Message Date
Robert Schmidt
2d57ec1987 Merge remote-tracking branch 'origin/ci-ue-timing-stats' into integration_2026_w25
CI: Add UE timing phytest (#188)

Add a new XML file to also measure UE timings, similarly how we do with
gNB.

Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-06-19 14:05:03 +02:00
Jaroslava Fiedlerova
9fd43efaf2 CI: support configurable stats files in AnalyzeRTStats_Object
Allow XML test cases to specify one or more files with timing stats that
define which container log paths to collect and analyze. AnalyzeRTStatsObject
loops over the provided list, falling back to the default gNB files
(nrL1_stats.log, nrMAC_stats.log) when none are specified.

Assisted-by: Claude:claude-sonnet-4-6
Signed-off-by: Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
2026-06-19 08:59:58 +02:00
Bartosz Podrygajlo
4ed41739c0 fix(vrtsim): Fixes for vrtsim
- Fix vrtsim uneven antenna configurations
- Fix shm_td_iq_channel client-server SHM race
- Set shm size to 2G in unit test docker run to prevent out-of-memory errors

Closes: #130
Signed-off-by: Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
2026-06-16 15:11:34 +02:00
Jaroslava Fiedlerova
6a9b4b58a4 CI: Add XML and Dockerfile for FHI7.2 gNB with T2 support
Use taskset with a dynamic range based on the number of detected processors
for OAI and DPDK build. This ensures both DPDK and OAI build steps use all
available CPU cores on the machine.

Build with XRAN K release

Signed-off-by: Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
2026-05-29 15:14:08 +02:00
Jaroslava Fiedlerova
84299bcd27 CI: replace CreateTag and merge-based workspace logic with explicit branch/repo
Remove CreateTag() and the merge/targetBranch parameters from
CreateWorkspace, passing the final branch name and repository directly
from Jenkins instead. Jenkinsfile computes testBranch and testRepository
(with INTERNAL_REPO as default). create_workspace.sh now does a simple
shallow clone by branch name.

Introduce two optional Jenkins parameters that allow overriding the
default branch reference and git repository URL used across the CI
pipeline.
- customBranch: when set, replaces the entire computed
  {sourceBranch}-{commitID}
- customRepository: when set, replaces INTERNAL_REPO as the git remote
  used by Create_Workspace to clone the source code onto the test node.

Signed-off-by: Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
2026-05-21 16:46:12 +02:00
Jaroslava Fiedlerova
9e4308030b CI: Rename and cleanup parameters inside python
isMergeRequest     --> merge
eNB_SourceCodePath --> workspace
ranBranch          --> branch
ranCommitID        --> commitID
ranTargetBranch    --> targetBranch
ranRepository      --> repository

Signed-off-by: Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
2026-05-15 14:11:00 +02:00
Jaroslava Fiedlerova
228dad1ec2 CI: Remove L2sim proxy build support
Remove the `BuildProxy` method, `Build_Proxy` action, `proxyCommit`
attribute, and all associated XML configuration and unit tests.

The oai-lte-5g-multi-ue-proxy repository has not received any updates
in over two years, and the proxy commit currently used for the build
is outdated as well. Although the proxy image is still required by
RAN-L2-Sim-Test-4G and must remain available on the test machine,
building it as part of the CI pipeline is dropped in this commit.

Instead, the CI will now assume that the corresponding proxy image is
already present as an external dependency, similarly to how CN images
are handled.

Signed-off-by: Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
2026-05-15 14:11:00 +02:00
Jaroslava Fiedlerova
d39a40dba2 CI: Switch to full commit IDs for image naming
Signed-off-by: Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
2026-05-15 14:11:00 +02:00
Jaroslava Fiedlerova
4f74b2c7eb CI: Increase service deployment timeout
Signed-off-by: Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
2026-05-07 14:00:09 +02:00
Robert Schmidt
17a87cd858 Simplify BuildImage
Signed-off-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-04-16 00:34:58 +02:00
Jaroslava Fiedlerova
b05985e7ab 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
2026-04-01 22:57:03 +02:00
Robert Schmidt
8107939f08 Change OAI license to CSSL v1.0 (and others)
- all RAN code, CI code, configuration files, dockerfiles, in CSSL v1.0
- all deployment code (openshift, charts, ancillary files like shell
  scripts), in MIT
- documentation in CC-BY-4.0
- exceptions might apply and are listed in NOTICE
- there is a new LICENSES folder with all licenses
- CONTRIBUTIONS.md has been updated accordingly

For automated changes based on OAI PL v1.1:

    perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.{c,h,cpp}
    perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.ts
    perl -i~ -0pe 's/<!--.*Licensed to the OpenAirInterface.*openairinterface.org\n.*-->/<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->/s' **/*.xml

The rest (cmake, files with missing license, cmake) manually.
2026-03-27 16:36:37 +01:00
Jaroslava Fiedlerova
05273269d2 CI: Allow to select service for RT stats analysis
When running phytest with FHI7.2 in Docker, two services are deployed:
dpdk-init and oai-gnb. Previously, AnalyzeRTStatsObject selected the
first deployed service for RT stats analysis.
Allow to explicitly select the service used for RT stats analysis instead
of relying on the first deployed service.
2026-03-18 11:11:27 +01:00
Jaroslava Fiedlerova
f12b8cb44d Merge remote-tracking branch 'origin/ci-rework-logs' into integration_2026_w09 (!3942)
CI: rework log analysis to simplify and allow new use cases

The CI has some log analysis, but it is unmaintainable (huge functions
that mix eNB/gNB or lteUE/nrUE, are not tested, most of it is not used
or useful...) or limited to specific use cases (the timing-phytest time
analysis is hardcoded to source builds instead of also handling analysis
when running from docker images). This MR reimplements both functions.
For the log analysis, the CI team decided to throw away the old
analysis, and reimplement a mechanism that checks the couple of things
we care for.

- Allow to analyze phy-test timing analysis from docker files, and add a
  unit test
- Rework existing log analysis to remove useless checks, and make it
  more composable
  * The undeployment steps (Undeploy_Object(), Terminate_eNB()) take an
    <analysis> XML object which then either has a <services> subelement
    with check that are whitespace delimited (similar to how other xml
    task steps have <services>). For checks that contain whitespace,
    they can use <service> (singular) that encodes a single check, such
    that e.g., arguments could include spaces.
  * Each check is of form service=check[=arguments], where service is
    the docker services, check is a checking function (implemented as a
    class with run(file, options) function inside cls_loganalysis.py,
    and options arguments after the second = that is to be read by run()
    (basically, options will contain arguments that can be freeform)
  * these definitions can occur multiple times, e.g., it could be
    serviceA=Check1 and serviceA=Check2=Args and it will execute both
    Check1 and Check2
  * if a service is declared, it will execute alse the Default check
    which currently checks for an assertion
  * Implemented (and inspired from the existing CI analysis) are:
    - Default check to check for assertions (will be extended, to e.g.,
      address/undefined behavior sanitizer analysis)
    - RetxCheck: retransmission check as used in the CI
    - LastLineContains to check the last line containes a specific
      string
    - ContainsString to check a specific string appears in logs
    - EndsWithBye: check that towards the end (but not necessarily the
      last line), there is a Bye. string (a workaround since we don't
      always terminate with 0)
- There is a plan to use return codes after stopping in docker, but most
  executables do not end with 0 most of the time, such that we needed to
  abandon this plan.
- Additional fixes (see commit messages) and delete unused code
2026-02-26 22:39:29 +01:00
Robert Schmidt
378d3a7a6b Add AnalyzeRTStatsObject() XML step 2026-02-26 14:17:28 +01:00
Robert Schmidt
30a27432f0 Remove unused logging and unused imports 2026-02-26 14:17:28 +01:00
Robert Schmidt
707cb560d5 Implement retransmission checker, include unit test 2026-02-26 14:17:28 +01:00
Robert Schmidt
fe464ec6d0 Initial code for log analysis
- we agreed to basically throw away the old log checker (as it is
  unmaintainable)
- now: provide list of analysis to do
  * all checkers in cls_log_analysis, can be unit tested (see also next
    commit)
  * looked up dynamically to simplify adding of new tests + config
  * configured with

      <analysis>
        <services>DESCRIPTION [DESCRIPTION...]</services>
        <service>DESCRIPTION</service>
        ...
      </analysis>

    where DESCRIPTION follows service=func[=options]:
    - service is name of service to check
    - func is function to call, which receives filename
    - option are arbitary options to pass to func
    <services> is whitespace delimited (so can take multiple service
    analysis definitions)
    <service> exists to allow service definitions with whitespace
    changes that would not work in <services>
- I initially planned to check return code, but most softmodems actually
  exit with non-zero return code, so this is still TODO
- Default analyzer (checking for assertions, ...) is always run if a
  service is listed
- checks for file size
- add unit tests
2026-02-26 14:17:28 +01:00
Robert Schmidt
03f56c10e7 GetDeployedServices(): return container ID
will be relevant to get the return code in the next commit.
2026-02-26 13:39:39 +01:00
Shubhika Garg
0a9c3a07eb ci: Pull ubuntu:noble image from our internal docker registry to build ubuntu images
- This is to overcome the issue of pull rate limits from DockerHub
        - Make Ubuntu base image configurable via build-arg
2026-02-23 16:34:06 +01:00
Jaroslava Fiedlerova
5ff032f9a7 Merge remote-tracking branch 'origin/aerial_25-3' into integration_2026_w05 (!3868)
CI: Upgrade Aerial pipeline to 25-3

Upgrade Aerial CI pipeline to 25-3 after aerial-cuda-accelerated-ran became
open source.
2026-01-30 12:17:10 +01:00
Reem Bahsoun
de0d100d67 Update nvIPC library to match the new cuBB image 2026-01-29 15:45:52 +01:00
Jaroslava Fiedlerova
c2d3a3d0c2 Merge remote-tracking branch 'origin/oru-rebased' into integration_2026_w05 (!3848)
Initial implementation of O-RU for 7.2 emulator

Added new executable nr-oru which acts as a 7.2 O-RU.
2026-01-27 20:30:12 +01:00
Bartosz Podrygajlo
ee2af75bff O-RU: Add Dockerfile and image build step 2026-01-16 11:56:33 +01:00
Robert Schmidt
6317fdd9df CI: Remove kind from RunTests: not used 2026-01-15 15:55:59 +01:00
Robert Schmidt
f2de345b09 CI: don't build Aerial on x86
We use Aerial exclusively on ARM/gracehopper, so no need to build it on
x86. On this occasion, rename the "kind" (ID which images to build) to
x86 for clarity and align with the other "kinds" (build_cross_arm,
native_armv9, ...).
2026-01-15 15:55:20 +01:00
Jaroslava Fiedlerova
c382d78051 CI: include VNF container in xNB log analysis 2026-01-07 12:09:59 +01:00
Robert Schmidt
bff0e53645 CI build analysis: print log file errors
The generated HTML from CI builds so far only shows the number of
errors, but not the errors themselves. This is inconvenient, as this
means that developers have to go to the logs.

This commit modifies AnalyzeBuildLogs(), which already iterates the
entire file, to store the lines containing "error:" (as it would be
emitted by a compiler). The callers of AnalyzeBuildLogs() now also print
the analysis outcome in a more concise manner.

Also, change the return parameter of AnalyzeBuildLogs() to a tuple to make
the variable handling easier, and remove the unused warnings list.
2025-11-21 17:53:25 +01:00
Teodora
6a6588e9cb OAI-FLEXRIC-RAN-Integration-Test CI pipeline
1. Rename oai-flexric to nearRT-RIC. FlexRIC is a project combining nearRT-RIC, xApps, and E2 agent emulators.
2. Instead of undeploying all the containers at the same time, and not checking the logs for xApps and nearRT-RIC, do the following:
- Stop containers (docker compose stop) - one or subgroup of running containers in the following order:
   a) xapp-kpm-moni
   b) xapp-kpm-rc
   c) xapp-gtp-mac-rlc-pdcp-moni
   d) oai-nr-ue oai-nr-ue2
   e) oai-gnb
   f) nearRT-RIC
- Undeploy containers (docker compose down), collect and analyze all the logs.
2025-11-14 14:57:12 +01:00
Robert Schmidt
81680e29a9 Implement StopObject()
For some test cases, we might want to stop a service earlier. This
functionality is done by StopObject().

Test log collection is still done by UndeployObject(), which will
collect the logs of all services (at that point, stopped or not).
2025-11-14 14:57:12 +01:00
Robert Schmidt
ddcb216a35 Improve logging in CI Undeploy/DeployObject()
Consistently print requested services (if applicable)
and outcome of the step.
2025-11-14 14:57:12 +01:00
Robert Schmidt
247e908b6e Simplify UndeployObject() and GetDeployedObjects()
GetRunningServices() was returning all services, running or stopped.
Hence, rename to reflect what this function does, and rewrite slightly
to better capture what is actually happening. Also, don't return the
container ID, as we don't use it.

Call stop on all services, as we will down the deployment right after.
The list of services is still used to retrieve logs.

Remove a stray "return False", which would sometimes prevent us from
seeing all error messages.
2025-11-14 14:57:11 +01:00
Robert Schmidt
8cf7dd8607 CI: use intermediate variable for YAML file
This harmonizes with DeployObject() (which uses the same variable) and
shortens some lines for readability.
2025-11-13 14:33:35 +01:00
Jaroslava Fiedlerova
aff3c9872f CI: align REGISTRY env var with updated image path format
Following the change to use:
  image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
the REGISTRY variable must now include the trailing slash.
2025-10-31 15:20:34 +01:00
Reem Bahsoun
9620fd1a6a Update the nvIPC library to the one packaged with the new cuBB image. 2025-10-16 12:06:15 +02:00
Robert Schmidt
7e1eabe700 Switch to new (internal) registry 2025-09-23 17:43:38 +02:00
Robert Schmidt
8045dc71e0 XML description for build on Jetson (ARMv8) 2025-09-17 15:26:34 +02:00
Robert Schmidt
1ea90fc987 Rename to native_armv9 image build type
For clarity, rename to native_armv9 for clarity. The check inside Python
checked for native_arm, and if we introduce native_armv8 (for jetson),
it would also match that.
2025-09-17 15:24:12 +02:00
Robert Schmidt
dd3ecbcf38 CI: Harmonize exec_script() API
Instead of making the function a class member, make it an instance
member because (1) it is more aligned with other functions, notably,
run(), and (2) especially for RemoteCmd() it can be faster, as
successive exec_script() calls do not require a new SSH connection.
2025-09-10 16:43:16 +02:00
Robert Schmidt
582aeac496 Remove superfluous HTML.CreateHtmlTabFooter()
CreateHtmlTabFooter() is already called in main.py, at the end of an
XML. This is enough, the others are "duplicates" that are not necessary.
2025-09-10 16:43:16 +02:00
Reem Bahsoun
206e44ae54 Replace old nvIPC library with the new one 2025-09-03 13:30:49 +02:00
Robert Schmidt
9f5ea8beba Merge remote-tracking branch 'origin/cleanup-build-oai-speedup-cluster' into integration_2025_w33 (!3579)
CI: speed up and simplify build, remove unnecessary Python code, remove --eNB* parameter list

This cleans up the CI framework for running end-to-end tests, and
improves the integration with OAI code. Specifically

- cleanup build_oai and helpers to output all text, which is captured
  better by the CI
- build some images in the Cluster-Build in parallel to increase speed
- remove all --eNB{,1,2}{IPAddress,UserName,Password} variables. Those
  were indexed through "instance" and "server ID" and are replaced with
  the actual node name. I consider further cleanup to introduce a
  "global" XML file node name so we don't need this in each step and
  instead define this once.
- individual cleanup
2025-08-14 16:45:52 +02:00
Robert Schmidt
c5624661eb Remove HTML 'no analysis function'
For some network functions, we don't match an analysis function. In the
console logs we print an info message. In the HTML, it's just noise.
2025-08-14 14:55:23 +02:00
Robert Schmidt
3c54daf4e2 Remove "forcedWorkspaceCleanup" option
It is superseded by the CreateWorkspace() function and task step (which
removes and recreates a workspace), and this option was not actually
used in any function except for the build of unit tests, but no XML
step actually specified this option.
2025-08-14 14:55:23 +02:00
Robert Schmidt
9e1cbb1035 Ignore eNB{,1,2}{UserName,IPAddress,Password} parameters
After having transitioned to direct node names in the XML, these
parameters are not relevant anymore.

The best way to view this patch is with

    git show <SHA> --ignore-all-space
2025-08-14 14:55:04 +02:00
Robert Schmidt
c4efe9feed cls_containerize: yamlPath/services as normal string
These variables were set as lists, to be indexed by the "server ID".
Since this has been removed from all XMLs, it is not necessary anymore.
2025-08-14 14:55:04 +02:00
Robert Schmidt
190dc55d9f Pass node to various Build*() functions
Pass node directly from XML to these functions

- BuildClusterImage()
- BuildImage()
- BuildProxy()
- BuildRunTests()

instead of reading the "server ID" and looking up from
eNB_IPAddress/eNB1_IPAddress/eNB2_IPAddress.

Improve the proxy build unit test by properly passing ctx information.
2025-08-14 14:55:04 +02:00
Robert Schmidt
6233667de9 Push_Local_Registry(): pass node 2025-08-14 14:55:04 +02:00
Robert Schmidt
7839d06601 Create/Deploy/Undeploy(): use node
Pass the node name for a host on which to create a workspace or
deploy/undeploy.

Add a new test for the creation of workspaces.

To help myself and the reviewer, here is a list of
"eNB_IPAddress"/"eNB1_IPAddress" parameters I copied from the various
pipelines:
- rfsim 4G eNB_IPAddress none => localhost
- rfsim 5g eNB_IPAddress none => localhost
- flexric eNB_IPAddress none => localhost
- l2sim 4g eNB_IPAddress none => localhost
- l2sim 4G eNB1_IPAddress 172.21.16.128 => obelix => localhost
- cluster image eNB_IPAddress poseidon
- ubuntu18 eNB_IPAddress obelix => obelix
- ubuntu-arm eNB_IPAddress gracehopper3-oai => gracehopper3-oai
- arm-cross eNB_IPAddress alambix => alambix
- lte-tdd eNB_IPAddress 172.21.18.45 => starsky
- lte-fdd eNB_IPAddress 172.21.18.46 => hutch
- lte-oaiue eNB_IPAddress 172.21.18.46 => hutch
- lte-oaiue eNB1_IPAddress 172.21.18.47 => carabe
- lte-tdd-2x2 eNB_IPAddress 172.21.16.128 => obelix
- nsa eNB_IPAddress 172.21.16.137 => nepes
- nsa eNB1_IPAddress 172.21.16.109 => ofqot
- sa-aerial eNB_IPAddress gracehopper1-oai => gracehopper1-oai
- aw2s eNB_IPAddress 172.21.16.124 => avra
- sabox eNB_IPAddress 172.21.16.109 => ofqot
- sa-oaiue eNB_IPAddress avra => avra
- sa-oaiue eNB1_IPAddress caracal => caracal
- cppcheck eNB_IPAddress 172.21.18.47 => carabe
- timing-phytest eNB_IPAddress caracal => caracal
- physim 4g eNB_IPAddress avra => avra
- physim 5g eNB_IPAddress avra => avra
2025-08-14 14:55:04 +02:00
Robert Schmidt
d95e6bca6b Pull_Image_from_Registry()/Clean_Test_Server_Images(): pass node
Pass the node name for a host onto/from which to pull/clean the images.
For doing this, I used:

- rfsim 4G eNB_IPAddress none => localhost
- rfsim 5g eNB_IPAddress none => localhost
- flexric eNB_IPAddress none => localhost
- l2sim 4g eNB_IPAddress none => localhost
- l2sim 4G eNB1_IPAddress 172.21.16.128 => obelix => localhost
2025-08-14 14:55:04 +02:00