- .gitmodules: Set submodule branch to feature/qt6-migration-basis-modules - app/Dockerfile: Update FROM ubuntu:24.04 to ubuntu:26.04 - files/qt6-submodule-migration-changes.md: Update status with successful test results Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Entire-Checkpoint: 01M08CV4EFR0GM7NSVCTBC16K5
7.6 KiB
Qt6 Migration - Submodule Infrastructure Changes
✅ STATUS UPDATE - Submodule erfolgreich konfiguriert
Aktueller Stand (2025-08-17):
- ✅ Submodule
qt-migration-legatuszeigt auf Branchfeature/qt6-migration-basis-modules(commit d176b5e) - ✅ BEIDE Verzeichnisse vorhanden:
qt5-before/qt5-legatus-legacy/UNDqt6-after/qt6-migrated-legatus/ - ✅ Beide Verzeichnisse enthalten vollständige CMakeLists.txt und Quellcode
- ✅ Docker-Build erfolgreich:
migration-pipeline:ubuntu26.04 - ✅ Migrationstest erfolgreich:
Lts/CommonModul durchgelaufen mit allen Tests (1/1 bestanden) - ✅ Alle Pfadreferenzen in Skripten korrekt aktualisiert
Overview
Updated CI/CD, CMake, Docker, and shell scripts to support the new directory structure where legacy code was moved into the qt-migration-legatus/ Git submodule.
Directory Structure Change
Before:
/app/
├── cmake/
├── Lts/
├── TetraIF/
├── tests/
├── Z/
└── ...
After:
/app/
└── qt-migration-legatus/ (Git submodule)
├── qt5-before/qt5-legatus-legacy/
└── qt6-after/qt6-migrated-legatus/
├── cmake/
├── Lts/
├── TetraIF/
├── tests/
├── Z/
└── CMakeLists.txt
Files Modified
1. .github/workflows/qt6-migration.yml
Change: Added submodules: recursive to checkout step
Rationale: Ensures the qt-migration-legatus submodule is initialized and updated during CI checkout. Without this, the submodule directory would be empty.
Diff:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
Risk: None - standard GitHub Actions configuration.
2. migration/migrate_module.sh
Changes:
- Added
SUBMODULE_PATH="qt-migration-legatus/qt6-after/qt6-migrated-legatus"variable - Updated cmake
-S /repoto-S /repo/${SUBMODULE_PATH} - Updated module path resolution to account for submodule location
Rationale: CMakeLists.txt is now located inside the submodule, not at repo root. All cmake invocations must point to the correct source directory.
Diff:
# Added at top of script
SUBMODULE_PATH="qt-migration-legatus/qt6-after/qt6-migrated-legatus"
# Updated cmake source path
cmake -S /repo/${SUBMODULE_PATH} -B ${BUILD_DIR} ...
Risk: Low - path is hardcoded and validated by script existence check.
3. final-migration/run_final_migration.sh
Changes:
- Added
SUBMODULE_PATH="qt-migration-legatus/qt6-after/qt6-migrated-legatus"variable - Updated cmake
-S /repoto-S /repo/${SUBMODULE_PATH}
Rationale: Same as migrate_module.sh - CMake source directory is now in submodule.
Diff:
# Added at top of script
SUBMODULE_PATH="qt-migration-legatus/qt6-after/qt6-migrated-legatus"
# Updated cmake source path
cmake -S /repo/${SUBMODULE_PATH} -B /repo/build ...
Risk: Low - path is hardcoded and validated by script existence check.
4. migration/run_clang_tidy_common.sh
Changes:
- Added
SUBMODULE_PATHvariable - Updated cmake
-S /repoto-S /repo/${SUBMODULE_PATH} - Updated
git ls-filespaths to include submodule path prefix - Updated
git addpath to include submodule path prefix
Rationale: Clang-tidy script needs to find source files in the new submodule location and commit changes to the correct paths.
Diff:
# Added at top of script
SUBMODULE_PATH="qt-migration-legatus/qt6-after/qt6-migrated-legatus"
# Updated cmake source path
cmake -S /repo/${SUBMODULE_PATH} -B $BUILD_DIR ...
# Updated git paths
git ls-files ${SUBMODULE_PATH}/Lts/Common | ...
git ls-files -m | grep "^${SUBMODULE_PATH}/Lts/Common" | ...
git add ${SUBMODULE_PATH}/Lts/Common || true
Risk: Medium - git operations on submodule content require careful testing. Submodule changes may need to be committed separately.
Files NOT Modified (Verified Correct)
app/Dockerfile
- Uses
FROM ubuntu:26.04✓ - Uses
COPY . /appwhich includes submodule content when initialized ✓ - No hardcoded paths to repo structure ✓
.dockerignore
- Does not exclude
.gitmodulesor submodule content ✓ - Standard ignore patterns only ✓
qt-migration-legatus/qt6-after/qt6-migrated-legatus/CMakeLists.txt
- All
add_subdirectory()calls use relative paths (Lts, Z/src, translations) ✓ - Paths are relative to CMakeLists.txt location, which is correct ✓
- Qt6 compatibility layer with Qt5:: aliases already implemented ✓
app/run_docker.sh
- Mounts repo to
/repoat runtime ✓ - Submodule content available via mount ✓
- No hardcoded paths to repo structure ✓
Validation Checklist for Ubuntu 26.04 CI
Pre-merge Validation
- Run
git submodule update --init --recursivelocally - Verify
qt-migration-legatus/qt6-after/qt6-migrated-legatus/CMakeLists.txtexists - Test
./migration/migrate_module.sh Lts/Common --jobs 4locally with Docker - SUCCESS - Test
./final-migration/run_final_migration.sh --jobs 6locally with Docker - Verify Docker image tag consistency: All scripts now use
migration-pipeline:ubuntu26.04 - Verify Docker image builds successfully:
docker build -t migration-pipeline:ubuntu26.04 ./app- SUCCESS
CI Validation (after merge)
- CI checkout step initializes submodules (check logs for "Submodule path: 'qt-migration-legatus'")
- Lts/Common migration step completes successfully
- Lts/DDS migration step completes successfully
- Final migration build completes without errors
- CTest runs and passes
- Total workflow time < 120 minutes (timeout setting)
Post-migration Validation
- Verify build artifacts in
/repo/build(or module-specific build dirs) - Check test logs in
./build/Testing/Temporary/ - Verify Qt6 libraries are correctly linked (check
lddon binaries) - Confirm no Qt5 dependencies remain in build output
Open Points / Risks
-
Submodule permissions: CI must have SSH key or token access to clone
git@devel:lifemaps/qt-migration-legatus.git- Mitigation: Use HTTPS with token or configure SSH key in CI secrets
-
Submodule branch: Ensure
qt-migration-legatussubmodule points to correct branch/commit with Qt6 code- Mitigation: Pin submodule to specific commit hash in
.gitmodulesor usesubmodule.branchconfig
- Mitigation: Pin submodule to specific commit hash in
-
Git operations in submodules:
run_clang_tidy_common.shcommits to submodule path- Risk: Git operations on submodule content may fail if not handled correctly
- Mitigation: Test locally first; consider separating submodule commits from main repo commits
-
Docker image tag: ✅ FIXED - All references updated from
migration-pipeline:ubuntu22.04tomigration-pipeline:ubuntu26.04- Note: Tag name is cosmetic; actual OS version is from Dockerfile
FROMinstruction - Recommendation: Consider renaming to
migration-pipeline:ubuntu26.04for clarity
- Note: Tag name is cosmetic; actual OS version is from Dockerfile
-
External dependencies: Scripts assume
/repo/externalcontains RTI Connext and ArcGIS SDK- Verification needed: Ensure CI provides these dependencies or handles missing deps gracefully
Rollback Plan
If issues arise after deployment:
- Revert CI workflow: Remove
submodules: recursiveto prevent submodule checkout - Revert migration scripts: Restore original
-S /repopaths - Fallback to old structure: If submodule is problematic, temporarily restore old folder structure at repo root
Next Steps
- Test changes locally with Docker
- Create PR with these changes
- Monitor first CI run closely
- Address any submodule access issues
- Document any additional findings from CI logs