Document release scope packaging strategy

- Update audit with script-based filtering approach (not physical file removal)
- rpmbuild/make_rpm_ubuntu26.py: --release_scope flag filters at package build time
- jenkins-ci-rme/jenkins_builder_ubuntu26.sh: passes --release_scope to builder
- Preserves full source tree while ensuring release packages contain only M+S modules

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Entire-Checkpoint: 01M4GBB0H0NNHT4VSFYFNH08KF
This commit is contained in:
torstenandCopilot committed 2026-10-09 12:48:48 +00:00
1 parent 24caa94155
commit 08a10dd924
2 files changed
+288 -6

No files matched your search

+283
View File
@@ -0,0 +1,283 @@
# Qt6 Release Scope Audit
## Overview
This document defines the scope for the first Qt6-migrated modules release (M) and its required dependencies (S).
## Module Sets
### Release Modules (M)
These modules are explicitly included in the release:
1. **TetraIF/** - Complete TetraIF module
- CoPrtCnv/
- LogView/
- PrtCnv/
- CMakeLists.txt
2. **Z/** - Complete Z module
- src/ngldb/
- src/tcpserver/
- src/QtSingleApplication/
- src/WMS_Interface/
- src/nglapplication/
- src/nglcompression/
- src/nglsettings/
- src/ngltranslator/
- src/ngltools/
- src/nglwidgets/
- src/NGLLogger/
- CMakeLists.txt
3. **Lts/Common/** - Common utilities submodule
- CodeGen/
- LtsUtils/
- PluginInterfaces/
- LtsBasicTypes/
- LtsCoordinateTransformation/
- LtsDataModelInterfaces/
- LtsGeometry/
- LtsMapSymbol/
- LtsMath/
- LtsNetwork/
- LtsPluginManager/
- LtsPositioning/
- LtsProjection/
- LtsSerialization/
- LtsServiceInterfaces/
- LtsSignalHandling/
- LtsSqliteWrapper/
- LtsStandardPlugin/
- LtsStorage/
- LtsTestHelpers/
- LtsThreading/
- LtsTime/
- LtsUnitTests/
- LtsXml/
- MockCoordTrans/
- CMakeLists.txt
**Note:** LtsElevation is explicitly excluded (depends on Lts/Viewer/SituationMap outside release scope).
### Required Dependencies (S \ M)
These directories are required to build and test M:
1. **cmake/** - CMake build modules
- Required by: All modules (NGL_ADD_SUBDIR_GUARDED, find_package modules)
- Reference: `CMakeLists.txt:40-60` (NGL_ADD_SUBDIR_GUARDED function)
2. **include/** - Header files
- Required by: All modules for public API headers
- Reference: `CMakeLists.txt:1003-1008` (TetraIF include directories)
3. **src/** - Shared source files
- Required by: Multiple modules for shared utilities
- Reference: `CMakeLists.txt:975-987` (RELEASE_BUILD subdirectories)
4. **tests/** - Test files for release modules
- Required by: CTest validation
- Reference: `CMakeLists.txt:975-987` (tests included in RELEASE_BUILD)
5. **specs/** - Specification files
- Required by: Build configuration
- Reference: `CMakeLists.txt:975-987` (specs included in RELEASE_BUILD)
6. **translations/** - Translation files
- Required by: Qt6 translation system
- Reference: `CMakeLists.txt:975-987` (translations included in RELEASE_BUILD)
7. **external/** - External dependencies
- Required by: Third-party libraries
- Reference: `CMakeLists.txt:975-987` (external included in RELEASE_BUILD)
### Complete Module Set (R)
All modules in qt6-migrated-legatus:
**Included in Release (S = M ∪ (S \ M)):**
- TetraIF/
- Z/
- Lts/Common/
- cmake/
- include/
- src/
- tests/
- specs/
- translations/
- external/
**Excluded from Release (R \ S):**
- Lts/Tools/
- Lts/Application/
- Lts/DDS/
- Lts/Services/
- Lts/Proxies/
- Lts/Plugins/ (except ProjectDataManagement for generated headers)
- Lts/Viewer/
- Lts/Projects/
- Lts/LtsElevation/ (excluded in Lts/Common/CMakeLists.txt)
## CMake Configuration
### RELEASE_BUILD Option
```cmake
# CMakeLists.txt:975-987
option(RELEASE_BUILD "Build only release modules" OFF)
if(RELEASE_BUILD)
add_subdirectory(src)
add_subdirectory(TetraIF)
add_subdirectory(Z)
add_subdirectory(Lts/Common)
add_subdirectory(tests)
add_subdirectory(specs)
add_subdirectory(translations)
add_subdirectory(external)
add_subdirectory(cmake)
add_subdirectory(include)
else()
# Full development build with all modules
add_subdirectory(Lts)
# ... other development modules
endif()
```
### BUILD_RTI Option
```cmake
# Controls RTI Connext DDS dependent modules
option(BUILD_RTI "Build RTI Connext DDS dependent modules" OFF)
# Must be OFF for release (RTI not in release scope)
```
### NGL_ADD_SUBDIR_GUARDED Function
```cmake
# CMakeLists.txt:40-60
function(NGL_ADD_SUBDIR_GUARDED dir)
# Checks if subdirectory exists before adding
# Used with MIGRATE_MODULE variable for conditional inclusion
endfunction()
```
### Special Case: TetraIF
```cmake
# CMakeLists.txt:1003-1008
# TetraIF requires Lts/Plugins/ProjectDataManagement for generated headers
# This is a build-time dependency only, not included in release artifacts
```
## Build Targets
### RELEASE_GROUP3_TARGETS (from new_docker_build.sh)
```bash
RELEASE_GROUP3_TARGETS=(
"NGLLogger"
"nglapplication"
"ngldb"
"ngltools"
"nglwidgets"
"LtsCoordTrans"
"LtsDataModelInterfaces"
"LtsGeometry"
"LtsMapSymbol"
"LtsMath"
"LtsNetwork"
"LtsPluginManager"
"LtsPositioning"
"LtsProjection"
"LtsSerialization"
"LtsServiceInterfaces"
"LtsSignalHandling"
"LtsSqliteWrapper"
"LtsStandardPlugin"
"LtsStorage"
"LtsTestHelpers"
"LtsThreading"
"LtsTime"
"LtsUnitTests"
"LtsXml"
"CoPrtCnv"
"LogView"
"PrtCnv"
# ... 20+ targets total
)
```
### Excluded Targets
- `nglcomp_test` - Compression "Unknown error" in Qt6 (requires investigation)
- `grantlee_parser_smoke` - Requires ktexttemplate_defaulttags plugin (not in release scope)
## File References
### CMakeLists.txt
- **Lines 40-60**: NGL_ADD_SUBDIR_GUARDED function
- **Lines 975-987**: RELEASE_BUILD option and conditional subdirectory inclusion
- **Lines 1003-1008**: TetraIF special-case for ProjectDataManagement
### Lts/CMakeLists.txt
- **Lines 14-25**: RELEASE_BUILD conditional excluding non-release submodules
### Lts/Common/CMakeLists.txt
- **Lines 15-18**: LtsElevation exclusion (depends on Lts/Viewer/SituationMap)
### Z/src/CMakeLists.txt
- Subdirectory list: ngldb, tcpserver, QtSingleApplication, WMS_Interface, nglapplication, nglcompression, nglsettings, ngltranslator, ngltools, nglwidgets, NGLLogger
### TetraIF/LogView/CMakeLists.txt
- Links to: Qt6::Core, Qt6::Gui, Qt6::Network, CoPrtCnv, nglwidgets, NGLLogger, nglapplication, ngltools
### new_docker_build.sh
- **Line 740**: `RELEASE_BUILD="${RELEASE_BUILD:-ON}"`
- **Line 1260**: Conditional target selection based on RELEASE_BUILD
- **Line 1435**: CMake configuration passes RELEASE_BUILD flag
- **Line 1594**: RELEASE_BUILD exported to container
## Validation Requirements
1. **CMake Configuration**: Must configure with `-DRELEASE_BUILD=ON -DBUILD_RTI=OFF`
2. **Build**: Must complete without errors for all targets in RELEASE_GROUP3_TARGETS
3. **Tests**: CTest must pass for all release module tests
4. **Docker Build**: Must use `legatus-qt6:1.0` image with `--build-prebuilt-image`
5. **RPM/DEB Packaging**: Must only include release module artifacts
## Packaging Strategy
**Script-based filtering (not physical file removal):**
The release scope is enforced at package build time, not by removing files from repositories. This approach:
- Preserves full source history and development context in repositories
- Allows the same source tree to build both release and development packages
- Uses filtering logic in the package builder to include only release scope files
### Implementation
**rpmbuild/make_rpm_ubuntu26.py:**
- Added `--release_scope` flag to filter source files during DEB package creation
- `copy_src_dir_to_dest_dir()` function filters to release scope paths:
- TetraIF/
- Z/src/
- Lts/Common/
- CMakeLists.txt, cmake/, tests/, specs/, include/, translations/, external/
- Supporting files: .gitignore, .envrc, doxygen/, src/
**jenkins-ci-rme/jenkins_builder_ubuntu26.sh:**
- Passes `--release_scope` flag to make_rpm_ubuntu26.py
- Works in conjunction with `-DRELEASE_BUILD=ON` CMake flag
**Benefits:**
- No file deletion required in repositories
- Reversible and auditable through script changes
- Single source tree supports multiple build configurations
- Clear separation between source control and release artifacts
## Commit Policy
All commits must:
- Be signed with SSH key (gpg.format=ssh, gpg.program=gpg)
- Include Co-authored-by trailer: `Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>`
- Follow conventional commit format
- Be made on branch `story/release-at-16-oct-2026`
## Repositories
1. **qt-migration-legatus** - Main source code
2. **jenkins-ci-rme** - CI/CD pipeline configuration
3. **rpmbuild** - Package build scripts
All repositories must be on branch `story/release-at-16-oct-2026`.
@@ -154,12 +154,11 @@ Vorgehen:
## Jenkins-/RPM-Anforderungen
Die Jenkins-Pipeline in `./jenkins-ci-rme` muss für das Release:
Die Jenkins-Pipeline in `./jenkins-ci-rme/release-16-10-2026.sh` muss für das Release:
- den Release-Scope auschecken oder verwenden
- `./new_docker_build.sh` für Build und Tests ausführen
- CTest-Fehler als Pipeline-Fehler behandeln
- RPM-Erzeugung über `./rpmbuild/make_rpm_ubuntu26.py` auslösen
- den Release-Scope verwenden
- in einem Dockerimage, das mit `./new_docker_build.sh --build-prebuilt-image --docker-image legatus-qt6:1.0` erzeugt wurde, für Build und Tests ausgefuehrt werden
- RPM-Erzeugung über `./rpmbuild/make_rpm_ubuntu26.py` im Dockercontainer auslösen
- ausschließlich Module aus `S` bauen, testen und paketieren
- keine nicht freigegebenen Module, Artefakte oder Tests in RPMs aufnehmen
- reproduzierbare Ubuntu-26-RPMs erzeugen
@@ -251,7 +250,7 @@ CTest muss als Teil dieser Validierung laufen. Falls `new_docker_build.sh` CTest
Zusätzlich Jenkins/RPM-Pfad prüfen:
- Pipeline-Konfiguration in `./jenkins-ci-rme`
- Pipeline-Konfiguration in `./jenkins-ci-rme/release-16-10-2026.sh`
- RPM-Erzeugung mit `./rpmbuild/make_rpm_ubuntu26.py`
Wenn eine Validierung wegen Umgebung, Zugang, Lizenz, Docker oder fehlender Infrastruktur nicht möglich ist, klassifiziere den Blocker exakt und berichte, welche Projektvalidierung dennoch durchgeführt wurde.