📦 Implementar empaquetado automático con versionado desde changelog de Debian #8

Merged
narenas merged 4 commits from fix_upload into main 2025-09-02 14:21:48 +02:00
2 changed files with 190 additions and 50 deletions

146
Jenkinsfile vendored
View File

@ -1,62 +1,145 @@
@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
sh '''
pwd
uname -a
df
env
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
echo "Test"
aptly=172.17.8.68
ssh aptly@${aptly} -o StrictHostKeyChecking=no "uptime"
'''
# 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
cmake .. -DCPACK_PACKAGE_VERSION_PATCH=${BUILD_NUMBER} -G Ninja
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
cpack -G DEB
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
'''
}
}
@ -67,8 +150,23 @@ pipeline {
withCredentials([string(credentialsId: 'aptly-gpg-passphrase', variable: 'GPG_PASSPHRASE')]) {
sh '''
aptly=172.17.8.68
scp -o StrictHostKeyChecking=no build/OGBrowser-2.0.${BUILD_NUMBER}-Linux.deb aptly@${aptly}:/tmp
ssh aptly@${aptly} -o StrictHostKeyChecking=no "aptly repo add opengnsys /tmp/OGBrowser-2.0.${BUILD_NUMBER}-Linux.deb"
# 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"
'''
}
}
@ -80,4 +178,4 @@ pipeline {
cleanWs()
}
}
}
}

View File

@ -3,36 +3,76 @@ cmake_minimum_required(VERSION 3.20)
project(OGBrowser LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
# Buscar el changelog de Debian
set(DEBIAN_CHANGELOG_PATH "${CMAKE_SOURCE_DIR}/debian/changelog")
if (NOT DEFINED CPACK_PACKAGE_VERSION_MAJOR)
set(CPACK_PACKAGE_VERSION_MAJOR "2")
if(EXISTS "${DEBIAN_CHANGELOG_PATH}")
file(READ "${DEBIAN_CHANGELOG_PATH}" CHANGELOG_CONTENT)
# Extraer la versión: ogbrowser (2.1.0+123~nightly-1)
string(REGEX MATCH "\\(([^)]+)\\)" VERSION_MATCH "${CHANGELOG_CONTENT}")
if(VERSION_MATCH)
string(REGEX REPLACE "\\(([^)]+)\\)" "\\1" DEBIAN_FULL_VERSION "${VERSION_MATCH}")
message(STATUS "✅ Versión encontrada en changelog: ${DEBIAN_FULL_VERSION}")
# Extraer versión base (2.1.0 de 2.1.0+123~nightly-1)
string(REGEX REPLACE "^([0-9]+\\.[0-9]+\\.[0-9]+).*" "\\1" BASE_VERSION "${DEBIAN_FULL_VERSION}")
# Separar en componentes
string(REPLACE "." ";" VERSION_LIST ${BASE_VERSION})
list(GET VERSION_LIST 0 VERSION_MAJOR)
list(GET VERSION_LIST 1 VERSION_MINOR)
list(GET VERSION_LIST 2 VERSION_PATCH)
# Configurar variables de cache para CPack
set(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}" CACHE STRING "Major version")
set(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}" CACHE STRING "Minor version")
set(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}" CACHE STRING "Patch version")
set(CPACK_PACKAGE_VERSION "${BASE_VERSION}" CACHE STRING "Full version")
set(CPACK_DEBIAN_PACKAGE_VERSION "${DEBIAN_FULL_VERSION}" CACHE STRING "Debian version")
message(STATUS "✅ Variables configuradas: MAJOR=${VERSION_MAJOR}, MINOR=${VERSION_MINOR}, PATCH=${VERSION_PATCH}")
else()
message(WARNING "❌ No se pudo parsear la versión del changelog")
# Usar valores por defecto
set(CPACK_PACKAGE_VERSION_MAJOR "2" CACHE STRING "Major version")
set(CPACK_PACKAGE_VERSION_MINOR "1" CACHE STRING "Minor version")
set(CPACK_PACKAGE_VERSION_PATCH "0" CACHE STRING "Patch version")
set(CPACK_PACKAGE_VERSION "2.1.0" CACHE STRING "Full version")
set(DEBIAN_FULL_VERSION "2.1.0-1")
endif()
else()
message(WARNING "❌ Changelog no encontrado: ${DEBIAN_CHANGELOG_PATH}")
# Usar valores por defecto si no hay changelog
set(CPACK_PACKAGE_VERSION_MAJOR "2" CACHE STRING "Major version")
set(CPACK_PACKAGE_VERSION_MINOR "1" CACHE STRING "Minor version")
set(CPACK_PACKAGE_VERSION_PATCH "0" CACHE STRING "Patch version")
set(CPACK_PACKAGE_VERSION "2.1.0" CACHE STRING "Full version")
set(DEBIAN_FULL_VERSION "2.1.0-1")
endif()
# Mantener compatibilidad con variables existentes si no se sobreescribieron
if (NOT DEFINED CPACK_PACKAGE_VERSION_MAJOR)
set(CPACK_PACKAGE_VERSION_MAJOR "2" CACHE STRING "Major version")
endif()
if (NOT DEFINED CPACK_PACKAGE_VERSION_MINOR)
set(CPACK_PACKAGE_VERSION_MINOR "1")
set(CPACK_PACKAGE_VERSION_MINOR "1" CACHE STRING "Minor version")
endif()
if (NOT DEFINED CPACK_PACKAGE_VERSION_PATCH)
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_VERSION_PATCH "0" CACHE STRING "Patch version")
endif()
set(KB_LAYOUT_DIR "/usr/lib/qtermwidget/kb" CACHE INTERNAL "")
find_package(QT NAMES Qt6 COMPONENTS Widgets LinguistTools Network WebEngineWidgets DBus REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets LinguistTools Network WebEngineWidgets DBus REQUIRED)
message(STATUS "Building browser with Qt ${QT_VERSION}")
message(STATUS "Browser version is ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
@ -48,9 +88,6 @@ set(SOURCES
file(GLOB TRANSLATIONS "${PROJECT_SOURCE_DIR}/i18n/*.ts")
message(STATUS "Translations: ${TRANSLATIONS}")
add_executable(OGBrowser ${SOURCES}
dbusinterface.h dbusinterface.cpp)
@ -66,20 +103,15 @@ message(STATUS "Looking for headers in ${PROJECT_BINARY_DIR}")
target_include_directories(OGBrowser PRIVATE ${qtermwidget_INCLUDE_DIRS} ${DigitalClock_INCLUDE_DIRS} ${qtermwidget_LIB_DIRS}/lib ${PROJECT_BINARY_DIR}/../lib)
target_link_directories(OGBrowser PRIVATE ${qtermwidget_LIB_DIRS} ${DigitalClock_LIB_DIRS})
install(TARGETS OGBrowser DESTINATION bin )
install(FILES ${qm_files} DESTINATION "translations")
# CPack settings must be set before including CPack
set(CPACK_PACKAGE_NAME "OGBrowser")
set(CPACK_PACKAGE_NAME "ogbrowser")
set(CPACK_PACKAGE_VENDOR "OpenGnsys")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenGnsys Browser")
set(CMAKE_PROJECT_HOMEPAGE_URL "https://opengnsys.es/web/")
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
set(CPACK_SET_DESTDIR true)
set(CPACK_PACKAGING_INSTALL_PREFIX "/usr")
@ -88,15 +120,25 @@ set(CPACK_PACKAGE_CONTACT "Vadim Troshchinskiy <vadim@qindel.com>")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Vadim Troshchinskiy <vadim@qindel.com>")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS "ON")
set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY ">=")
#set(CPACK_DEBIAN_PACKAGE_DEPENDS "")
set(CPACK_DEBIAN_PACKAGE_SECTION "web")
# RedHat package support. Dependencies are automatically detected
# Configurar el nombre del archivo para que incluya la versión completa de Debian
if(DEFINED DEBIAN_FULL_VERSION)
set(CPACK_DEBIAN_PACKAGE_VERSION "${DEBIAN_FULL_VERSION}")
# Configurar el nombre del archivo explícitamente
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${DEBIAN_FULL_VERSION}_${CMAKE_SYSTEM_PROCESSOR}")
message(STATUS "✅ Nombre del paquete configurado: ${CPACK_PACKAGE_FILE_NAME}")
endif()
# Incluir el changelog si existe
if(EXISTS "${DEBIAN_CHANGELOG_PATH}")
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${DEBIAN_CHANGELOG_PATH}")
message(STATUS "✅ Changelog incluido desde: ${DEBIAN_CHANGELOG_PATH}")
endif()
# RedHat package support
set(CPACK_RPM_PACKAGE_GROUP "Applications/Internet")
set(CPACK_RPM_PACKAGE_RELEASE "1")
set(CPACK_RPM_PACKAGE_LICENSE "GPL-3.0")
# This goes last
include(CPack)
include(CPack)