11 KiB
Copilot CLI Prompt: Erstes Qt6-Release der freigegebenen Module
Dieser Prompt ist verbindlicher Task-Kontext. Arbeite autonom, minimal, reproduzierbar und ohne opportunistische Änderungen. Lies vor jeder Änderung ./prompts/commit-policy.prompt.md; strengere Repository-Regeln gelten zusätzlich.
1. Ziel und Release-Charakter
Erstelle das erste Release der bereits nach Qt6 migrierten Module TetraIF, Z und Lts/Common. Dies ist kein erneuter Qt5→Qt6-Migrationslauf. Code darf nur geändert werden, wenn dies unmittelbar für Build, Tests, Installation oder Packaging des Release-Scope erforderlich ist.
Dieses Release ist ausdrücklich ein Entwickler- und Weiterentwicklungsrelease der Qt6-Migration, kein reines Runtime- oder Endkundenrelease. Deshalb gehören die Release-relevanten CTests ausdrücklich zum Release: sowohl ihre ausführbaren Binaries als auch ihre C++-Quellen müssen ausgeliefert werden. CTests sind trotz des Begriffs „Release Build“ zu bauen, auszuführen und zu paketieren.
Das Release muss als eigene, reproduzierbare DEB-Pakete ausliefern:
- Binaries und Bibliotheken der freigegebenen Module;
- migrierte Qt6-C++-Quellen ausschließlich aus
S; - ausführbare Release-relevante CTest-Programme, Testdaten und deren C++-Quellen;
- benötigte Dockerfiles, Build-, CMake-, CTest-, Jenkins- und DEB-Packaging-Skripte der reproduzierbaren Build-Pipeline.
Nicht zum Release gehörende Workspace-Dateien werden physisch nicht gelöscht. Sie bleiben im Repository/Working Tree erhalten, dürfen aber durch explizite Allowlists und Manifeste nicht in DEBs oder andere Release-Artefakte gelangen.
2. Begriffe und Scope
Ermittle vor jeder Änderung aus realen Projektdateien:
R: vollständige Menge aller Module unter./qt-migration-legatus/qt6-after/qt6-migrated-legatus;M = {TetraIF, Z, Lts/Common}: explizit freigegebene Module;S: kleinstes ModulsetMplus zwingend notwendige direkte/transitive Abhängigkeiten ausR;R \ S: ausgeschlossene Module.
Leite S ausschließlich aus realen CMakeLists.txt, add_subdirectory, Targets, target_link_libraries, Includes, Generator-Konfigurationen, Tests, Install- und Packaging-Regeln ab. Dokumentiere jede Abhängigkeit in S \ M mit Modul, benötigendem Modul, Grund und konkreter Dateireferenz.
Verbindliche Interpretation der Ausschlussregel
Die Aussage „keine nicht freigegebenen Module bauen, testen, installieren oder paketieren“ bezieht sich nur auf Module aus R \ S. Sie verbietet nicht die Tests des Entwicklerreleases. Im Gegenteil:
- Release-relevante CTests für
Mund nachgewiesene Abhängigkeiten ausS \ Mmüssen gebaut werden; - diese CTests müssen per CTest ausgeführt werden;
- ihre Test-Binaries müssen in
qt6-release-ctest-runtimeenthalten sein; - ihre C++-Quellen müssen in
qt6-release-ctest-sourcesenthalten sein; - die zugehörigen Testziele dürfen nicht wegen des Release-Charakters deaktiviert, entfernt, ignoriert oder aus CTest entfernt werden.
Verboten bleiben nur Tests, Targets, Quellen, Artefakte und Module aus R \ S sowie nicht nachgewiesene Inhalte außerhalb des Release-Scope.
Bei Unklarheiten keine Abhängigkeit raten. Unklarheit anhand realer Dateien auflösen; falls dies nicht möglich ist, Release nicht als erfolgreich melden und den Blocker exakt dokumentieren.
3. Repository-, Branch- und Pfadregeln
Arbeite auf dem bestehenden Branch story/release-at-16-oct-2026; erstelle keinen neuen Branch, außer dies ist technisch unvermeidbar und begründet. Ermittle zuerst alle Repositories, Remotes, Branches, Working Trees und Submodule und ordne jede Datei dem zuständigen Repository zu.
Aus ./qt-migration-legatus/qt6-after/qt6-migrated-legatus dürfen nur S sowie unmittelbar erforderliche gemeinsame Build-/Test-/Packaging-Dateien verwendet werden, insbesondere:
TetraIF/,Z/,Lts/Common/;CMakeLists.txt,cmake/,tests/,specs/,include/;new_docker_build.sh;- tatsächlich benötigte Dockerfiles und Skripte.
Aus der Pipeline dürfen nur für diesen Release erforderliche Dateien verwendet werden, insbesondere jenkins-ci-rme/, rpmbuild/make_rpm_ubuntu26.py soweit erforderlich sowie notwendige DEB-Packaging-Dateien, Manifeste und Dockerfiles.
4. Build, CTest und Docker
Analysiere und passe ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh minimal an. Der Docker-/CI-Pfad muss:
- benötigte Systempakete reproduzierbar im Image installieren;
- ausschließlich
Skonfigurieren und bauen; - echte Generator-Flows im Build-Tree ausführen;
- alle Release-Targets einschließlich der zugehörigen CTest-Targets bauen;
- alle Tests aus
./testsausführen, dieM,S \ Moder erforderliche zentrale CMake-/Generator-Logik betreffen; - bei Build-, Link- oder Testfehlern mit Exit-Code ungleich
0abbrechen; - keine Host-Pfade oder Entwicklerannahmen voraussetzen.
Tests für R \ S sind ausgeschlossen. Tests für M und nachgewiesene Tests für S \ M sind Pflichtbestandteil des Entwicklerreleases. Generierte Dateien bleiben im Build-Tree und werden nicht als Quellen eingecheckt.
Mindestens ausführen, sofern vorhanden:
cd ./qt-migration-legatus/qt6-after/qt6-migrated-legatus
./new_docker_build.sh
5. Getrennte DEB-Pakete
Ein einziges Sammel-DEB ist nicht zulässig. Erzeuge mindestens diese fünf getrennten Pakete mit eigenen Paketwurzeln, eigenen DEBIAN/control-Dateien, eigenen Allowlists und Manifesten:
-
qt6-release-runtime-<version>.deb- Runtime-Binaries und Bibliotheken aus
S; - keine C++-Quellen und keine CTest-Quellen.
- Runtime-Binaries und Bibliotheken aus
-
qt6-release-sources-<version>.deb- migrierte Qt6-C++-Quellen und erforderliche Header der Module aus
S; - keine Qt6-Quellen aus
R \ Sund keine generierten Build-Tree-Dateien.
- migrierte Qt6-C++-Quellen und erforderliche Header der Module aus
-
qt6-release-ctest-runtime-<version>.deb- alle ausführbaren Release-relevanten CTest-Programme für
Mund nachgewiesene Teile vonS \ M; - erforderliche Laufzeitdateien und Testdaten;
- keine CTest-Binaries aus
R \ S.
- alle ausführbaren Release-relevanten CTest-Programme für
-
qt6-release-ctest-sources-<version>.deb- C++-Quellen, Header und Testkonfiguration der enthaltenen Release-relevanten CTests;
- keine Testquellen aus
R \ S.
-
qt6-release-build-pipeline-<version>.deb- erforderliche Dockerfiles,
new_docker_build.sh, CMake-/CTest-/Jenkins-/DEB-Packaging-Skripte, Konfigurationen und Manifeste; - keine nicht benötigten Repository-Dateien und keine Qt6-Quellen außerhalb von
S.
- erforderliche Dockerfiles,
Falls ein weiteres DEB technisch erforderlich ist, dokumentiere vorab Name, Inhalt, Zweck und konkrete Dateireferenzen.
5.1 Verbindliches Paketierungs-Kommando
Implementiere und validiere:
./new_docker_build.sh \
--build \
--test \
--package-debs \
--deb-output "${DEB_OUTPUT_DIR}"
Das Kommando muss den Scope validieren, S einschließlich der Pflicht-CTest-Targets bauen, alle Release-relevanten CTests ausführen, bei Fehlern abbrechen, die fünf DEBs erzeugen und deren tatsächlichen Inhalt gegen die Allowlists prüfen.
Erwartete Ausgaben:
${DEB_OUTPUT_DIR}/qt6-release-runtime-<version>.deb
${DEB_OUTPUT_DIR}/qt6-release-sources-<version>.deb
${DEB_OUTPUT_DIR}/qt6-release-ctest-runtime-<version>.deb
${DEB_OUTPUT_DIR}/qt6-release-ctest-sources-<version>.deb
${DEB_OUTPUT_DIR}/qt6-release-build-pipeline-<version>.deb
${DEB_OUTPUT_DIR}/manifests/*.manifest
5.2 Paketierungsregeln
- Keine unbeschränkten Verzeichnis-Globs verwenden.
- Dateien aus
R \ Sdürfen in keinem DEB enthalten sein. - Qt6-Modulquellen dürfen nur in
qt6-release-sourcesenthalten sein. - CTest-C++-Quellen dürfen nur in
qt6-release-ctest-sourcesenthalten sein. - CTest-Binaries dürfen nur in
qt6-release-ctest-runtimeenthalten sein. - Build-, Docker-, CI- und Packaging-Dateien dürfen nur in
qt6-release-build-pipelineenthalten sein. - Mehrfachzuordnungen sind nur bei technisch zwingender Notwendigkeit zulässig und zu begründen.
- Nicht benötigte Dateien werden nicht physisch gelöscht, aber zuverlässig aus allen DEBs ausgeschlossen.
- Temporäre Dateien, Logs, Host-Pfade und nicht deklarierte Build-Tree-Artefakte nicht aufnehmen.
Prüfe jedes DEB mindestens mit:
dpkg-deb --info "${deb_file}"
dpkg-deb --contents "${deb_file}"
dpkg-deb --control "${deb_file}" "${control_output_dir}"
Die automatisierte Prüfung muss außerdem bestätigen: gültige Metadaten, Pflichtinhalte vorhanden, Manifest entspricht exakt dem Paketinhalt, keine unerlaubten Überschneidungen, keine Inhalte aus R \ S, alle Pflicht-CTest-Binaries vorhanden und alle zugehörigen C++-Testquellen vorhanden.
6. Jenkins, RPM und Forward Declarations
Jenkins muss den Release-Scope verwenden, new_docker_build.sh --build --test --package-debs ... ausführen, CTest-Fehler als Pipeline-Fehler behandeln und die DEB-Erzeugung auslösen. Vorhandene RPM-Unterstützung darf den DEB-Release nicht ersetzen. make_rpm_ubuntu26.py nur im nachgewiesenen Umfang anpassen.
Forward Declarations dürfen nur aufgenommen werden, wenn sie nachweislich für Build oder Pflicht-CTest von S erforderlich sind. Dokumentiere Datei, Target und konkrete Referenz.
7. Scope-Audits
Vor Implementierung:
R,M,SundR \ Svollständig ermitteln und auflisten;- Repository-, Branch-, Remote-, Working-Tree- und Submodulestatus prüfen;
- Abhängigkeiten mit Dateireferenzen dokumentieren;
- geplante Dateien, Repository, Zweck und DEB-Zuordnung auflisten;
- sicherstellen, dass Pflicht-CTest-Binaries und C++-Testquellen eingeplant sind.
Vor Abschluss:
- Bestandsaufnahme und Audit wiederholen;
- tatsächliche DEB-Inhalte und Manifeste prüfen;
- bestätigen, dass
R \ Sweder gebaut, getestet, installiert noch paketiert wird; - bestätigen, dass CTests von
Mund nachgewiesene CTests vonS \ Mgebaut, ausgeführt und als Quellen und Binaries ausgeliefert werden; - keine Tests löschen, abschwächen, ignorieren oder wegen des Release-Begriffs ausschließen;
- Jenkins-, Docker-, CMake-, Installations- und Packaging-Regeln prüfen.
8. Finaler Bericht
Berichte kurz und faktisch:
- Status:
validiert,teilweise validiertoderblockiert; - Branch und Repositories/Submodule;
- vollständiges
R,M,SundR \ S; - jede Abhängigkeit aus
S \ Mmit Grund und Dateireferenz; - Vorher-/Nachher-Scope-Audit und geänderte Dateien;
- physisch beibehaltene, aber aus DEBs ausgeschlossene Dateien;
- ausgeführte Build-, CTest-, Jenkins- und DEB-Kommandos mit Ergebnis;
- erzeugte DEBs und deren Inhalte;
- ausgeführte und ausgelieferte CTests einschließlich Binaries und C++-Quellen;
- Bestätigung, dass keine Quellen oder Artefakte aus
R \ Senthalten sind; - verbleibende Blocker und Risiken.
Wenn die Validierung wegen Umgebung, Docker, Zugang, Lizenz, Projekt, Jenkins, DEB-Packaging oder Pfad nicht vollständig möglich ist, klassifiziere den Blocker exakt und behaupte keinen Erfolg.