pipeline { agent { docker { image 'lifemaps/ci-cpp:latest' reuseNode true args '-u root:root' } } options { timestamps() disableConcurrentBuilds() } environment { PROJECT_DIR = "qt6-after/qt6-migrated-benchmark" BUILD_DIR = "build" CHANGE_TARGET = "${env.CHANGE_TARGET ?: 'origin/main'}" } stages { stage('Checkout') { steps { checkout scm sh 'git fetch --all --prune' sh 'git submodule update --init --recursive || true' } } stage('Tool Versions') { steps { sh ''' python3 --version cmake --version ninja --version g++ --version ''' } } stage('Qt Diagnostics') { steps { sh ''' dpkg -l | grep -E "qt6-base-dev|qtbase5-dev|qt6-tools" || true pkg-config --list-all | grep -i qt || true ''' } } stage('Policy Checks') { steps { sh 'python3 ci/check_pr_policies.py' } } stage('Configure') { steps { sh 'cmake -S ${PROJECT_DIR} -B ${BUILD_DIR} -G Ninja -DCMAKE_BUILD_TYPE=Debug' } } stage('Build') { steps { sh 'cmake --build ${BUILD_DIR} --parallel' } } stage('Test') { steps { sh 'ctest --test-dir ${BUILD_DIR} --output-on-failure' } } } post { always { script { if (getContext(hudson.FilePath)) { cleanWs deleteDirs: true, disableDeferredWipeout: true } } } } }