diff --git a/prompts/make-rpm-option.prompt.md b/prompts/make-rpm-option.prompt.md new file mode 100644 index 000000000..0ecba4051 --- /dev/null +++ b/prompts/make-rpm-option.prompt.md @@ -0,0 +1,159 @@ +Passe das Script + + ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh + +so an, dass es das Script + + ./jenkins-ci-rme/jenkins_builder_ubuntu26.sh + +innerhalb des von `new_docker_build.sh` gebauten bzw. verwendeten Docker-Images ausführt. + +Kontext: +- Script A: + ./qt-migration-legatus/qt6-after/qt6-migrated-legatus/new_docker_build.sh + +- Script B: + ./jenkins-ci-rme/jenkins_builder_ubuntu26.sh + +- Script C: + ./rpmbuild/make_rpm_ubuntu26.py + +- Script B ruft Script C auf, um RPM- und DEB-Pakete zu erzeugen. +- Das Docker-Image, das von Script A gebaut oder verwendet wird, soll alle notwendigen Tools enthalten, damit Script B und Script C erfolgreich laufen. +- Die erzeugten RPM-/DEB-Pakete sollen nach dem Docker-Lauf auf dem ausführenden Host verfügbar sein, z. B. über einen bind mount / Ausgabe-Mountpunkt. + +Gewünschte Änderungen: + +1. Neue Option in Script A hinzufügen + - Füge eine neue CLI-Option hinzu, z. B.: + + --run-jenkins-builder + + - Wenn diese Option gesetzt ist, soll Script A nach dem Docker-Image-Build bzw. beim Docker-Run das Script B innerhalb des Docker-Containers ausführen. + +2. Ausgabe-Mountpunkt hinzufügen + - Füge eine Option hinzu, z. B.: + + --package-output-dir + + - Dieser Pfad liegt auf dem Host. + - Der Pfad soll beim Docker-Run in den Container gemountet werden. + - Die von Script B/C erzeugten RPM-/DEB-Pakete sollen anschließend dort verfügbar sein. + - Falls kein Pfad angegeben wird, verwende einen sinnvollen Default, z. B.: + + ./packages-out + +3. Docker-Image erweitern + - Stelle sicher, dass im Docker-Image alle Tools installiert sind, die für Script B und C benötigt werden. + - Analysiere dazu: + - ./jenkins-ci-rme/jenkins_builder_ubuntu26.sh + - ./rpmbuild/make_rpm_ubuntu26.py + - ggf. vorhandene Dockerfiles oder Paketlisten + - Installiere fehlende Tools im Image, z. B. je nach Bedarf: + - python3 + - python3-pip + - rpm/rpmbuild + - debhelper + - dpkg-dev + - fakeroot + - build-essential + - git + - cmake + - ninja-build + - qt6-related packages + - sonstige tatsächlich benötigte Abhängigkeiten + +4. Docker-Ausführung + - Wenn `--run-jenkins-builder` gesetzt ist, soll Script A den Container so starten, dass: + - das Repository bzw. der relevante Workspace im Container verfügbar ist + - Script B im Container ausgeführt wird + - der Paket-Ausgabeordner vom Host in den Container gemountet wird + - am Ende die erzeugten `.rpm` und `.deb` Dateien auf dem Host sichtbar sind +Zusätzliche Anforderungen zu Umgebungsvariablen: + +Script A benötigt für den neuen Ablauf folgende Variablen: + + PROJECT LTS flavor: qatar | ahtc | guez (cmake -D_pname) + OS_VERSION Ubuntu version, e.g. 26.04 + LTS_VERSION Major.minor LTS version, e.g. 1.0 + GUEZ_MODE ON | OFF — cmake -DGUEZ_MODE + WORKSPACE Jenkins workspace path, normally set automatically by Jenkins + PROJECT_BASE_DIR Path used by make_rpm_ubuntu26.py as the source tree + BUILD_NUMBER Jenkins build number, used as release in DEB version + BUILD_TAG Jenkins build tag + +Für den Docker-Aufruf aus Script A sollen mindestens diese Werte gesetzt bzw. in den Container übergeben werden: + + PROJECT=guez + GUEZ_MODE=ON + PROJECT_BASE_DIR="${MIGRATE_PIPELINE_ROOT}/qt-migration-legatus/qt6-after/qt6-migrated-legatus" + +Die übrigen benötigten Variablen sollen robust bestimmt oder sinnvoll gesampelt werden, falls sie außerhalb von Jenkins nicht gesetzt sind: + + OS_VERSION: + - wenn möglich aus dem Docker-Image bzw. Container bestimmen, z. B. über /etc/os-release + - erwarteter Wert für Ubuntu 26.04: 26.04 + + LTS_VERSION: + - falls nicht gesetzt, sinnvollen Default verwenden, z. B. 1.0 + - optional als CLI-Option überschreibbar machen + + WORKSPACE: + - falls nicht gesetzt, auf den Repository-/Arbeitsverzeichnis-Pfad im Container setzen + + BUILD_NUMBER: + - falls nicht gesetzt, auf einen lokalen Default setzen, z. B. 0 oder 1 + - wichtig: Wert muss für make_rpm_ubuntu26.py verwendbar sein + + BUILD_TAG: + - falls nicht gesetzt, aus PROJECT, BUILD_NUMBER und lokalem Kontext erzeugen, z. B. + local-${PROJECT}-${BUILD_NUMBER} + +Die Variablen sollen beim Docker-Run explizit mit `-e` in den Container übergeben werden, damit `jenkins_builder_ubuntu26.sh` und `make_rpm_ubuntu26.py` dieselbe Umgebung sehen wie in Jenkins. + +Beispielhafte Übergabe: + + -e PROJECT=guez + -e GUEZ_MODE=ON + -e OS_VERSION="${OS_VERSION}" + -e LTS_VERSION="${LTS_VERSION}" + -e WORKSPACE="${CONTAINER_WORKSPACE}" + -e PROJECT_BASE_DIR="${PROJECT_BASE_DIR}" + -e BUILD_NUMBER="${BUILD_NUMBER}" + -e BUILD_TAG="${BUILD_TAG}" + +Akzeptanzkriterium zusätzlich: +- Beim neuen Ablauf mit `--run-jenkins-builder` sind alle oben genannten Variablen im Container gesetzt. +- `PROJECT`, `GUEZ_MODE` und `PROJECT_BASE_DIR` haben die vorgegebenen Werte. +- Die restlichen Werte werden entweder aus der vorhandenen Umgebung übernommen, aus dem Docker-Image/Container bestimmt oder mit nachvollziehbaren lokalen Defaults gesetzt. + +5. Robustheit + - Prüfe, ob Script B existiert und ausführbar ist. + - Falls nötig, setze executable permissions oder rufe es explizit mit `bash` auf. + - Prüfe, ob der Ausgabeordner existiert; falls nicht, erstelle ihn. + - Verwende absolute Pfade für Docker volume mounts. + - Brich bei Fehlern mit aussagekräftigen Fehlermeldungen ab. + - Verwende `set -euo pipefail`, sofern passend und noch nicht vorhanden. + - Bestehendes Verhalten von Script A darf ohne die neue Option nicht verändert werden. + +6. Dokumentation + - Aktualisiere ggf. vorhandene README- oder Hilfetexte. + - Die Usage-Ausgabe von Script A soll die neuen Optionen beschreiben. + +7. Tests / Validierung + - Führe soweit möglich ShellCheck oder eine vergleichbare Prüfung für geänderte Shell-Scripts aus. + - Prüfe mindestens syntaktisch: + - Script A + - Script B + - Wenn möglich, teste den neuen Ablauf mit: + + ./qt-migration-legatus/qt6-after/qt6-migrated-legatusnew_docker_build.sh --run-jenkins-builder --package-output-dir ./packages-out + +Akzeptanzkriterien: +- Script A hat eine neue Option zum Ausführen von Script B im Docker-Container. +- Script B läuft innerhalb des Docker-Images D, das durch Script A gebaut/verwendet wird. +- Script C wird über Script B ausgeführt. +- Das Docker-Image enthält alle notwendigen Build- und Packaging-Tools. +- Die erzeugten RPM-/DEB-Pakete sind nach Ende des Laufs auf dem Host unter dem angegebenen Ausgabeordner verfügbar. +- Ohne neue Option bleibt das bisherige Verhalten von Script A unverändert. +- Änderungen sind nachvollziehbar, robust und dokumentiert. diff --git a/qt-migration-legatus b/qt-migration-legatus index d7f58c558..88902aa57 160000 --- a/qt-migration-legatus +++ b/qt-migration-legatus @@ -1 +1 @@ -Subproject commit d7f58c558db686f064396ce15c49eebf588dcbca +Subproject commit 88902aa572f7f959589f598b2a8fe5737a23700a