Files
status-app/ci/Jenkinsfile.qt-build

178 lines
4.7 KiB
Groovy

#!/usr/bin/env groovy
library 'status-jenkins-lib@v1.9.46'
pipeline {
agent {
label 'linux && x86_64 && qt-builder'
}
options {
buildDiscarder(logRotator(numToKeepStr: '20'))
timestamps()
timeout(time: 12, unit: 'HOURS')
}
parameters {
string(
name: 'QT_VERSION',
defaultValue: '6.11.0',
description: 'Qt version to build'
)
string(
name: 'DOCKER_TAG_ANDROID',
defaultValue: '1.0.1-qt6.11.0-android',
description: 'Docker image tag for the Andorid image'
)
string(
name: 'DOCKER_TAG_LINUX',
defaultValue: '1.0.10-qt6.11.0',
description: 'Docker image tag for the Linux image'
)
string(
name: 'DOCKER_REGISTRY',
description: 'Docker registry ',
defaultValue: params.DOCKER_REGISTRY ?: 'harbor.status.im',
)
string(
name: 'LINUXDEPLOYQT_VERSION',
description: 'Version of Linux Deploy QT present in Digital Ocean Spaces',
defaultValue: '20250615-0393b84',
)
string(
name: 'PCSCLITE_VERSION',
description: 'PCSC Lite version to bundle for keycard support',
defaultValue: '2.2.3',
)
string(
name: 'JAVA_VERSION',
description: 'Java version for Android builds',
defaultValue: '17',
)
string(
name: 'ANDROID_API_LEVEL',
description: 'Android API level',
defaultValue: '36',
)
string(
name: 'ANDROID_NDK_VERSION',
description: 'Android NDK version',
defaultValue: '27.2.12479018',
)
string(
name: 'GOLANG_VERSION',
description: 'Go language version',
defaultValue: '1.24.7',
)
string(
name: 'NIM_VERSION',
description: 'Nim language version',
defaultValue: '2.2.4',
)
string(
name: 'NIX_VERSION',
description: 'Nix package manager version',
defaultValue: '2.24.11',
)
}
environment {
DOCKER_IMAGE = 'status-im/status-desktop-build'
ANDROID_BUILD_DIR = "${WORKSPACE}/mobile/docker"
LINUX_BUILD_DIR = "${WORKSPACE}/ci"
}
stages {
stage('Build Docker Image for Linux') {
steps {
script {
dir("${LINUX_BUILD_DIR}") {
image = docker.build(
"${params.DOCKER_REGISTRY}/${DOCKER_IMAGE}:${params.DOCKER_TAG_LINUX}",
"--build-arg QT_VERSION=${params.QT_VERSION} " +
"--build-arg LINUXDEPLOYQT_VERSION=${params.LINUXDEPLOYQT_VERSION} " +
"--build-arg PCSCLITE_VERSION=${params.PCSCLITE_VERSION} " +
"."
)
}
}
}
}
stage('Test Image for Linux') {
steps {
script {
image.inside('--entrypoint=""') {
sh "qmake --version"
sh "ls -la /opt/qt/${params.QT_VERSION}/"
}
}
}
}
stage('Push Linux image to Docker registry') {
steps {
script {
withDockerRegistry([credentialsId: 'harbor-status-im-status-desktop-build-robot', url: "https://${params.DOCKER_REGISTRY}"]) {
image.push(params.DOCKER_TAG_LINUX)
}
}
}
}
stage('Build Docker Image for Android') {
steps {
script {
dir("${ANDROID_BUILD_DIR}") {
image = docker.build(
"${params.DOCKER_REGISTRY}/${DOCKER_IMAGE}:${params.DOCKER_TAG_ANDROID}",
"--build-arg QT_VERSION=${params.QT_VERSION} " +
"--build-arg JAVA_VERSION=${params.JAVA_VERSION} " +
"--build-arg ANDROID_API_LEVEL=${params.ANDROID_API_LEVEL} " +
"--build-arg ANDROID_NDK_VERSION=${params.ANDROID_NDK_VERSION} " +
"--build-arg GOLANG_VERSION=${params.GOLANG_VERSION} " +
"--build-arg NIM_VERSION=${params.NIM_VERSION} " +
"--build-arg NIX_VERSION=${params.NIX_VERSION} " +
"."
)
}
}
}
}
stage('Test Image for Android') {
steps {
script {
image.inside('--entrypoint=""') {
sh "qmake --version"
sh "nim --version"
sh "go version"
sh "protoc --version"
sh "java -version"
sh "ls -la /opt/qt/${params.QT_VERSION}/"
}
}
}
}
stage('Push Android image to Docker registry') {
steps {
script {
withDockerRegistry([credentialsId: 'harbor-status-im-status-desktop-build-robot', url: "https://${params.DOCKER_REGISTRY}"]) {
image.push(params.DOCKER_TAG_ANDROID)
}
}
}
}
}
post {
success { script { github.notifyPR(true) } }
failure { script { github.notifyPR(false) } }
cleanup {
cleanWs(disableDeferredWipeout: true)
dir(env.WORKSPACE_TMP) { deleteDir() }
}
}
}