Files
qt6-migration-pipeline/RELEASE_SCOPE_AUDIT.md
T
torstenandCopilot 08a10dd924 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
2026-10-09 12:48:48 +00:00

8.1 KiB
Raw Blame History

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

# 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

# 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

# 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

# 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)

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.