@Library('jenkins-shared-library') _ pipeline { agent { docker { image 'ogbrowser-build:latest' args '-u root:root' label 'jenkins-slave' } } environment { DEBIAN_FRONTEND = 'noninteractive' DEFAULT_DEV_NAME = 'Opengnsys Team' DEFAULT_DEV_EMAIL = 'opengnsys@qindel.com' } parameters { string(name: 'DEV_NAME', defaultValue: '', description: 'Nombre del desarrollador') string(name: 'DEV_EMAIL', defaultValue: '', description: 'Email del desarrollador') } stages { stage('Prepare environment') { steps { sh ''' apt-get update apt-get install -y openssh-client mkdir -p debian echo "Workspace preparado: ${WORKSPACE}" ''' } } stage('Install Dependencies') { steps { sshagent (credentials: ['aptly-key']) { sh ''' export DEBIAN_FRONTEND=noninteractive apt-get update apt-get install -y build-essential cmake g++ qt6-base-dev qt6-webengine-dev linguist-qt6 libgl1-mesa-dev qt6-tools-dev qt6-l10n-tools qt6-tools-dev-tools libqt6core5compat6-dev lxqt-build-tools qt6-webengine-dev-tools libqt6webenginecore6-bin ninja-build # Verificar conexión con aptly aptly=172.17.8.68 ssh aptly@${aptly} -o StrictHostKeyChecking=no "uptime" ''' } } } stage('Generate Changelog') { when { expression { return env.TAG_NAME != null } } steps { script { def devName = params.DEV_NAME ? params.DEV_NAME : env.DEFAULT_DEV_NAME def devEmail = params.DEV_EMAIL ? params.DEV_EMAIL : env.DEFAULT_DEV_EMAIL // Generar changelog en el workspace root (donde está el directorio debian) generateDebianChangelog(env.WORKSPACE, devName, devEmail) } } } stage('Generate Changelog (Nightly)') { when { anyOf { branch 'main' branch 'fix_upload' } } steps { script { def devName = params.DEV_NAME ? params.DEV_NAME : env.DEFAULT_DEV_NAME def devEmail = params.DEV_EMAIL ? params.DEV_EMAIL : env.DEFAULT_DEV_EMAIL // Generar changelog nightly en el workspace root generateDebianChangelog(env.WORKSPACE, devName, devEmail, 'nightly') } } } stage('Verify Changelog') { steps { sh ''' echo "=== Verificando changelog generado ===" echo "Workspace: ${WORKSPACE}" ls -la debian/ || echo "❌ No existe directorio debian" if [ -f debian/changelog ]; then echo "✅ Changelog encontrado:" head -5 debian/changelog else echo "❌ No existe archivo changelog" fi ''' } } stage('Build') { steps { sh ''' echo "=== Preparando build ===" mkdir -p build cd build echo "=== Verificando estructura antes de CMake ===" echo "Directorio actual: $(pwd)" echo "Buscando changelog en: ../debian/changelog" ls -la ../debian/changelog || echo "❌ Changelog no encontrado" echo "=== Configurando CMake ===" cmake .. -G Ninja echo "=== Compilando ===" ninja ''' } } stage('Create package') { steps { sh ''' cd build echo "=== Verificando configuración de versión ===" cmake -L . | grep -i "cpack.*version" || echo "No hay variables de versión configuradas" echo "=== Creando paquete Debian ===" cpack -G DEB --verbose echo "=== Paquetes generados ===" ls -la *.deb echo "=== Información del paquete ===" PACKAGE_FILE=$(ls *.deb | head -1) dpkg-deb --info "$PACKAGE_FILE" | head -20 echo "=== Verificando contenido del paquete ===" dpkg-deb --control "$PACKAGE_FILE" extracted_control if [ -f extracted_control/changelog.Debian.gz ]; then echo "✅ Changelog incluido en el paquete" else echo "❌ Changelog NO incluido en el paquete" fi ''' } } stage("Upload package to Aptly") { steps { sshagent (credentials : ['aptly-key']) { withCredentials([string(credentialsId: 'aptly-gpg-passphrase', variable: 'GPG_PASSPHRASE')]) { sh ''' aptly=172.17.8.68 # Detectar automáticamente el nombre del paquete generado PACKAGE_FILE=$(ls build/*.deb | head -1) PACKAGE_NAME=$(basename "$PACKAGE_FILE") echo "📦 Subiendo paquete: $PACKAGE_NAME" # Verificar que el archivo existe if [ ! -f "$PACKAGE_FILE" ]; then echo "❌ Error: No se encontró el paquete generado" exit 1 fi # Subir el paquete scp -o StrictHostKeyChecking=no "$PACKAGE_FILE" aptly@${aptly}:/tmp/ ssh aptly@${aptly} -o StrictHostKeyChecking=no "aptly repo add nightly /tmp/$PACKAGE_NAME" echo "✅ Paquete subido correctamente: $PACKAGE_NAME" ''' } } } } } post { always { cleanWs() } } }