blob: f08e70cb83ab222ca77c24b8250b72a3ace27050 [file] [log] [blame]
/*
* Copyright (C) 2022-2023 Savoir-faire Linux Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this program. If not, see
* <https://www.gnu.org/licenses/>.
*/
// Requirements:
// - gerrit-trigger plugin
// - Docker plugin
// - ansicolor plugin
pipeline {
agent {
node {
label 'jami-buildmachine-02.mtl.sfl'
}
}
triggers {
gerrit customUrl: '',
gerritProjects: [
[branches: [[compareType: 'PLAIN', pattern: 'master']],
compareType: 'PLAIN',
disableStrictForbiddenFileVerification: false,
pattern: 'jami-plugins']],
triggerOnEvents: [
commentAddedContains('!build'),
patchsetCreated(excludeDrafts: true, excludeNoCodeChange: true,
excludeTrivialRebase: true)]
}
options {
ansiColor('xterm')
}
parameters {
string(name: 'GERRIT_REFSPEC',
defaultValue: 'refs/heads/master',
description: 'The Gerrit plugins refspec to fetch.')
string(name: 'DAEMON_REFSPEC',
defaultValue: 'refs/heads/master',
description: 'The Gerrit daemon refspec to fetch.')
string(name: 'dockerfile',
defaultValue: 'Dockerfile_android_onnxruntime',
description: 'Dockerfile in plugins/docker/ repository to use for the build')
string(name: 'GERRIT_TOPIC',
defaultValue: '',
description: 'topic must match the plugins name if the pipeline is to build that plugins.')
booleanParam(name: 'ARCHIVE',
defaultValue: false,
description: 'do not propagate the release artifacts to the download server.')
}
environment {
jenkinsUID = sh(returnStdout: true, script: 'id -u jenkins').replaceAll("\n", '').trim()
jenkinsGID = sh(returnStdout: true, script: 'id -g jenkins').replaceAll("\n", '').trim()
jenkinsUser = '${jenkinsUID}:${jenkinsGID}'
cpuCount = sh returnStdout: true, script: 'nproc || echo -n 4'
}
stages {
stage('SCM Checkout') {
steps {
// Wipe workspace and fetch jami-plugins
checkout changelog: true, poll: false,
scm: [$class: 'GitSCM',
branches: [[name: 'FETCH_HEAD']],
doGenerateSubmoduleConfigurations: false,
extensions: [
[$class: 'CloneOption', noTags: true, reference: '', shallow: true],
[$class: 'WipeWorkspace']],
submoduleCfg: [],
userRemoteConfigs: [[refspec: '${GERRIT_REFSPEC}', url: 'https://${JAMI_GERRIT_URL}/jami-plugins']]]
}
}
stage('Init repository') {
steps {
script {
sh """
git rev-parse HEAD
git submodule update --init --recursive
"""
if (env.DAEMON_REFSPEC != null) {
sh """
cd daemon
git fetch origin ${DAEMON_REFSPEC} && git checkout FETCH_HEAD
"""
}
}
}
}
stage('Building Docker Image') {
steps {
script {
docker.build('plugins-android', "-f docker/${dockerfile} .")
}
}
}
stage('Setup and Build Dependencies') {
steps {
script {
docker.image('plugins-android').withRun('-t \
-v /var/lib/jenkins/android-plugins/tarballs:/home/gradle/jami/daemon/contrib/tarballs:rw \
-v /var/lib/jenkins/android-plugins/aarch64-linux-android:/home/gradle/jami/daemon/contrib/aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-aarch64-linux-android:/home/gradle/jami/daemon/contrib/native-aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/x86_64-linux-android:/home/gradle/jami/daemon/contrib/x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-x86_64-linux-android:/home/gradle/jami/daemon/contrib/native-x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/arm-linux-android:/home/gradle/jami/daemon/contrib/arm-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-arm-linux-android:/home/gradle/jami/daemon/contrib/native-arm-linux-android:rw \
-v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') {
container -> code:{
def base_cmd = 'docker exec -u '+jenkinsUser+' '+container.id+" sh -c '"
def base_root_cmd = 'docker exec '+container.id+" sh -c '"
def exec_cmd = { cmd -> sh script:base_cmd+cmd+"'" }
def exec_root_cmd = { cmd -> sh script:base_root_cmd+cmd+"'" }
ansiColor('css') {
exec_cmd("""
cd ./jami/contrib
python3 -m pip install -r ../SDK/requirements.txt
ANDROID_ABI="armeabi-v7a" sh build-dependencies.sh
ANDROID_ABI="arm64-v8a" sh build-dependencies.sh
ANDROID_ABI="x86_64" sh build-dependencies.sh
""")
}
}
}
}
}
}
stage('Build GreenScreen') {
steps {
script {
if(env.GERRIT_TOPIC == "all" || env.GERRIT_TOPIC == "GreenScreen") {
docker.image('plugins-android').withRun('-t \
-v /var/lib/jenkins/android-plugins/tarballs:/home/gradle/jami/daemon/contrib/tarballs:rw \
-v /var/lib/jenkins/android-plugins/aarch64-linux-android:/home/gradle/jami/daemon/contrib/aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-aarch64-linux-android:/home/gradle/jami/daemon/contrib/native-aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/x86_64-linux-android:/home/gradle/jami/daemon/contrib/x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-x86_64-linux-android:/home/gradle/jami/daemon/contrib/native-x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/arm-linux-android:/home/gradle/jami/daemon/contrib/arm-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-arm-linux-android:/home/gradle/jami/daemon/contrib/native-arm-linux-android:rw \
-v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') {
container -> code:{
def base_cmd = 'docker exec -u '+jenkinsUser+' '+container.id+" sh -c '"
def base_root_cmd = 'docker exec '+container.id+" sh -c '"
def exec_cmd = { cmd -> sh script:base_cmd+cmd+"'" }
def exec_root_cmd = { cmd -> sh script:base_root_cmd+cmd+"'" }
ansiColor('css') {
exec_cmd("""
cd jami
ANDROID_ABI="armeabi-v7a arm64-v8a x86_64" python3 build-plugin.py --projects="GreenScreen" --distribution="android"
""")
}
}
}
if (env.ARCHIVE == 'false') {
sshagent(credentials: [env.SSH_CREDENTIALS]) {
// def sshPrivateKey = '/var/lib/jenkins/.ssh/gplpriv'
def remoteHost = env.SSH_HOST_DL_RING_CX
def remoteBaseDir = '/srv/repository/ring/plugins/GreenScreen/android'
sh """
rsync --verbose build/android/GreenScreen.jpl ${remoteHost}:${remoteBaseDir}/archive/GreenScreen-\$(date '+%Y%m%d%H%M').jpl
rsync --verbose build/android/GreenScreen.jpl ${remoteHost}:${remoteBaseDir}/GreenScreen.jpl
"""
}
} else {
archiveArtifacts 'build/android/GreenScreen.jpl'
}
}
}
}
}
stage('Build AudioFilter') {
steps {
script {
if(env.GERRIT_TOPIC == "all" || env.GERRIT_TOPIC == "AudioFilter") {
docker.image('plugins-android').withRun('-t \
-v /var/lib/jenkins/android-plugins/tarballs:/home/gradle/jami/daemon/contrib/tarballs:rw \
-v /var/lib/jenkins/android-plugins/aarch64-linux-android:/home/gradle/jami/daemon/contrib/aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-aarch64-linux-android:/home/gradle/jami/daemon/contrib/native-aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/x86_64-linux-android:/home/gradle/jami/daemon/contrib/x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-x86_64-linux-android:/home/gradle/jami/daemon/contrib/native-x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/arm-linux-android:/home/gradle/jami/daemon/contrib/arm-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-arm-linux-android:/home/gradle/jami/daemon/contrib/native-arm-linux-android:rw \
-v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') {
container -> code:{
def base_cmd = 'docker exec -u '+jenkinsUser+' '+container.id+" sh -c '"
def base_root_cmd = 'docker exec '+container.id+" sh -c '"
def exec_cmd = { cmd -> sh script:base_cmd+cmd+"'" }
def exec_root_cmd = { cmd -> sh script:base_root_cmd+cmd+"'" }
ansiColor('css') {
exec_cmd("""
cd jami
ANDROID_ABI="armeabi-v7a arm64-v8a x86_64" python3 build-plugin.py --projects="AudioFilter" --distribution="android"
""")
}
}
}
if (env.ARCHIVE == 'false') {
sshagent(credentials: [env.SSH_CREDENTIALS]) {
// def sshPrivateKey = '/var/lib/jenkins/.ssh/gplpriv'
def remoteHost = env.SSH_HOST_DL_RING_CX
def remoteBaseDir = '/srv/repository/ring/plugins/AudioFilter/android'
sh """
rsync --verbose build/android/AudioFilter.jpl ${remoteHost}:${remoteBaseDir}/archive/AudioFilter-\$(date '+%Y%m%d%H%M').jpl
rsync --verbose build/android/AudioFilter.jpl ${remoteHost}:${remoteBaseDir}/AudioFilter.jpl
"""
}
} else {
archiveArtifacts 'build/android/AudioFilter.jpl'
}
}
}
}
}
stage('Build AutoAnswer') {
steps {
script {
if(env.GERRIT_TOPIC == "all" || env.GERRIT_TOPIC == "AutoAnswer") {
docker.image('plugins-android').withRun('-t \
-v /var/lib/jenkins/android-plugins/tarballs:/home/gradle/jami/daemon/contrib/tarballs:rw \
-v /var/lib/jenkins/android-plugins/aarch64-linux-android:/home/gradle/jami/daemon/contrib/aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-aarch64-linux-android:/home/gradle/jami/daemon/contrib/native-aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/x86_64-linux-android:/home/gradle/jami/daemon/contrib/x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-x86_64-linux-android:/home/gradle/jami/daemon/contrib/native-x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/arm-linux-android:/home/gradle/jami/daemon/contrib/arm-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-arm-linux-android:/home/gradle/jami/daemon/contrib/native-arm-linux-android:rw \
-v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') {
container -> code:{
def base_cmd = 'docker exec -u '+jenkinsUser+' '+container.id+" sh -c '"
def base_root_cmd = 'docker exec '+container.id+" sh -c '"
def exec_cmd = { cmd -> sh script:base_cmd+cmd+"'" }
def exec_root_cmd = { cmd -> sh script:base_root_cmd+cmd+"'" }
ansiColor('css') {
exec_cmd("""
cd jami
ANDROID_ABI="armeabi-v7a arm64-v8a x86_64" python3 build-plugin.py --projects="AutoAnswer" --distribution="android"
""")
}
}
}
if (env.ARCHIVE == 'false') {
sshagent(credentials: [env.SSH_CREDENTIALS]) {
// def sshPrivateKey = '/var/lib/jenkins/.ssh/gplpriv'
def remoteHost = env.SSH_HOST_DL_RING_CX
def remoteBaseDir = '/srv/repository/ring/plugins/AutoAnswer/android'
sh """
rsync --verbose build/android/AutoAnswer.jpl ${remoteHost}:${remoteBaseDir}/archive/AutoAnswer-\$(date '+%Y%m%d%H%M').jpl
rsync --verbose build/android/AutoAnswer.jpl ${remoteHost}:${remoteBaseDir}/AutoAnswer.jpl
"""
}
} else {
archiveArtifacts 'build/android/AutoAnswer.jpl'
}
}
}
}
}
stage('Build WaterMark') {
steps {
script {
if(env.GERRIT_TOPIC == "all" || env.GERRIT_TOPIC == "WaterMark") {
docker.image('plugins-android').withRun('-t \
-v /var/lib/jenkins/android-plugins/tarballs:/home/gradle/jami/daemon/contrib/tarballs:rw \
-v /var/lib/jenkins/android-plugins/aarch64-linux-android:/home/gradle/jami/daemon/contrib/aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-aarch64-linux-android:/home/gradle/jami/daemon/contrib/native-aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/x86_64-linux-android:/home/gradle/jami/daemon/contrib/x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-x86_64-linux-android:/home/gradle/jami/daemon/contrib/native-x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/arm-linux-android:/home/gradle/jami/daemon/contrib/arm-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-arm-linux-android:/home/gradle/jami/daemon/contrib/native-arm-linux-android:rw \
-v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') {
container -> code:{
def base_cmd = 'docker exec -u '+jenkinsUser+' '+container.id+" sh -c '"
def base_root_cmd = 'docker exec '+container.id+" sh -c '"
def exec_cmd = { cmd -> sh script:base_cmd+cmd+"'" }
def exec_root_cmd = { cmd -> sh script:base_root_cmd+cmd+"'" }
ansiColor('css') {
exec_cmd("""
cd jami
ANDROID_ABI="armeabi-v7a arm64-v8a x86_64" python3 build-plugin.py --projects="WaterMark" --distribution="android"
""")
}
}
}
if (env.ARCHIVE == 'false') {
sshagent(credentials: [env.SSH_CREDENTIALS]) {
def remoteHost = env.SSH_HOST_DL_RING_CX
def remoteBaseDir = '/srv/repository/ring/plugins/WaterMark/android'
sh """
rsync --verbose build/android/WaterMark.jpl ${remoteHost}:${remoteBaseDir}/archive/WaterMark-\$(date '+%Y%m%d%H%M').jpl
rsync --verbose build/android/WaterMark.jpl ${remoteHost}:${remoteBaseDir}/WaterMark.jpl
"""
}
} else {
archiveArtifacts 'build/android/WaterMark.jpl'
}
}
}
}
}
stage('Build Whisper') {
steps {
script {
if(env.GERRIT_TOPIC == "all" || env.GERRIT_TOPIC == "Whisper" || env.GERRIT_TOPIC == "WhisperTranscript") {
docker.image('plugins-android').withRun('-t \
-v /var/lib/jenkins/android-plugins/tarballs:/home/gradle/jami/daemon/contrib/tarballs:rw \
-v /var/lib/jenkins/android-plugins/aarch64-linux-android:/home/gradle/jami/daemon/contrib/aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-aarch64-linux-android:/home/gradle/jami/daemon/contrib/native-aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/x86_64-linux-android:/home/gradle/jami/daemon/contrib/x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-x86_64-linux-android:/home/gradle/jami/daemon/contrib/native-x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/arm-linux-android:/home/gradle/jami/daemon/contrib/arm-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-arm-linux-android:/home/gradle/jami/daemon/contrib/native-arm-linux-android:rw \
-v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') {
container -> code:{
def base_cmd = 'docker exec -u '+jenkinsUser+' '+container.id+" sh -c '"
def base_root_cmd = 'docker exec '+container.id+" sh -c '"
def exec_cmd = { cmd -> sh script:base_cmd+cmd+"'" }
def exec_root_cmd = { cmd -> sh script:base_root_cmd+cmd+"'" }
ansiColor('css') {
exec_cmd("""
cd jami
AUTHOR="SFL" DIVISION="Internal" ANDROID_ABI="arm64-v8a" python3 build-plugin.py --projects="WhisperTranscript" --distribution="android"
""")
}
}
}
if (env.ARCHIVE == 'false') {
sshagent(credentials: [env.SSH_CREDENTIALS]) {
// def sshPrivateKey = '/var/lib/jenkins/.ssh/gplpriv'
def remoteHost = env.SSH_HOST_DL_RING_CX
def remoteBaseDir = '/srv/repository/ring/plugins/WhisperTranscript/android'
sh """
rsync --verbose build/android/WhisperTranscript.jpl ${remoteHost}:${remoteBaseDir}/archive/WhisperTranscript-\$(date '+%Y%m%d%H%M').jpl
rsync --verbose build/android/WhisperTranscript.jpl ${remoteHost}:${remoteBaseDir}/WhisperTranscript.jpl
"""
}
} else {
archiveArtifacts 'build/android/WhisperTranscript.jpl'
}
}
}
}
}
stage('Build Dispatcher') {
steps {
script {
if(env.GERRIT_TOPIC == "all" || env.GERRIT_TOPIC == "Dispatcher") {
docker.image('plugins-android').withRun('-t \
-v /var/lib/jenkins/android-plugins/tarballs:/home/gradle/jami/daemon/contrib/tarballs:rw \
-v /var/lib/jenkins/android-plugins/aarch64-linux-android:/home/gradle/jami/daemon/contrib/aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-aarch64-linux-android:/home/gradle/jami/daemon/contrib/native-aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/x86_64-linux-android:/home/gradle/jami/daemon/contrib/x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-x86_64-linux-android:/home/gradle/jami/daemon/contrib/native-x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/arm-linux-android:/home/gradle/jami/daemon/contrib/arm-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-arm-linux-android:/home/gradle/jami/daemon/contrib/native-arm-linux-android:rw \
-v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') {
container -> code:{
def base_cmd = 'docker exec -u '+jenkinsUser+' '+container.id+" sh -c '"
def base_root_cmd = 'docker exec '+container.id+" sh -c '"
def exec_cmd = { cmd -> sh script:base_cmd+cmd+"'" }
def exec_root_cmd = { cmd -> sh script:base_root_cmd+cmd+"'" }
ansiColor('css') {
exec_cmd("""
cd jami
ANDROID_ABI="armeabi-v7a arm64-v8a x86_64" python3 build-plugin.py --projects="Dispatcher" --distribution="android"
""")
}
}
}
if (env.ARCHIVE == 'false') {
sshagent(credentials: [env.SSH_CREDENTIALS]) {
def remoteHost = env.SSH_HOST_DL_RING_CX
def remoteBaseDir = '/srv/repository/ring/plugins/Dispatcher/android'
sh """
rsync --verbose build/android/Dispatcher.jpl ${remoteHost}:${remoteBaseDir}/archive/Dispatcher-\$(date '+%Y%m%d%H%M').jpl
rsync --verbose build/android/Dispatcher.jpl ${remoteHost}:${remoteBaseDir}/Dispatcher.jpl
"""
}
} else {
archiveArtifacts 'build/android/Dispatcher.jpl'
}
}
}
}
}
stage('Build Agent') {
steps {
script {
if(env.GERRIT_TOPIC == "all" || env.GERRIT_TOPIC == "Agent") {
docker.image('plugins-android').withRun('-t \
-v /var/lib/jenkins/android-plugins/tarballs:/home/gradle/jami/daemon/contrib/tarballs:rw \
-v /var/lib/jenkins/android-plugins/aarch64-linux-android:/home/gradle/jami/daemon/contrib/aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-aarch64-linux-android:/home/gradle/jami/daemon/contrib/native-aarch64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/x86_64-linux-android:/home/gradle/jami/daemon/contrib/x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-x86_64-linux-android:/home/gradle/jami/daemon/contrib/native-x86_64-linux-android:rw \
-v /var/lib/jenkins/android-plugins/arm-linux-android:/home/gradle/jami/daemon/contrib/arm-linux-android:rw \
-v /var/lib/jenkins/android-plugins/native-arm-linux-android:/home/gradle/jami/daemon/contrib/native-arm-linux-android:rw \
-v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') {
container -> code:{
def base_cmd = 'docker exec -u '+jenkinsUser+' '+container.id+" sh -c '"
def base_root_cmd = 'docker exec '+container.id+" sh -c '"
def exec_cmd = { cmd -> sh script:base_cmd+cmd+"'" }
def exec_root_cmd = { cmd -> sh script:base_root_cmd+cmd+"'" }
ansiColor('css') {
exec_cmd("""
cd jami
ANDROID_ABI="armeabi-v7a arm64-v8a x86_64" python3 build-plugin.py --projects="Agent" --distribution="android"
""")
}
}
}
if (env.ARCHIVE == 'false') {
sshagent(credentials: [env.SSH_CREDENTIALS]) {
def remoteHost = env.SSH_HOST_DL_RING_CX
def remoteBaseDir = '/srv/repository/ring/plugins/Agent/android'
sh """
rsync --verbose build/android/Agent.jpl ${remoteHost}:${remoteBaseDir}/archive/Agent-\$(date '+%Y%m%d%H%M').jpl
rsync --verbose build/android/Agent.jpl ${remoteHost}:${remoteBaseDir}/Agent.jpl
"""
}
} else {
archiveArtifacts 'build/android/Agent.jpl'
}
}
}
}
}
}
}