Files
qt6-migration-pipeline/RELEASE_SCOPE_AUDIT.md
T
2026-10-13 08:28:06 +00:00

282 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)
- 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`.