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_<timestamp>_<pid> 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_<ts> 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).
This commit is contained in:
1 parent
c30bf7ac6b
commit
42f9fbeebe
1 file changed
+144
-160
@@ -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_<timestamp>_<pid>/` — 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 <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_<timestamp>_<pid>` (unique per run).
|
||||
2. Configures with CMake (Ninja generator):
|
||||
|
||||
```bash
|
||||
cmake .. \
|
||||
cmake -B build4_<ts> \
|
||||
-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 <t>`
|
||||
(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 <image> \
|
||||
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 \
|
||||
<image> \
|
||||
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 <image> \
|
||||
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 <image> \
|
||||
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 <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_<ts>/` 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 <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/<project>/<os>/`; 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_<timestamp>_<pid>` 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/<project>/<os>/` 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.
|
||||
Reference in new issue
Block a user