diff --git a/RELEASE_SCOPE_AUDIT.md b/RELEASE_SCOPE_AUDIT.md new file mode 100644 index 000000000..451a5a094 --- /dev/null +++ b/RELEASE_SCOPE_AUDIT.md @@ -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`. \ No newline at end of file diff --git a/prompts/release-qt6-migrated-modules-first-release.prompt.md b/prompts/release-qt6-migrated-modules-first-release.prompt.md index 21b830150..e93a8080b 100644 --- a/prompts/release-qt6-migrated-modules-first-release.prompt.md +++ b/prompts/release-qt6-migrated-modules-first-release.prompt.md @@ -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.