Build the DEB packages with the in-tree rpmbuild script
The container script now runs the packaging flow itself instead of calling the outer-repo jenkins_builder_ubuntu26.sh: - Stage the workspace to deb_stage (same tar/excludes as the verified jenkins flow; the workspace itself is never deleted) - Run the in-tree rpmbuild/make_rpm_ubuntu26.py from the staged source tree with the same cmake flags and arguments as before - Copy the produced DEBs to the package output mount - A packaging failure now fails the build instead of being logged and swallowed - Drop the now-unneeded MIGRATE_PIPELINE_ROOT/WORKSPACE/PROJECT_BASE_DIR container env plumbing The branch is now fully self-contained: new_docker_build.sh + Dockerfile + rpmbuild/. The build-pipeline DEB additionally ships rpmbuild/make_rpm_ubuntu26.py (the staging list already named it). Verified: zero-warning build, 5 DEBs with identical contents.
This commit is contained in:
1 parent
ba99b74608
commit
217bb54bc0
1 file changed
+51
-25
@@ -13,7 +13,8 @@ set -euo pipefail
|
||||
# - Uses a prebuilt Docker image with all build dependencies installed
|
||||
# (build it from ./Dockerfile via --build-prebuilt-image)
|
||||
# - Optional deletion of the prebuilt Docker image via --delete-prebuilt-image
|
||||
# - Optional Jenkins builder run for RPM/DEB package production
|
||||
# - Optional DEB package production via the in-tree rpmbuild/
|
||||
# make_rpm_ubuntu26.py (self-contained - no outer-repo dependencies)
|
||||
# - Uses a temporary container-side script for robust execution
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
@@ -33,8 +34,9 @@ Options:
|
||||
again with --docker-image
|
||||
--delete-prebuilt-image Delete the configured Docker image and exit
|
||||
|
||||
Jenkins builder options (for RPM/DEB package production):
|
||||
--run-jenkins-builder Run jenkins_builder_ubuntu26.sh inside container to produce packages
|
||||
Package production options (RPM/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)
|
||||
@@ -400,9 +402,8 @@ set -euo pipefail
|
||||
# Fixed configuration for the release validation-scope branch
|
||||
RELEASE_BUILD="${RELEASE_BUILD:-ON}"
|
||||
RUN_CTEST="${RUN_CTEST:-ON}"
|
||||
# Jenkins builder and packaging variables
|
||||
# Packaging variables
|
||||
RUN_JENKINS_BUILDER="${RUN_JENKINS_BUILDER:-OFF}"
|
||||
MIGRATE_PIPELINE_ROOT="/workspace"
|
||||
PACKAGE_OUTPUT_DIR="${PACKAGE_OUTPUT_DIR:-/workspace/packages-out}"
|
||||
LTS_VERSION="${LTS_VERSION:-1.0}"
|
||||
PROJECT="${PROJECT:-guez}"
|
||||
@@ -463,39 +464,64 @@ else
|
||||
log_info "Skipping CTest"
|
||||
fi
|
||||
|
||||
# Jenkins builder execution (produces the release DEB packages)
|
||||
# DEB package production with the in-tree rpmbuild script
|
||||
if [[ "${RUN_JENKINS_BUILDER}" == "ON" ]]; then
|
||||
log_info "=== Jenkins Builder Execution (RPM/DEB Package Production) ==="
|
||||
log_info "=== DEB Package Production (in-tree rpmbuild) ==="
|
||||
|
||||
# Set up environment variables for jenkins_builder_ubuntu26.sh
|
||||
export OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | cut -d'"' -f2)
|
||||
export WORKSPACE=/workspace
|
||||
export PROJECT_BASE_DIR=/workspace
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | cut -d'"' -f2)
|
||||
STAGE_DIR=/workspace/deb_stage
|
||||
STAGED_SOURCE_DIR="${STAGE_DIR}/qt-migration-legatus/qt6-after/qt6-migrated-legatus"
|
||||
|
||||
log_info "Running jenkins_builder_ubuntu26.sh with:"
|
||||
# Stage the workspace as a clean copy. The workspace itself is NEVER
|
||||
# deleted (it contains git-managed sources); only the staging
|
||||
# subdirectory is removed.
|
||||
log_info "Staging workspace to ${STAGE_DIR}"
|
||||
rm -rf "${STAGE_DIR}"
|
||||
mkdir -p "${STAGE_DIR}"
|
||||
tar --exclude='./rpms' --exclude='./.git' --exclude='./build' \
|
||||
--exclude='./deb_build_tmp' --exclude='./deb_stage' --exclude='./packages-out' \
|
||||
-cf - -C /workspace . | tar -xf - -C "${STAGE_DIR}"
|
||||
|
||||
if [[ ! -f "${STAGED_SOURCE_DIR}/CMakeLists.txt" || ! -f "${STAGED_SOURCE_DIR}/rpmbuild/make_rpm_ubuntu26.py" ]]; then
|
||||
log_error "Staged source incomplete under ${STAGED_SOURCE_DIR} (CMakeLists.txt or rpmbuild/make_rpm_ubuntu26.py missing)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "Running ${STAGED_SOURCE_DIR}/rpmbuild/make_rpm_ubuntu26.py with:"
|
||||
log_info " PROJECT=${PROJECT}"
|
||||
log_info " OS_VERSION=${OS_VERSION}"
|
||||
log_info " LTS_VERSION=${LTS_VERSION}"
|
||||
log_info " GUEZ_MODE=${GUEZ_MODE}"
|
||||
log_info " WORKSPACE=${WORKSPACE}"
|
||||
log_info " PROJECT_BASE_DIR=${PROJECT_BASE_DIR}"
|
||||
log_info " BUILD_NUMBER=${BUILD_NUMBER}"
|
||||
log_info " BUILD_TAG=${BUILD_TAG}"
|
||||
|
||||
# Execute jenkins_builder_ubuntu26.sh
|
||||
if [[ -f "${MIGRATE_PIPELINE_ROOT}/jenkins-ci-rme/jenkins_builder_ubuntu26.sh" ]]; then
|
||||
bash "${MIGRATE_PIPELINE_ROOT}/jenkins-ci-rme/jenkins_builder_ubuntu26.sh" || JENKINS_BUILDER_RESULT=$?
|
||||
if [[ "${JENKINS_BUILDER_RESULT:-0}" -ne 0 ]]; then
|
||||
log_info "Jenkins builder completed with errors (exit code: ${JENKINS_BUILDER_RESULT})"
|
||||
else
|
||||
log_info "Jenkins builder completed successfully"
|
||||
fi
|
||||
cd "${STAGED_SOURCE_DIR}/rpmbuild"
|
||||
if python3 make_rpm_ubuntu26.py -c LTS \
|
||||
--project_name "${PROJECT}" \
|
||||
--version "${LTS_VERSION}" \
|
||||
--output_dir "/workspace/rpms/${PROJECT}/${OS_VERSION}/" \
|
||||
--source_dir "${STAGED_SOURCE_DIR}" \
|
||||
--cmake_build_flags "-DUSE_IPO=ON -DUSE_UNITY_BUILD=ON -DGUEZ_MODE=${GUEZ_MODE} -DBUILD_WLS=ON -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/ -DRELEASE_BUILD=ON" \
|
||||
--build_number "${BUILD_NUMBER}" \
|
||||
--release_scope; then
|
||||
log_info "Package build completed successfully"
|
||||
else
|
||||
log_error "jenkins_builder_ubuntu26.sh not found at ${MIGRATE_PIPELINE_ROOT}/jenkins-ci-rme/jenkins_builder_ubuntu26.sh"
|
||||
JENKINS_BUILDER_RESULT=1
|
||||
log_error "Package build failed (exit code: $?)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Copy produced DEB packages to the packages-out mount so they are
|
||||
# available on the host after the container exits.
|
||||
mkdir -p "${PACKAGE_OUTPUT_DIR}"
|
||||
shopt -s nullglob
|
||||
for deb in "/workspace/rpms/${PROJECT}/${OS_VERSION}/"*.deb; do
|
||||
cp -f "${deb}" "${PACKAGE_OUTPUT_DIR}/"
|
||||
done
|
||||
shopt -u nullglob
|
||||
log_info "DEB packages copied to ${PACKAGE_OUTPUT_DIR}:"
|
||||
ls -lh "${PACKAGE_OUTPUT_DIR}/"
|
||||
else
|
||||
log_info "Skipping Jenkins builder execution"
|
||||
log_info "Skipping DEB package production"
|
||||
fi
|
||||
EOF
|
||||
|
||||
|
||||
Reference in new issue
Block a user