📦 Implementar empaquetado automático con versionado desde changelog de Debian #8
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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)
|
Loading…
Reference in New Issue