From 42f9fbeebee1e95bbd5c130d73871b6ece67fabe Mon Sep 17 00:00:00 2001 From: berrux_dev Date: Fri, 13 Nov 2026 20:37:37 +0100 Subject: [PATCH] README: align with the actual state of the Release 2 branch Verified every claim against new_docker_build_release2.sh, the DEB producer and a real pipeline run, then removed/fixed what does not belong to this branch: - Removed Step 1 (--build-prebuilt-image/--delete-prebuilt-image): those options do not exist in the driver. - Replaced the Release 1 bookkeeping (R1 packages table, R1 modules table, 38-target count) with the actual Release 2 scope: 46 targets (GROUP1 6, GROUP3 36, GROUP5 3, GROUP6 1). - Fixed the build description: Ninja (not make -j8), unique build4__ dirs (not a shared build4/), the real cmake flags (BUILD_RTI, BUILD_GROUP*, RTI defines), no RELEASE_BUILD flag. - Fixed image/mount facts: default image qt6-migrated-legatus-release2 (not guez-release2:2.0), /repo mount root (not /workspace), no WORKSPACE env var, no build4/release_build.log. - Fixed DEB names/contents: qt6-release-*_1.0-1_amd64.deb (not guez-*_2.0), real PIPELINE_FILES list, honest note that the ctest-runtime DEB is currently empty (build4 vs build4_ mismatch). - ctest baseline: 7 in-scope tests passed + the 9 expected Not Run entries. - Options reference: real options/defaults (lts-version 1.0), env override list matching the driver; troubleshooting updated (offscreen Qt, RTI license, prebuilt image). --- qt6-after/qt6-migrated-legatus/README.md | 304 +++++++++++------------ 1 file changed, 144 insertions(+), 160 deletions(-) diff --git a/qt6-after/qt6-migrated-legatus/README.md b/qt6-after/qt6-migrated-legatus/README.md index 0719e1118..6ead50f45 100644 --- a/qt6-after/qt6-migrated-legatus/README.md +++ b/qt6-after/qt6-migrated-legatus/README.md @@ -5,145 +5,126 @@ Everything runs inside a prebuilt Docker image; the host only needs Docker. ## Release 2 Scope -**Release 2 includes all Release 1 packages plus new modules:** +**46 targets** across 4 build groups (GROUP1, GROUP3, GROUP5, GROUP6): -| Area | Contents | Targets | -|---|---|---| -| **Release 1 Packages** | TetraIF, Z module, Lts/Common, Tests | 35 targets | -| **AP3 — Shared Libraries** | LtsUtils, Widgets, Session, Krypto, PluginManager | 6 targets | -| **AP4 — DDS Middleware** | Core, DDSConnector, Routing, QosProfile, RTI DDS compatibility | 6 targets | -| **AP9 — Tools & Translations** | DdsView, LogViewer, SqlBrowser, generators, lupdate toolchain | 4 targets | - -**Total: 38 targets** across 4 build groups (GROUP1, GROUP3, GROUP5, GROUP6) - -### Target Breakdown - -| Group | Area | Targets | Count | +| Group | Area | Count | Targets | |---|---|---|---| -| **GROUP1** | DDS/AP4 | ddscore, ddsftccore, ddsfts, ddsgen, ddsQoS, ddsconnector | 6 | -| **GROUP3** | Lts/AP3/TetraIF/Tests | NGL (14), Lts (4), Plugin Interfaces (2), AP3 Libraries (4), Release 1 Additions (2), Tests (7) | 28 | -| **GROUP5** | Viewer/AP9 | ddsview, LogViewer, sqlbrowser | 3 | -| **GROUP6** | Tools/AP9 | ngl_codegen | 1 | +| **GROUP1** | AP4 — DDS middleware | 6 | ddscore, ddsftccore, ddsfts, ddsgen, ddsQoS, ddsconnector | +| **GROUP3** | AP3 — shared libraries, TetraIF, Lts/Common, tests | 36 | see breakdown below | +| **GROUP5** | AP9 — viewers | 3 | ddsview, LogViewer, sqlbrowser | +| **GROUP6** | AP9 — tools | 1 | ngl_codegen | -### Release 1 Modules Included +### GROUP3 breakdown -| Module | Targets | Description | -|---|---|---| -| **TetraIF** | 5 | CoPrtCnv, LogView, LogViewLogger, PrtCnv, PrtCnvLib | -| **Z Module** | 16 | NGL application/core library stack (NGLLogger, nglapplication, nglcompression, nglcoreapplication, ngldb, nglguiapplication, nglsettings, nglsingleapplication, nglsinglecoreapplication, ngltools, ngltranslator, nglwidgets, qtsingleapplication, qtsinglecoreapplication) | -| **Lts/Common** | 3 | LtsCoordinate, LtsCoordTrans, LtsMultiMonitor | -| **Tests** | 7 | aes_crypt_test, ngltools_qt_smoke, lts_coord_trans_unit_test, test_nglpdfwidget, coprtcnv_unit_test, logview_unit_test, prtcnv_unit_test | -| **Additional** | 2 | LtsLicence, MockCoordTrans | +| Area | Targets | +|---|---| +| NGL stack (14) | NGLLogger, nglapplication, nglcompression, nglcoreapplication, ngldb, nglguiapplication, nglsettings, nglsingleapplication, nglsinglecoreapplication, ngltools, ngltranslator, nglwidgets, qtsingleapplication, qtsinglecoreapplication | +| Services (6) | wms_json_ds, tcpserver, LtsCoordinate, LtsCoordTrans, LtsSession, LtsMultiMonitor | +| Plugin interfaces (2) | DataPluginInterface, GuiPluginInterface | +| TetraIF (5) | CoPrtCnv, LogViewLogger, LogView, PrtCnvLib, PrtCnv | +| Additional (2) | LtsLicence, MockCoordTrans | +| Tests (7) | aes_crypt_test, ngltools_qt_smoke, lts_coord_trans_unit_test, test_nglpdfwidget, coprtcnv_unit_test, logview_unit_test, prtcnv_unit_test | + +The group target lists are the `GROUP*_TARGETS` arrays in +`new_docker_build_release2.sh`. ## Entries at the tree root -- `new_docker_build_release2.sh` — Release 2 build driver (image build, compile, ctest, DEB packaging) -- `Dockerfile` — recipe of the prebuilt build image (Ubuntu 26.04 + Qt 6.10.2 + deps) +- `new_docker_build_release2.sh` — Release 2 build driver (compile, ctest, DEB packaging, coverage) +- `Dockerfile` — recipe of the build image (Ubuntu 26.04 + Qt 6.10.2 + deps) - `rpmbuild/make_rpm_ubuntu26_release2.py` — Release 2 DEB package producer (5 packages) - `jenkins-ci-rme/` — in-tree copy of the Jenkins CI flow (see its own `README.md`) -- `build4/` — build tree, created by the driver (git-ignored scratch area) +- `build4__/` — per-run build tree, created by the driver (git-ignored via `build4_*`) -**Toolchain inside the image:** Ubuntu 26.04, GCC 15.2.0, Qt 6.10.2 (`/opt/Qt/6.10.2/gcc_64`), C++17, Release build. - -**Qt Installation:** Qt 6.10.2 installed via `aqt install-qt` (no apt Qt6 packages). +**Toolchain inside the image:** Ubuntu 26.04, Qt 6.10.2 (`/opt/Qt/6.10.2/gcc_64`), +Ninja, C++17. Qt is installed via `aqt install-qt` (no apt Qt6 packages). ## Prerequisites 1. **Docker** available on the host. -2. The tree must be reachable inside the container at - `/workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus`, i.e. - mount the pipeline root on `/workspace` — this is how - `new_docker_build_release2.sh` invokes Docker, so running the driver as-is - satisfies this. +2. A prebuilt build image. The driver default is `qt6-migrated-legatus-release2`; + any equivalent prebuilt image can be selected with `--docker-image` + (or `DOCKER_IMAGE`). -The driver resolves the pipeline root from its own location (override -with the exported `MIGRATE_PIPELINE_ROOT` or the `.envrc` in this -directory). +The driver resolves the pipeline root with this precedence: +exported `MIGRATE_PIPELINE_ROOT` → `MIGRATE_PIPELINE_ROOT` from the `.envrc` +in this directory → derived from the script location. The pipeline root is +mounted in the container at `/repo` (override with `--docker-mount-root`), so +the tree is reachable at +`/repo/qt-migration-legatus/qt6-after/qt6-migrated-legatus`. All commands below are run **from this directory** (`qt6-migrated-legatus/`). -## Step 1 — Build the prebuilt Docker image (once) +## Step 1 — Compile the Release 2 scope ```bash -./new_docker_build_release2.sh --build-prebuilt-image --docker-image guez-release2:2.0 -``` - -This builds the image from the in-tree `Dockerfile` (Ubuntu 26.04 base, -apt deps, Qt 6.10.2 via `aqtinstall`, KDReports from source). Re-run it -only after changing the `Dockerfile` or the `APT_PACKAGES` list in -`new_docker_build_release2.sh`. - -To remove it later: - -```bash -./new_docker_build_release2.sh --delete-prebuilt-image --docker-image guez-release2:2.0 -``` - -## Step 2 — Compile the Release 2 scope - -```bash -./new_docker_build_release2.sh --docker-image guez-release2:2.0 +./new_docker_build_release2.sh --use-prebuilt-image --docker-image ``` What the driver does inside the container: -1. `rm -rf build4 && mkdir build4 && cd build4` (fresh build tree) -2. Configure with CMake: +1. Creates a fresh build tree `build4__` (unique per run). +2. Configures with CMake (Ninja generator): ```bash - cmake .. \ + cmake -B build4_ \ + -G Ninja \ -DBUILD_TESTING=ON \ - -DRELEASE_BUILD=ON \ - -DCMAKE_CXX_STANDARD=17 \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_PREFIX_PATH=/opt/Qt/6.10.2/gcc_64:/usr/local + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_PREFIX_PATH=/opt/Qt/6.10.2/gcc_64 \ + -DCMAKE_CXX_FLAGS="-DRTI_LINUX -DRTI_UNIX" \ + -DCMAKE_C_FLAGS="-DRTI_LINUX -DRTI_UNIX" \ + -DBUILD_RTI=ON \ + -DBUILD_GROUP1=ON -DBUILD_GROUP3=ON -DBUILD_GROUP5=ON -DBUILD_GROUP6=ON \ + . ``` - (`RELEASE_BUILD=ON` selects the Release 2 scope; everything else is at - its CMake default.) -3. `make -j8` the Release 2 scope targets (38 targets across GROUP1, GROUP3, GROUP5, GROUP6 — the list is - `RELEASE_BUILD_TARGETS` in `new_docker_build_release2.sh`). -4. Run **ctest** (see Step 3). + `BUILD_RTI=ON` is required: RTI codegen consumers (e.g. `svcPdmCommon`) + need the generated headers, and the `BUILD_RTI=OFF` stubs are not part of + this tree. The scope is selected by the `BUILD_GROUP*` flags. +3. Builds the 46 scope targets with `cmake --build ... --target ` + (Ninja, per target, in group order). +4. Runs **ctest** (see Step 2). -Output to inspect after the run: +Output to inspect after the run (in the run's `build4_*` dir): -- `build4/release_build.log` — full make output -- `build4/bin/` — executables (apps + test binaries) -- `build4/lib/` — shared libraries +- `bin/` — executables (apps + test binaries) +- `lib/` — shared libraries -To rebuild incrementally without a fresh tree, run `make` directly in an -interactive container against the existing `build4/`: +To rebuild incrementally without a fresh tree, run `ninja` in an interactive +container against the existing build dir: ```bash -docker run --rm -it -v /path/to/pipeline-root:/workspace guez-release2:2.0 \ - bash -c 'cd /workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus/build4 \ - && make -j8' +B=$(ls -dt build4_* | head -1) +docker run --rm -it -v "$MIGRATE_PIPELINE_ROOT":/repo \ + bash -c "cd /repo/qt-migration-legatus/qt6-after/qt6-migrated-legatus/${B} && ninja -j$(nproc)" ``` ## Run an executable directly To run a built executable interactively — e.g. the GUI apps under -`build4/bin/` (`LogView`, `PrtCnv`) against your local display — start a +`bin/` (`LogView`, `LogViewer`, `PrtCnv`) against your local display — start a shell inside the container with X11 forwarding: ```bash +B=$(ls -dt build4_* | head -1) docker run --rm -it \ -e DISPLAY \ -e LC_ALL=C.UTF-8 \ -v /tmp/.X11-unix:/tmp/.X11-unix \ - -v /path/to/pipeline-root:/workspace \ - legatus-qt6:1.0 \ - bash -c 'cd /workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus/build4 && exec bash' + -v "$MIGRATE_PIPELINE_ROOT":/repo \ + \ + bash -c "cd /repo/qt-migration-legatus/qt6-after/qt6-migrated-legatus/${B} && exec bash" ``` -## Step 3 — Run the tests +## Step 2 — Run the tests -### 3.1 ctest (automatic) +### 2.1 ctest (automatic) -`new_docker_build.sh` already runs `ctest --test-dir build4 ---output-on-failure` after the compile. Expected baseline (7 tests, all -passed): +The driver runs `ctest --output-on-failure -j$(nproc)` (with +`QT_QPA_PLATFORM=offscreen` — the container is headless) after the compile. +Expected baseline (7 in-scope tests, all passed): | # | Test | Result | |---|---|---| @@ -155,22 +136,30 @@ passed): | 6 | `lts_coord_trans_unit_test` | Passed | | 7 | `aes_crypt_test` | Passed | -### 3.2 Build the unit tests only +Tests registered by out-of-scope modules show up as `***Not Run` +(`nglcomp_test`, `ddsGenericDataTests`, `ddsDataTopicTests`, +`ddsFunctionTopicTests`, `coordTransTests_gtest`, `GrantleeParserSmoke`, +`utils_test`, `exmDtUnitTest`, `migration_tests_NOT_BUILT`) — that is expected +and the driver continues. + +### 2.2 Build the unit tests only ```bash -docker run --rm -v /path/to/pipeline-root:/workspace legatus-qt6:1.0 \ - bash -c 'cd /workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus/build4 \ - && make -j8 coprtcnv_unit_test logview_unit_test prtcnv_unit_test' +B=$(ls -dt build4_* | head -1) +docker run --rm -v "$MIGRATE_PIPELINE_ROOT":/repo \ + bash -c "cd /repo/qt-migration-legatus/qt6-after/qt6-migrated-legatus/${B} \ + && ninja coprtcnv_unit_test logview_unit_test prtcnv_unit_test" ``` -### 3.3 Run a test executable directly +### 2.3 Run a test executable directly GUI-free tests need the offscreen Qt platform in a headless container: ```bash -docker run --rm -it -v /path/to/pipeline-root:/workspace legatus-qt6:1.0 \ - bash -c 'export QT_QPA_PLATFORM=offscreen -cd /workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus/build4 +B=$(ls -dt build4_* | head -1) +docker run --rm -it -v "$MIGRATE_PIPELINE_ROOT":/repo \ + bash -c "export QT_QPA_PLATFORM=offscreen +cd /repo/qt-migration-legatus/qt6-after/qt6-migrated-legatus/${B} ./bin/coprtcnv_unit_test # CoPrtCnv: telegrams, fragmentation, helpers ./bin/logview_unit_test # LogView: IntegerCalculator ./bin/prtcnv_unit_test # PrtCnv: PrtCnvMember fragmented-telegram handling @@ -178,13 +167,13 @@ cd /workspace/qt-migration-legatus/qt6-after/qt6-migrated-legatus/build4 ./bin/aes_crypt_test ./bin/test_nglpdfwidget # or everything registered: -ctest --output-on-failure' +ctest --output-on-failure" ``` Each QtTest binary accepts a single slot name to run just one test, e.g. `./bin/coprtcnv_unit_test radioTelegramFragmentationRoundtrip`. -### 3.4 TetraIF unit tests (`TetraIF/unit-test/`) +### 2.4 TetraIF unit tests (`TetraIF/unit-test/`) | Test | Module covered | Note | |---|---|---| @@ -192,49 +181,42 @@ e.g. `./bin/coprtcnv_unit_test radioTelegramFragmentationRoundtrip`. | `logview_unit_test` | `LogView` — `IntegerCalculator` (arithmetic, precedence, error codes, variables) | compiles `LogView/IntegerCalculator.cpp` into the test (the class otherwise lives in the LogView executable) | | `prtcnv_unit_test` | `PrtCnv` — `PrtCnvMember` state + fragmented-telegram add/reassembly | compiles `PrtCnv/PrtCnvMember.cpp` into the test because `PrtCnvLib` is built with hidden visibility (its symbols are not linkable from outside) | -Sources are registered with ctest via `TetraIF/unit-test/CMakeLists.txt` -and packaged into the ctest DEBs (see Step 4). +Sources are registered with ctest via `TetraIF/unit-test/CMakeLists.txt`. -## Step 4 — Produce the Release 2 DEB packages +## Step 3 — Produce the Release 2 DEB packages ```bash -export WORKSPACE=/path/to/pipeline-root # e.g. ~/release/qt6-migration-pipeline -export PROJECT=guez -export OS_VERSION=26.04 - -./new_docker_build_release2.sh --docker-image guez-release2:2.0 \ +./new_docker_build_release2.sh --use-prebuilt-image --docker-image \ --run-jenkins-builder \ - --package-output-dir "${WORKSPACE}/rpms/${PROJECT}/${OS_VERSION}/" \ + --package-output-dir ./packages-out \ > /path/to/build.log 2>&1 ``` -(export the variables *before* the command — command-prefix variables are -not expanded in the same command's arguments.) - -The driver compiles the Release 2 scope (38 targets), runs ctest, -then stages the tree and runs the in-tree `rpmbuild/make_rpm_ubuntu26_release2.py`, -which produces 5 DEBs in `${WORKSPACE}/rpms/${PROJECT}/${OS_VERSION}/`: +The driver compiles the Release 2 scope (46 targets), runs ctest, then stages +the tree and runs `rpmbuild/make_rpm_ubuntu26_release2.py`, which builds the +scope again (Release configuration, Ninja, scoped target list) and produces +5 DEBs in `${MIGRATE_PIPELINE_ROOT}/rpms/${PROJECT}/${OS_VERSION}/` +(default `rpms/guez/26.04/`). A copy is also placed in `--package-output-dir` +(default `./packages-out`): | DEB | Contents | |---|---| -| `guez-runtime_2.0_amd64.deb` | Runtime libraries (Lts, AP3, AP4, TetraIF, Z) + executables | -| `guez-sources_2.0_amd64.deb` | Release 2 scope sources | -| `guez-ctest-runtime_2.0_amd64.deb` | Test executables under `/usr/lib/ctest/` (13 tests incl. TetraIF unit tests) | -| `guez-ctest-sources_2.0_amd64.deb` | Test sources (files with "test" in the name under release dirs) | -| `guez-build-pipeline_2.0_amd64.deb` | Pipeline files (`new_docker_build_release2.sh`, `Dockerfile`, `CMakeLists.txt`, `rpmbuild/`, `jenkins-ci-rme/`) under `/usr/src/pipeline/` | +| `qt6-release-runtime_1.0-1_amd64.deb` | Release 2 executables + libraries, staged from the scoped build's `bin/` and `lib/` | +| `qt6-release-sources_1.0-1_amd64.deb` | Release 2 scope sources (source files + CMakeLists under the release dirs) | +| `qt6-release-ctest-runtime_1.0-1_amd64.deb` | Test executables under `/usr/lib/ctest/` (currently empty — the producer looks for a `build4/bin/` dir, which the driver's timestamped `build4_/` dirs do not match) | +| `qt6-release-ctest-sources_1.0-1_amd64.deb` | Test sources (files with "test" in the name under release dirs) | +| `qt6-release-build-pipeline_1.0-1_amd64.deb` | In-tree pipeline files (the producer's `PIPELINE_FILES`: `new_docker_build.sh`, `Dockerfile`, `jenkins-ci-rme/*`, `rpmbuild/make_rpm_ubuntu26.py`, `CMakeLists.txt`) under `/usr/src/pipeline/` | + +(Version string = `--lts-version` + `-` + `--build-number`, default `1.0-1`.) Verify a package: ```bash -dpkg -c "${WORKSPACE}/rpms/guez/26.04/guez-ctest-runtime_2.0_amd64.deb" \ - | grep unit_test -dpkg -i "${WORKSPACE}/rpms/guez/26.04/"*.deb # install locally, if wanted +dpkg -c "${MIGRATE_PIPELINE_ROOT}/rpms/guez/26.04/qt6-release-runtime_1.0-1_amd64.deb" +dpkg -i "${MIGRATE_PIPELINE_ROOT}/rpms/guez/26.04/"*.deb # install locally, if wanted ``` -A copy of the DEBs is also placed in the container's -`/workspace/packages-out` mount (same-file skip guarded by device:inode). - -## Step 5 — CI / Jenkins flow (optional) +## Step 4 — CI / Jenkins flow (optional) The in-tree `jenkins-ci-rme/` directory contains the full Jenkins pipeline (`Jenkinsfile`, builder, publisher) adapted to this tree. For a @@ -246,27 +228,19 @@ jenkins-ci-rme/release-16-10-2026.sh See `jenkins-ci-rme/README.md` for the pipeline details. -## Step 6 — Code coverage (lcov) +## Step 5 — Code coverage (lcov) ```bash -export WORKSPACE=/path/to/pipeline-root # e.g. ~/release/qt6-migration-pipeline -export PROJECT=guez -export OS_VERSION=26.04 - -./new_docker_build_release2.sh --docker-image guez-release2:2.0 \ +./new_docker_build_release2.sh --use-prebuilt-image --docker-image \ --run-coverage \ - --coverage-output-dir "${WORKSPACE}/coverage/${PROJECT}/${OS_VERSION}/" \ + --coverage-output-dir ./coverage-out \ > /path/to/coverage.log 2>&1 ``` -(export the variables *before* the command — command-prefix variables are -not expanded in the same command's arguments.) - -The driver builds the Release 2 scope with `-O0 --coverage`, runs the same ctest -suite (13 tests), then captures the data with lcov: the report covers the Release 2 scope -(AP3, AP4, AP9, TetraIF, Z/src, Lts/Common, Lts/Proxies/TrainingAreaBase), and test -sources are filtered out of the report, so the percentages reflect the module -code. +The driver builds the Release 2 scope with `-O0 --coverage`, runs the same +ctest suite, then captures the data with lcov: the report covers the Release 2 +scope (AP3, AP4, AP9, TetraIF, Z/src, Lts/Common), and test sources are +filtered out of the report, so the percentages reflect the module code. Artifacts in the coverage output directory: @@ -280,8 +254,7 @@ Artifacts in the coverage output directory: instrumentation of the same build tree). The Jenkins pipeline runs the same step on every build (`RunCoverage` -parameter, on by default) and archives the report as build artifacts under -`coverage///`; the local dry run +parameter, on by default); the local dry run (`jenkins-ci-rme/release-16-10-2026.sh`) does the same, with `DRYRUN_COVERAGE=OFF` to skip coverage there. @@ -292,29 +265,40 @@ ones: | Option | Default | Purpose | |---|---|---| -| `--docker-image IMAGE` | `guez-release2:2.0` | image to use/build/delete | -| `--build-prebuilt-image` | — | build the image from `./Dockerfile` and exit | -| `--delete-prebuilt-image` | — | delete the image and exit | -| `--run-jenkins-builder` | off | produce the DEB packages (Step 4) | -| `--package-output-dir DIR` | `./packages-out` | where the DEBs are written | -| `--lts-version / --project / --build-number / --build-tag` | `2.0` / `guez` / `1` / `manual-build` | package metadata | -| `--run-coverage` | off | coverage build + lcov report (Step 6) | +| `--group1 / --group3 / --group5 / --group6` (or `--no-…`) | all on | enable/disable the build groups (AP4 / AP3 / AP9 / AP9) | +| `--no-ctest` | off | skip ctest | +| `--tests-only` | off | run ctest only, skip the build groups | +| `--use-prebuilt-image` / `--no-prebuilt-image` | off | use a prebuilt image vs. apt install in-container | +| `--docker-image IMAGE` | `qt6-migrated-legatus-release2` | image to use | +| `--cmake_build_flags FLAGS` | — | extra `-D` flags for the in-container configure | +| `--run-jenkins-builder` | off | produce the DEB packages (Step 3) | +| `--package-output-dir DIR` | `./packages-out` | host dir that receives the DEB copy | +| `--lts-version VERSION` | `1.0` | package version prefix | +| `--project NAME` | `guez` | project name for package naming | +| `--build-number NUM` / `--build-tag TAG` | `1` / `manual-build` | package metadata | +| `--run-coverage` | off | coverage build + lcov report (Step 5) | | `--coverage-output-dir DIR` | `./coverage-out` | where the coverage report is written | +| `--docker-mount-root PATH` | `/repo` | container-side mount root | -Environment overrides: `DOCKER_IMAGE`, `RUN_JENKINS_BUILDER`, -`PACKAGE_OUTPUT_DIR`, `RUN_COVERAGE`, `COVERAGE_OUTPUT_DIR`, `PROJECT`, -`LTS_VERSION`, `GUEZ_MODE`, `BUILD_NUMBER`, `BUILD_TAG`, -`MIGRATE_PIPELINE_ROOT`. +Environment overrides: `BUILD_GROUP1..6`, `RUN_CTEST`, `TESTS_ONLY`, +`USE_PREBUILT_IMAGE`, `DOCKER_IMAGE`, `CMAKE_BUILD_FLAGS`, +`DOCKER_MOUNT_ROOT`, `RUN_JENKINS_BUILDER`, `PACKAGE_OUTPUT_DIR`, +`LTS_VERSION`, `PROJECT`, `BUILD_NUMBER`, `BUILD_TAG`, `RUN_COVERAGE`, +`COVERAGE_OUTPUT_DIR`, `GUEZ_MODE`, `MIGRATE_PIPELINE_ROOT`. ## Troubleshooting - **"no Qt platform plugin could be initialized"** when running a test binary by hand → `export QT_QPA_PLATFORM=offscreen`. -- **Stale build tree** → the driver always recreates `build4/`; for - manual builds delete `build4/` and rerun Step 2 if CMake behaves oddly. +- **Stale build tree** → the driver always creates a fresh + `build4__` dir per run; old dirs are git-ignored scratch + areas and can be deleted freely. - **DEBs not on the host** → the output dir must be a path that exists - *on the host* (it is bind-mounted into the container as - `/workspace/packages-out`); check the `package-output-dir` argument. -- **Build fails with missing Qt modules** → ensure the container uses - `new_docker_build_release2.sh` which installs Qt 6.10.2 via `aqt install-qt`. - The image must be `guez-release2:2.0` (not `legatus-qt6:1.0`). + *on the host*; check the `--package-output-dir` argument and the + `rpms///` dir under the pipeline root. +- **Build fails with missing Qt modules** → the image must be a prebuilt + Release 2 image (Qt 6.10.2 installed via `aqt install-qt`); select it with + `--docker-image`. +- **DDS build fails on the license** → `rti_license.dat` must be present at + the source tree root; the driver exports `RTI_LICENSE` for in-container + use.