240 lines
10 KiB
Markdown
240 lines
10 KiB
Markdown
Du arbeitest in einem bestehenden C++/Qt-Projekt, das von Qt5 nach Qt6 migriert wird. Deine Aufgabe ist, die Build- und CI/CD-Infrastruktur technisch sauber und robust an eine neue Verzeichnisstruktur anzupassen. Fokus: Linux/Ubuntu 26.04, CMake, Dockerfile, Shell-Skripte und CI-Pipeline.
|
|
|
|
## Ausgangslage
|
|
|
|
Die Repository-/Build-Struktur wurde geändert:
|
|
|
|
- Die bisherigen Folder und Files:
|
|
```
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 17 17:03 cmake/
|
|
-rwxrwxrwx 1 torsten torsten 15357 Jul 22 12:32 CMakeLists.txt*
|
|
-rw-rw-rw- 1 torsten torsten 92 Jul 14 13:55 CTestCustom.ctest
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 14 14:12 doxygen/
|
|
-rw-rw-rw- 1 torsten torsten 0 Aug 13 19:33 .gitkeep
|
|
drwxrwxrwx 8 torsten torsten 4096 Jul 21 15:43 Lts/
|
|
-rw-rw-rw- 1 torsten torsten 14908 Jul 21 15:45 lts-cc.conf
|
|
drwxrwxrwx 3 torsten torsten 4096 Jul 18 15:22 specs/
|
|
drwxrwxrwx 4 root root 4096 Jul 14 21:53 strix_runs/
|
|
drwxrwxrwx 4 torsten torsten 4096 Aug 14 11:46 tests/
|
|
drwxrwxrwx 5 torsten torsten 4096 Jul 14 12:14 TetraIF/
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 14 14:45 translations/
|
|
drwxrwxrwx 3 torsten torsten 4096 Jul 14 23:50 Z/
|
|
```
|
|
wurden nach `qt-migration-legatus/qt6-after/qt6-migrated-legatus/` verschoben.
|
|
- `qt-migration-legatus/` ist jetzt ein **Git-Submodule**.
|
|
- Innerhalb von `qt-migration-legatus/` gibt es zusätzlich:
|
|
- `qt5-before` → enthält die bisherigen Qt5-Eingabefolder, die früher manuell schrittweise ins Projekt kopiert wurden.
|
|
- `qt6-after` → enthält die bisherigen Ergebnisse bzw. Zielstände der Qt6-Portierung.
|
|
|
|
## Ziel
|
|
|
|
Passe alle relevanten Build-, CI- und Container-Pfade auf die neue Struktur an, sodass der Build unter Ubuntu 26.04 reproduzierbar, robust und wartbar funktioniert.
|
|
|
|
## Technischer Scope
|
|
|
|
Untersuche und aktualisiere ausschließlich technische Build-/Infra-Aspekte, insbesondere:
|
|
|
|
- GitHub Actions / GitLab CI / andere Linux-CI-Konfigurationen
|
|
- Shell-Skripte (`.sh`)
|
|
- `Dockerfile`
|
|
- `.dockerignore`
|
|
- CMake-Dateien:
|
|
- `CMakeLists.txt`
|
|
- `*.cmake`
|
|
- Toolchain-/Preset-Dateien, falls vorhanden
|
|
- Qt-bezogene Ressourcen-/Include-/Source-/MOC-/UIC-/RCC-Pfade
|
|
- Copy-/Sync-/Stage-/Artifact-Schritte
|
|
- Submodule-Checkout und Build-Kontext
|
|
- Relative Pfade im Repo, im Build-Verzeichnis und im Container
|
|
|
|
Nicht im Scope:
|
|
- PowerShell
|
|
- Windows-spezifische Anpassungen
|
|
- Fachliche/refaktorierende Codeänderungen außerhalb buildrelevanter Pfade
|
|
- Unnötige Modernisierung jenseits der Pfad-/Infra-Migration
|
|
|
|
## Konkrete Aufgaben
|
|
|
|
1. Suche systematisch nach allen Referenzen auf die alten Folder
|
|
```
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 17 17:03 cmake/
|
|
-rwxrwxrwx 1 torsten torsten 15357 Jul 22 12:32 CMakeLists.txt*
|
|
-rw-rw-rw- 1 torsten torsten 92 Jul 14 13:55 CTestCustom.ctest
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 14 14:12 doxygen/
|
|
-rw-rw-rw- 1 torsten torsten 0 Aug 13 19:33 .gitkeep
|
|
drwxrwxrwx 8 torsten torsten 4096 Jul 21 15:43 Lts/
|
|
-rw-rw-rw- 1 torsten torsten 14908 Jul 21 15:45 lts-cc.conf
|
|
drwxrwxrwx 3 torsten torsten 4096 Jul 18 15:22 specs/
|
|
drwxrwxrwx 4 root root 4096 Jul 14 21:53 strix_runs/
|
|
drwxrwxrwx 4 torsten torsten 4096 Aug 14 11:46 tests/
|
|
drwxrwxrwx 5 torsten torsten 4096 Jul 14 12:14 TetraIF/
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 14 14:45 translations/
|
|
drwxrwxrwx 3 torsten torsten 4096 Jul 14 23:50 Z/
|
|
```
|
|
|
|
in:
|
|
- CI-Konfigurationen
|
|
- CMake-Dateien
|
|
- Dockerfile
|
|
- Shell-Skripten
|
|
- Copy-/Install-/Packaging-Schritten
|
|
|
|
2. Ermittle für jede Referenz die korrekte neue Zielstruktur:
|
|
- `qt-migration-legatus/...`
|
|
- `qt-migration-legatus/qt5-before/...`
|
|
- `qt-migration-legatus/qt6-after/...`
|
|
|
|
3. Stelle sicher, dass das Git-Submodule `qt-migration-legatus/` in allen relevanten Build-Kontexten korrekt berücksichtigt wird:
|
|
- lokaler CI-Checkout
|
|
- Container-Build-Kontext
|
|
- reproduzierbarer Checkout in der Pipeline
|
|
|
|
4. Aktualisiere Build-Logik und Pfade so, dass:
|
|
- keine impliziten Annahmen über alte Repo-Layouts bestehen,
|
|
- keine fragilen `../..`-Konstruktionen ohne Not bestehen bleiben,
|
|
- Pfade zentralisiert oder klar abgeleitet werden, wo sinnvoll.
|
|
|
|
5. Prüfe speziell für CMake:
|
|
- `add_subdirectory(...)`
|
|
- `include(...)`
|
|
- `target_include_directories(...)`
|
|
- `target_sources(...)`
|
|
- `configure_file(...)`
|
|
- `file(COPY ...)`, `file(GLOB ...)`, `install(...)`
|
|
- Pfade zu `.ui`, `.qrc`, Headern, Quellen und generierten Assets
|
|
- Variablen, die noch auf alte Layouts zeigen
|
|
|
|
6. Prüfe speziell für `app/Dockerfile`:
|
|
- `COPY`
|
|
- `ADD`
|
|
- `WORKDIR`
|
|
- Build-Argumente / Umgebungsvariablen
|
|
- Annahmen über vorhandene Verzeichnisse im Build-Kontext
|
|
- Submodule-Verfügbarkeit im Container-Build
|
|
- ggf. `.dockerignore`, falls dadurch `qt-migration-legatus/` oder relevante Unterordner ausgeschlossen werden
|
|
|
|
7. Prüfe speziell für CI/CD:
|
|
- Submodule-Checkout/Init/Update
|
|
- Cache-Pfade
|
|
- Artifact-Pfade
|
|
- Test-/Packaging-/Deploy-Stages mit alten Pfadannahmen
|
|
- Script-Schritte mit Copy-/Move-/Sync-Operationen
|
|
- Container-Build-Aufrufe mit korrektem Context
|
|
|
|
8. Trenne logisch zwischen:
|
|
- Qt5-Altmaterial unter `qt-migration-legatus/qt5-before`
|
|
- Qt6-Portierungsstand unter `qt-migration-legatus/qt6-after`
|
|
|
|
Diese beiden Bereiche dürfen nicht versehentlich vermischt werden. Wenn die aktuelle Pipeline beides nutzt, dokumentiere die Entscheidung explizit.
|
|
|
|
## Technische Qualitätsanforderungen
|
|
|
|
- Zielplattform ist **Ubuntu 26.04**.
|
|
- Bevorzuge POSIX-nahe Shell-Lösungen (`bash`), keine PowerShell.
|
|
- Änderungen sollen **minimal-invasiv**, aber **strukturell robust** sein.
|
|
- Keine stillen Magic Paths.
|
|
- Wo sinnvoll:
|
|
- zentrale Pfadvariablen in CMake,
|
|
- klare ENV-/ARG-Namen im Dockerfile,
|
|
- explizite Submodule-Schritte in CI.
|
|
- Keine unnötigen Refactorings ohne direkten Nutzen für die Migration.
|
|
- Bestehendes Verhalten möglichst erhalten.
|
|
- Wenn Annahmen nötig sind, markiere sie klar.
|
|
|
|
## Erwartete Ausgabe
|
|
|
|
Liefere in dieser Reihenfolge:
|
|
|
|
1. **Analyse**
|
|
- Welche Dateien/Build-Stellen noch auf
|
|
```
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 17 17:03 cmake/
|
|
-rwxrwxrwx 1 torsten torsten 15357 Jul 22 12:32 CMakeLists.txt*
|
|
-rw-rw-rw- 1 torsten torsten 92 Jul 14 13:55 CTestCustom.ctest
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 14 14:12 doxygen/
|
|
-rw-rw-rw- 1 torsten torsten 0 Aug 13 19:33 .gitkeep
|
|
drwxrwxrwx 8 torsten torsten 4096 Jul 21 15:43 Lts/
|
|
-rw-rw-rw- 1 torsten torsten 14908 Jul 21 15:45 lts-cc.conf
|
|
drwxrwxrwx 3 torsten torsten 4096 Jul 18 15:22 specs/
|
|
drwxrwxrwx 4 root root 4096 Jul 14 21:53 strix_runs/
|
|
drwxrwxrwx 4 torsten torsten 4096 Aug 14 11:46 tests/
|
|
drwxrwxrwx 5 torsten torsten 4096 Jul 14 12:14 TetraIF/
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 14 14:45 translations/
|
|
drwxrwxrwx 3 torsten torsten 4096 Jul 14 23:50 Z/
|
|
```
|
|
verweisen
|
|
- Welche Stellen wegen des neuen Submodules `qt-migration-legatus/` kritisch sind
|
|
- Welche Stellen speziell für Qt5-/Qt6-Trennung relevant sind
|
|
|
|
2. **Konkrete Änderungen**
|
|
- als präzise Diffs pro Datei
|
|
|
|
3. **Begründung**
|
|
- kurz und technisch pro wesentlicher Änderung
|
|
|
|
4. **Risiken / offene Punkte**
|
|
- z. B. unklare Zuordnung zwischen `qt5-before` und `qt6-after`
|
|
- mögliche Probleme im Docker-Build-Kontext
|
|
- Pipeline-Schritte, die vom Runner-Layout abhängen
|
|
|
|
5. **Validierung**
|
|
- konkrete Checks, z. B.:
|
|
- Submodule erfolgreich ausgecheckt
|
|
- CMake configure/build erfolgreich
|
|
- Docker build erfolgreich
|
|
- relevante Copy-/Artifact-Pfade vorhanden
|
|
- keine Restreferenzen auf
|
|
```
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 17 17:03 cmake/
|
|
-rwxrwxrwx 1 torsten torsten 15357 Jul 22 12:32 CMakeLists.txt*
|
|
-rw-rw-rw- 1 torsten torsten 92 Jul 14 13:55 CTestCustom.ctest
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 14 14:12 doxygen/
|
|
-rw-rw-rw- 1 torsten torsten 0 Aug 13 19:33 .gitkeep
|
|
drwxrwxrwx 8 torsten torsten 4096 Jul 21 15:43 Lts/
|
|
-rw-rw-rw- 1 torsten torsten 14908 Jul 21 15:45 lts-cc.conf
|
|
drwxrwxrwx 3 torsten torsten 4096 Jul 18 15:22 specs/
|
|
drwxrwxrwx 4 root root 4096 Jul 14 21:53 strix_runs/
|
|
drwxrwxrwx 4 torsten torsten 4096 Aug 14 11:46 tests/
|
|
drwxrwxrwx 5 torsten torsten 4096 Jul 14 12:14 TetraIF/
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 14 14:45 translations/
|
|
drwxrwxrwx 3 torsten torsten 4096 Jul 14 23:50 Z/
|
|
```
|
|
|
|
## Arbeitsweise
|
|
|
|
Gehe in dieser Reihenfolge vor:
|
|
|
|
1. Finde alle Referenzen auf
|
|
```
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 17 17:03 cmake/
|
|
-rwxrwxrwx 1 torsten torsten 15357 Jul 22 12:32 CMakeLists.txt*
|
|
-rw-rw-rw- 1 torsten torsten 92 Jul 14 13:55 CTestCustom.ctest
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 14 14:12 doxygen/
|
|
-rw-rw-rw- 1 torsten torsten 0 Aug 13 19:33 .gitkeep
|
|
drwxrwxrwx 8 torsten torsten 4096 Jul 21 15:43 Lts/
|
|
-rw-rw-rw- 1 torsten torsten 14908 Jul 21 15:45 lts-cc.conf
|
|
drwxrwxrwx 3 torsten torsten 4096 Jul 18 15:22 specs/
|
|
drwxrwxrwx 4 root root 4096 Jul 14 21:53 strix_runs/
|
|
drwxrwxrwx 4 torsten torsten 4096 Aug 14 11:46 tests/
|
|
drwxrwxrwx 5 torsten torsten 4096 Jul 14 12:14 TetraIF/
|
|
drwxrwxrwx 2 torsten torsten 4096 Jul 14 14:45 translations/
|
|
drwxrwxrwx 3 torsten torsten 4096 Jul 14 23:50 Z/
|
|
```
|
|
|
|
2. Identifiziere alle Build-/CI-/Docker-Stellen, die `D` als Submodule korrekt einbinden müssen.
|
|
3. Leite pro Fundstelle den neuen Zielpfad ab.
|
|
4. Schlage minimal robuste Änderungen vor.
|
|
5. Liefere die Änderungen als Diffs.
|
|
6. Formuliere am Ende eine kurze Validierungs-Checkliste für Ubuntu-26.04-CI.
|
|
|
|
## Zusätzliche Vorgaben
|
|
|
|
- Wenn du alte Pfade durch neue ersetzt, tue das nicht blind global, sondern kontextabhängig.
|
|
- Wenn CMake- oder Dockerfile-Logik bisher auf manuell kopierte Inhalte ausgelegt ist, passe sie so an, dass die neue Struktur explizit und nachvollziehbar verwendet wird.
|
|
- Wenn ein Build-Schritt semantisch eher auf „Eingabe vor Portierung“ verweist, nutze bevorzugt `qt-migration-legatus/qt5-before`.
|
|
- Wenn ein Build-Schritt auf bereits portierte Qt6-Artefakte oder Zielstände verweist, nutze bevorzugt `qt-migration-legatus/qt6-after`.
|
|
- Wenn die vorhandene Logik diese Entscheidung nicht eindeutig macht, dokumentiere die Annahme direkt bei der Änderung.
|
|
- Ergänze nur dort knappe Kommentare, wo die neue Struktur sonst schwer verständlich wäre.
|
|
|
|
Beginne mit einer vollständigen Bestandsaufnahme aller relevanten Pfadreferenzen und liefere danach die minimalen robusten Änderungen für CI/CD, CMake und Dockerfile unter Ubuntu 26.04.
|