Task 3: Adapt script to conform to Release 1 options

Add Jenkins builder and coverage options:
- --run-jenkins-builder: Enable DEB package production mode
- --package-output-dir: Output directory for .deb packages
- --lts-version: LTS version for package metadata
- --project: Project name (guez)
- --build-number: Build number for package versioning
- --build-tag: Build tag/identifier
- --run-coverage: Enable lcov code coverage
- --coverage-output-dir: Output directory for coverage reports

Add MIGRATE_PIPELINE_ROOT handling with precedence:
1. Exported variable (Jenkinsfile)
2. .envrc file
3. Script location default

Add validation for mutually exclusive options:
- --run-jenkins-builder and --run-coverage cannot be used together

Export all new variables for Docker container and pass to CMake.

Co-authored-by: Copilot <223556619+Copilot@users.noreply.github.com>
This commit is contained in:
torstenandCopilot committed 2026-11-12 16:15:04 +00:00
1 parent 9d40705229
commit 4c447e7182
1 file changed
+123
@@ -33,6 +33,19 @@ Prebuilt Docker image usage:
--cmake_build_flags FLAGS Extra CMake flags passed to the in-container configure --cmake_build_flags FLAGS Extra CMake flags passed to the in-container configure
(space-separated -D flags) (space-separated -D flags)
Package production options (DEB):
--run-jenkins-builder Build the release DEB packages inside the container
using the in-tree rpmbuild/make_rpm_ubuntu26.py
--package-output-dir DIR Directory to mount for package output (default: ./packages-out)
--lts-version VERSION LTS version for package (default: 1.0)
--project NAME Project name for package (default: guez)
--build-number NUM Build number for package (default: 1)
--build-tag TAG Build tag for package (default: manual-build)
Coverage options (lcov):
--run-coverage Build with -O0 --coverage, run ctest and collect lcov
--coverage-output-dir DIR Directory to mount for coverage output (default: ./coverage-out)
Docker mount configuration: Docker mount configuration:
--docker-mount-root PATH Container-side mount root path (default: /repo) --docker-mount-root PATH Container-side mount root path (default: /repo)
Changes where host directories are mounted in container Changes where host directories are mounted in container
@@ -45,11 +58,28 @@ Environment variable overrides:
RUN_CTEST=ON|OFF RUN_CTEST=ON|OFF
TESTS_ONLY=ON|OFF TESTS_ONLY=ON|OFF
USE_PREBUILT_IMAGE=ON|OFF USE_PREBUILT_IMAGE=ON|OFF
RUN_JENKINS_BUILDER=ON|OFF
PACKAGE_OUTPUT_DIR=<dir>
LTS_VERSION=<version>
PROJECT=<name>
BUILD_NUMBER=<num>
BUILD_TAG=<tag>
RUN_COVERAGE=ON|OFF
COVERAGE_OUTPUT_DIR=<dir>
MIGRATE_PIPELINE_ROOT resolution (highest precedence first):
1. exported MIGRATE_PIPELINE_ROOT (e.g. from a Jenkinsfile)
2. MIGRATE_PIPELINE_ROOT set by .envrc in this directory
3. derived from the script location (the DLBO Qt6 repo root)
Examples: Examples:
./new_docker_build_release2.sh --group1 --group3 --group5 --group6 ./new_docker_build_release2.sh --group1 --group3 --group5 --group6
BUILD_GROUP1=ON BUILD_GROUP3=ON ./new_docker_build_release2.sh BUILD_GROUP1=ON BUILD_GROUP3=ON ./new_docker_build_release2.sh
./new_docker_build_release2.sh --use-prebuilt-image --no-ctest ./new_docker_build_release2.sh --use-prebuilt-image --no-ctest
./new_docker_build_release2.sh --group3 --run-jenkins-builder \
--package-output-dir "${WORKSPACE}/rpms/guez/release2/"
./new_docker_build_release2.sh --group3 --run-coverage \
--coverage-output-dir "${WORKSPACE}/coverage/guez/release2/"
EOF EOF
exit 1 exit 1
} }
@@ -76,6 +106,46 @@ CMAKE_BUILD_FLAGS="${CMAKE_BUILD_FLAGS:-}"
DOCKER_MOUNT_ROOT="${DOCKER_MOUNT_ROOT:-/repo}" DOCKER_MOUNT_ROOT="${DOCKER_MOUNT_ROOT:-/repo}"
export DOCKER_MOUNT_ROOT export DOCKER_MOUNT_ROOT
# Jenkins builder options for DEB package production
RUN_JENKINS_BUILDER="${RUN_JENKINS_BUILDER:-OFF}"
PACKAGE_OUTPUT_DIR="${PACKAGE_OUTPUT_DIR:-./packages-out}"
LTS_VERSION="${LTS_VERSION:-1.0}"
PROJECT="${PROJECT:-guez}"
BUILD_NUMBER="${BUILD_NUMBER:-1}"
BUILD_TAG="${BUILD_TAG:-manual-build}"
# Code coverage (lcov)
RUN_COVERAGE="${RUN_COVERAGE:-OFF}"
COVERAGE_OUTPUT_DIR="${COVERAGE_OUTPUT_DIR:-./coverage-out}"
# Export variables for Docker container
export BUILD_GROUP1 BUILD_GROUP3 BUILD_GROUP5 BUILD_GROUP6 RUN_CTEST TESTS_ONLY USE_PREBUILT_IMAGE
export RUN_JENKINS_BUILDER PACKAGE_OUTPUT_DIR LTS_VERSION PROJECT BUILD_NUMBER BUILD_TAG
export RUN_COVERAGE COVERAGE_OUTPUT_DIR
# MIGRATE_PIPELINE_ROOT resolution (highest precedence first):
# 1. exported MIGRATE_PIPELINE_ROOT (e.g. from a Jenkinsfile)
# 2. MIGRATE_PIPELINE_ROOT set by .envrc in this directory
# 3. derived from the script location (the DLBO Qt6 repo root)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
MIGRATE_PIPELINE_ROOT_DEFAULT="${SCRIPT_DIR}"
PIPELINE_ROOT_EXPORTED="${MIGRATE_PIPELINE_ROOT:-}"
if [[ -f ".envrc" ]]; then
set -a
source ".envrc"
set +a
fi
# An explicitly exported MIGRATE_PIPELINE_ROOT (Jenkinsfile) wins over .envrc
if [[ -n "${PIPELINE_ROOT_EXPORTED}" ]]; then
MIGRATE_PIPELINE_ROOT="${PIPELINE_ROOT_EXPORTED}"
else
MIGRATE_PIPELINE_ROOT="${MIGRATE_PIPELINE_ROOT:-${MIGRATE_PIPELINE_ROOT_DEFAULT}}"
fi
export MIGRATE_PIPELINE_ROOT
# Parse arguments # Parse arguments
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case "$1" in case "$1" in
@@ -139,6 +209,38 @@ while [[ $# -gt 0 ]]; do
DOCKER_MOUNT_ROOT="$2" DOCKER_MOUNT_ROOT="$2"
shift 2 shift 2
;; ;;
--run-jenkins-builder)
RUN_JENKINS_BUILDER="ON"
shift
;;
--package-output-dir)
PACKAGE_OUTPUT_DIR="$2"
shift 2
;;
--lts-version)
LTS_VERSION="$2"
shift 2
;;
--project)
PROJECT="$2"
shift 2
;;
--build-number)
BUILD_NUMBER="$2"
shift 2
;;
--build-tag)
BUILD_TAG="$2"
shift 2
;;
--run-coverage)
RUN_COVERAGE="ON"
shift
;;
--coverage-output-dir)
COVERAGE_OUTPUT_DIR="$2"
shift 2
;;
-h|--help) -h|--help)
usage usage
;; ;;
@@ -148,6 +250,11 @@ while [[ $# -gt 0 ]]; do
esac esac
done done
# Validate mutually exclusive options
if [[ "${RUN_JENKINS_BUILDER}" == "ON" ]] && [[ "${RUN_COVERAGE}" == "ON" ]]; then
die "Error: --run-jenkins-builder and --run-coverage are mutually exclusive"
fi
require_command() { require_command() {
if ! command -v "$1" &> /dev/null; then if ! command -v "$1" &> /dev/null; then
die "Required command not found: $1" die "Required command not found: $1"
@@ -489,6 +596,14 @@ DOCKER_RUN_ARGS=(
-e BUILD_GROUP6="${BUILD_GROUP6}" -e BUILD_GROUP6="${BUILD_GROUP6}"
-e RUN_CTEST="${RUN_CTEST}" -e RUN_CTEST="${RUN_CTEST}"
-e TESTS_ONLY="${TESTS_ONLY}" -e TESTS_ONLY="${TESTS_ONLY}"
-e RUN_JENKINS_BUILDER="${RUN_JENKINS_BUILDER}"
-e PACKAGE_OUTPUT_DIR="${PACKAGE_OUTPUT_DIR}"
-e LTS_VERSION="${LTS_VERSION}"
-e PROJECT="${PROJECT}"
-e BUILD_NUMBER="${BUILD_NUMBER}"
-e BUILD_TAG="${BUILD_TAG}"
-e RUN_COVERAGE="${RUN_COVERAGE}"
-e COVERAGE_OUTPUT_DIR="${COVERAGE_OUTPUT_DIR}"
-v "${MIGRATE_PIPELINE_ROOT}:${DOCKER_MOUNT_ROOT}" -v "${MIGRATE_PIPELINE_ROOT}:${DOCKER_MOUNT_ROOT}"
-w "${DOCKER_MOUNT_ROOT}/qt-migration-legatus/qt6-after/qt6-migrated-legatus" -w "${DOCKER_MOUNT_ROOT}/qt-migration-legatus/qt6-after/qt6-migrated-legatus"
) )
@@ -616,6 +731,14 @@ cmake -B "${BUILD_DIR}" \
-DBUILD_GROUP3="${BUILD_GROUP3}" \ -DBUILD_GROUP3="${BUILD_GROUP3}" \
-DBUILD_GROUP5="${BUILD_GROUP5}" \ -DBUILD_GROUP5="${BUILD_GROUP5}" \
-DBUILD_GROUP6="${BUILD_GROUP6}" \ -DBUILD_GROUP6="${BUILD_GROUP6}" \
-DRUN_JENKINS_BUILDER="${RUN_JENKINS_BUILDER}" \
-DPACKAGE_OUTPUT_DIR="${PACKAGE_OUTPUT_DIR}" \
-DLTS_VERSION="${LTS_VERSION}" \
-DPROJECT="${PROJECT}" \
-DBUILD_NUMBER="${BUILD_NUMBER}" \
-DBUILD_TAG="${BUILD_TAG}" \
-DRUN_COVERAGE="${RUN_COVERAGE}" \
-DCOVERAGE_OUTPUT_DIR="${COVERAGE_OUTPUT_DIR}" \
'"${CMAKE_BUILD_FLAGS}"' \ '"${CMAKE_BUILD_FLAGS}"' \
. .