From bf51c42b8beb9627cd718f3bf45441eae36a1c6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Thu, 23 Nov 2023 13:47:28 -0500 Subject: [PATCH] build: fix CI on android This patch is far from perfect, but at least CI is fixed. I opened other tickets to describe the TODO list. Update Dockerfile to not use a random image Avoid to build ffmpeg multiple times as it's already built in contrib. Update android tools. Update daemon Start jenkinsfile Remove useless version/branchVersion as it's in the manifest now Change-Id: Ia64b18ac861a7839e40e83b36c0595534719cb89 --- AudioFilter/build.sh | 31 ++-- AutoAnswer/build.sh | 16 +- GreenScreen/build.sh | 35 +++-- HelloWorld/build.sh | 16 +- README_ASSEMBLE.md | 10 +- SDK/Templates/build.sh | 16 +- TensorflowSegmentation/build.sh | 16 +- TestSuite/build.sh | 16 +- WaterMark/build.sh | 31 ++-- WhisperTranscript/build.sh | 29 ++-- contrib/build-dependencies.sh | 12 +- contrib/install-cmake.sh | 15 ++ daemon | 2 +- docker/Dockerfile_android_onnxruntime | 39 +++-- extras/ci/android/Jenkinsfile | 216 +++++++++++++++++++++----- extras/ci/gnulinux/Jenkinsfile | 2 +- 16 files changed, 338 insertions(+), 164 deletions(-) create mode 100755 contrib/install-cmake.sh diff --git a/AudioFilter/build.sh b/AudioFilter/build.sh index 1e013b2..7e70a0f 100755 --- a/AudioFilter/build.sh +++ b/AudioFilter/build.sh @@ -13,7 +13,7 @@ EXTRAPATH='' if [ -z "${DAEMON}" ]; then - DAEMON="./../daemon" + DAEMON=${DAEMON:="./../daemon"} echo "DAEMON not provided, building with ${DAEMON}" fi @@ -59,7 +59,7 @@ while getopts t:c:p:d OPT; do esac done -cp -r ffmpeg ${CONTRIB_PATH}/src/ +#cp -r ffmpeg ${CONTRIB_PATH}/src/ cp -r ../contrib/mp3lame ${CONTRIB_PATH}/src/ if [ "${PLATFORM}" = "linux-gnu" ] || [ "${PLATFORM}" = "redhat-linux" ] @@ -195,7 +195,7 @@ then python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} if [ -z "$ANDROID_NDK" ]; then - ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462" + ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/26.1.10909125" echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}" fi @@ -225,18 +225,18 @@ then if [ "$CURRENT_ABI" = armeabi-v7a ] then - export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang - export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++ + export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang + export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang++ elif [ "$CURRENT_ABI" = arm64-v8a ] then - export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/aarch64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/aarch64-linux-android24-clang++ elif [ "$CURRENT_ABI" = x86_64 ] then - export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/x86_64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/x86_64-linux-android24-clang++ else echo "ABI NOT OK" >&2 @@ -262,13 +262,14 @@ then #NDK SOURCES FOR cpufeatures NDK_SOURCES=${ANDROID_NDK}/sources/android - if [ -f "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" ]; then - rm "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" - fi + #if [ -f "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" ]; then + # rm "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" + #fi WORKPATH=$(pwd) - cd "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/" - make .ffmpeg -j$(nproc) - rm .ffmpeg + #cd "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/" + #make .opus -j$(nproc) + #make .ffmpeg -j$(nproc) + #rm .ffmpeg cd ${WORKPATH} #========================================================= diff --git a/AutoAnswer/build.sh b/AutoAnswer/build.sh index d7acf54..ab5552b 100755 --- a/AutoAnswer/build.sh +++ b/AutoAnswer/build.sh @@ -12,7 +12,7 @@ EXTRAPATH='' # -d: debug program. if [ -z "${DAEMON}" ]; then - DAEMON="./../daemon" + DAEMON=${DAEMON:="./../daemon"} echo "DAEMON not provided, building with ${DAEMON}" fi @@ -115,7 +115,7 @@ then python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} if [ -z "$ANDROID_NDK" ]; then - ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462" + ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/26.1.10909125" echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}" fi @@ -145,18 +145,18 @@ then if [ "$CURRENT_ABI" = armeabi-v7a ] then - export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang - export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++ + export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang + export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang++ elif [ "$CURRENT_ABI" = arm64-v8a ] then - export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/aarch64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/aarch64-linux-android24-clang++ elif [ "$CURRENT_ABI" = x86_64 ] then - export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/x86_64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/x86_64-linux-android24-clang++ else echo "ABI NOT OK" >&2 diff --git a/GreenScreen/build.sh b/GreenScreen/build.sh index 1b3422d..1273e44 100755 --- a/GreenScreen/build.sh +++ b/GreenScreen/build.sh @@ -1,6 +1,7 @@ #! /bin/bash # Build the plugin for the project set -e +set -x export OSTYPE ARCH=$(uname -m) EXTRAPATH='' @@ -12,7 +13,7 @@ EXTRAPATH='' # -d: debug program. if [ -z "${DAEMON}" ]; then - DAEMON="./../daemon" + DAEMON=${DAEMON:="./../daemon"} echo "DAEMON not provided, building with ${DAEMON}" fi if [ -z "${PROCESSOR}" ]; then @@ -73,7 +74,7 @@ while getopts t:c:p:d OPT; do esac done -cp -r ffmpeg ${CONTRIB_PATH}/src/ +#cp -r ffmpeg ${CONTRIB_PATH}/src/ cp -r ../contrib/rav1e ${CONTRIB_PATH}/src/ if [ "${PLATFORM}" = "linux-gnu" ] || [ "${PLATFORM}" = "redhat-linux" ] @@ -272,7 +273,7 @@ then python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} if [ -z "$ANDROID_NDK" ]; then - ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462" + ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/26.1.10909125" echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}" fi @@ -302,18 +303,18 @@ then if [ "$CURRENT_ABI" = armeabi-v7a ] then - export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang - export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++ + export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang + export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang++ elif [ "$CURRENT_ABI" = arm64-v8a ] then - export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/aarch64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/aarch64-linux-android24-clang++ elif [ "$CURRENT_ABI" = x86_64 ] then - export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/x86_64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/x86_64-linux-android24-clang++ else echo "ABI NOT OK" >&2 @@ -339,14 +340,15 @@ then #NDK SOURCES FOR cpufeatures NDK_SOURCES=${ANDROID_NDK}/sources/android - if [ -f "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" ]; then - rm "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" - fi + #if [ -f "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" ]; then + # rm "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" + #fi WORKPATH=$(pwd) - cd "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/" - make .ffmpeg -j$(nproc) - rm .ffmpeg + #cd "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/" + #make .opus -j$(nproc) + #make .ffmpeg -j$(nproc) + #rm .ffmpeg cd ${WORKPATH} #========================================================= @@ -364,6 +366,9 @@ then ONNX_PATH="${CONTRIB_PATH}/${CONTRIB_PLATFORM}" fi + # DIRTY HACK TO GET WORKING ONNX + cp ${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/onnx/build/Linux/Release/*.so ${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/ || true + # Create so destination folder $CXX --std=c++17 -O3 -fPIC \ -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \ diff --git a/HelloWorld/build.sh b/HelloWorld/build.sh index 5f630ee..a06b18a 100755 --- a/HelloWorld/build.sh +++ b/HelloWorld/build.sh @@ -12,7 +12,7 @@ EXTRAPATH='' if [ -z "${DAEMON}" ]; then - DAEMON="./../daemon" + DAEMON=${DAEMON:="./../daemon"} echo "DAEMON not provided, building with ${DAEMON}" fi @@ -142,7 +142,7 @@ then python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} if [ -z "$ANDROID_NDK" ]; then - ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462" + ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/26.1.10909125" echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}" fi @@ -172,18 +172,18 @@ then if [ "$CURRENT_ABI" = armeabi-v7a ] then - export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang - export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++ + export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang + export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang++ elif [ "$CURRENT_ABI" = arm64-v8a ] then - export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/aarch64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/aarch64-linux-android24-clang++ elif [ "$CURRENT_ABI" = x86_64 ] then - export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/x86_64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/x86_64-linux-android24-clang++ else echo "ABI NOT OK" >&2 diff --git a/README_ASSEMBLE.md b/README_ASSEMBLE.md index 39ca518..5eddb31 100644 --- a/README_ASSEMBLE.md +++ b/README_ASSEMBLE.md @@ -11,7 +11,7 @@ For Android: export ANDROID_NDK=<NDK> export ANDROID_ABI=arm64-v8a - export ANDROID_API=29 + export ANDROID_API=24 export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64 export TARGET=aarch64-linux-android export CC=$TOOLCHAIN/bin/$TARGET$ANDROID_API-clang @@ -72,9 +72,9 @@ For Linux: or For Tensorflow C++ API: $ bazel build --config=v1 --define framework_shared_object=false //tensorflow:libtensorflow_cc.so - - OBS.: If you want to build Tensorflow C++ API with GPU suport, be sure to have a CUDA capable GPU and that you have - followed all installation steps for the Nvidia drivers, CUDA Toolkit, CUDNN, Tensor RT, that their versions + + OBS.: If you want to build Tensorflow C++ API with GPU suport, be sure to have a CUDA capable GPU and that you have + followed all installation steps for the Nvidia drivers, CUDA Toolkit, CUDNN, Tensor RT, that their versions matches and that they are correct for the Tensorflow version you want to build. The following links may be very helpfull: - https://www.tensorflow.org/install/source - https://developer.nvidia.com/cuda-gpus @@ -196,7 +196,7 @@ TENSORFLOW C++ API INCLUDES ASSEMBLE INSTRUCTIONS third_party/ eigen3/ Eigen/ - -> keep folder structure and copy all files from + -> keep folder structure and copy all files from "<tensorflow>/bazel-tensorflow/external/eigen_archive/Eigen/" unsupported/ Eigen/ diff --git a/SDK/Templates/build.sh b/SDK/Templates/build.sh index 7dfadbf..99c6253 100644 --- a/SDK/Templates/build.sh +++ b/SDK/Templates/build.sh @@ -12,7 +12,7 @@ EXTRAPATH='' if [ -z "${DAEMON}" ]; then - DAEMON="./../daemon" + DAEMON=${DAEMON:="./../daemon"} echo "DAEMON not provided, building with ${DAEMON}" fi @@ -84,7 +84,7 @@ then python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} if [ -z "$ANDROID_NDK" ]; then - ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462" + ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/26.1.10909125" echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}" fi @@ -114,18 +114,18 @@ then if [ "$CURRENT_ABI" = armeabi-v7a ] then - export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang - export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++ + export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang + export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang++ elif [ "$CURRENT_ABI" = arm64-v8a ] then - export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/aarch64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/aarch64-linux-android24-clang++ elif [ "$CURRENT_ABI" = x86_64 ] then - export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/x86_64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/x86_64-linux-android24-clang++ else echo "ABI NOT OK" >&2 diff --git a/TensorflowSegmentation/build.sh b/TensorflowSegmentation/build.sh index c27817f..8e5d8f2 100755 --- a/TensorflowSegmentation/build.sh +++ b/TensorflowSegmentation/build.sh @@ -12,7 +12,7 @@ EXTRAPATH='' if [ -z "${DAEMON}" ]; then - DAEMON="./../daemon" + DAEMON=${DAEMON:="./../daemon"} echo "DAEMON not provided, building with ${DAEMON}" fi @@ -186,7 +186,7 @@ then python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} if [ -z "$ANDROID_NDK" ]; then - ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462" + ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/26.1.10909125" echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}" fi @@ -216,18 +216,18 @@ then if [ "$CURRENT_ABI" = armeabi-v7a ] then - export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang - export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++ + export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang + export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang++ elif [ "$CURRENT_ABI" = arm64-v8a ] then - export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/aarch64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/aarch64-linux-android24-clang++ elif [ "$CURRENT_ABI" = x86_64 ] then - export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/x86_64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/x86_64-linux-android24-clang++ else echo "ABI NOT OK" >&2 diff --git a/TestSuite/build.sh b/TestSuite/build.sh index 8f27b90..1ca8707 100755 --- a/TestSuite/build.sh +++ b/TestSuite/build.sh @@ -12,7 +12,7 @@ EXTRAPATH='' if [ -z "${DAEMON}" ]; then - DAEMON="./../daemon" + DAEMON=${DAEMON:="./../daemon"} echo "DAEMON not provided, building with ${DAEMON}" fi @@ -135,7 +135,7 @@ then python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} if [ -z "$ANDROID_NDK" ]; then - ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462" + ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/26.1.10909125" echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}" fi @@ -165,18 +165,18 @@ then if [ "$CURRENT_ABI" = armeabi-v7a ] then - export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang - export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++ + export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang + export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang++ elif [ "$CURRENT_ABI" = arm64-v8a ] then - export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/aarch64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/aarch64-linux-android24-clang++ elif [ "$CURRENT_ABI" = x86_64 ] then - export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/x86_64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/x86_64-linux-android24-clang++ else echo "ABI NOT OK" >&2 diff --git a/WaterMark/build.sh b/WaterMark/build.sh index 4c2f37d..1c7c2d0 100755 --- a/WaterMark/build.sh +++ b/WaterMark/build.sh @@ -13,7 +13,7 @@ EXTRAPATH='' if [ -z "${DAEMON}" ]; then - DAEMON="./../daemon" + DAEMON=${DAEMON:="./../daemon"} echo "DAEMON not provided, building with ${DAEMON}" fi @@ -59,7 +59,7 @@ while getopts t:c:p:d OPT; do esac done -cp -r ffmpeg ${CONTRIB_PATH}/src/ +#cp -r ffmpeg ${CONTRIB_PATH}/src/ cp -r ../contrib/rav1e ${CONTRIB_PATH}/src/ if [ "${PLATFORM}" = "linux-gnu" ] || [ "${PLATFORM}" = "redhat-linux" ] @@ -200,7 +200,7 @@ then python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} if [ -z "$ANDROID_NDK" ]; then - ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462" + ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/26.1.10909125" echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}" fi @@ -230,18 +230,18 @@ then if [ "$CURRENT_ABI" = armeabi-v7a ] then - export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang - export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++ + export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang + export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang++ elif [ "$CURRENT_ABI" = arm64-v8a ] then - export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/aarch64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/aarch64-linux-android24-clang++ elif [ "$CURRENT_ABI" = x86_64 ] then - export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/x86_64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/x86_64-linux-android24-clang++ else echo "ABI NOT OK" >&2 @@ -264,14 +264,15 @@ then CONTRIB_PLATFORM=x86_64-linux-android fi - if [ -f "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" ]; then - rm "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" - fi + #if [ -f "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" ]; then + # rm "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" + #fi WORKPATH=$(pwd) - cd "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/" - make .ffmpeg -j$(nproc) - rm .ffmpeg + #cd "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/" + #make .opus -j$(nproc) + #make .ffmpeg -j$(nproc) + #rm .ffmpeg cd ${WORKPATH} #========================================================= diff --git a/WhisperTranscript/build.sh b/WhisperTranscript/build.sh index 6207e9e..365a82c 100755 --- a/WhisperTranscript/build.sh +++ b/WhisperTranscript/build.sh @@ -12,10 +12,10 @@ EXTRAPATH='' # -d: debug program. if [ -z "${DAEMON}" ]; then + DAEMON=${DAEMON:="./../daemon"} echo "DAEMON not provided, building with ./../daemon" fi -DAEMON=${DAEMON:="./../daemon"} CONTRIB_PATH=${CONTRIB_PATH:="${DAEMON}/contrib"} CONTRIB_BUILD_DIR=${CONTRIB_BUILD_DIR:="native"} @@ -76,7 +76,7 @@ fi echo $PROCESSOR -cp -r ffmpeg ${CONTRIB_PATH}/src/ +#cp -r ffmpeg ${CONTRIB_PATH}/src/ cp -r whispercpp ${CONTRIB_PATH}/src/ cp -r ../contrib/rav1e ${CONTRIB_PATH}/src/ @@ -256,7 +256,7 @@ then python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} if [ -z "$ANDROID_NDK" ]; then - ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462" + ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/26.1.10909125" echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}" fi @@ -286,18 +286,18 @@ then if [ "$CURRENT_ABI" = armeabi-v7a ] then - export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang - export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++ + export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang + export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi24-clang++ elif [ "$CURRENT_ABI" = arm64-v8a ] then - export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/aarch64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/aarch64-linux-android24-clang++ elif [ "$CURRENT_ABI" = x86_64 ] then - export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang - export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++ + export CC=$TOOLCHAIN/bin/x86_64-linux-android24-clang + export CXX=$TOOLCHAIN/bin/x86_64-linux-android24-clang++ else echo "ABI NOT OK" >&2 @@ -320,16 +320,17 @@ then CONTRIB_PLATFORM=x86_64-linux-android fi - if [ -f "${CONTRIB_BUILD_PATH}-${CONTRIB_PLATFORM}/.ffmpeg" ]; then - rm "${CONTRIB_BUILD_PATH}-${CONTRIB_PLATFORM}/.ffmpeg" - fi + #if [ -f "${CONTRIB_BUILD_PATH}-${CONTRIB_PLATFORM}/.ffmpeg" ]; then + # rm "${CONTRIB_BUILD_PATH}-${CONTRIB_PLATFORM}/.ffmpeg" + #fi WORKPATH=$(pwd) cd "${CONTRIB_BUILD_PATH}-${CONTRIB_PLATFORM}/" - make .ffmpeg -j$(nproc) + #make .opus -j$(nproc) + #make .ffmpeg -j$(nproc) make .whispercpp -j$(nproc) rm .whispercpp - rm .ffmpeg + #rm .ffmpeg cd ${WORKPATH} #========================================================= diff --git a/contrib/build-dependencies.sh b/contrib/build-dependencies.sh index 1009ae5..ca95ecb 100755 --- a/contrib/build-dependencies.sh +++ b/contrib/build-dependencies.sh @@ -42,7 +42,7 @@ fi TARGET_CC=${TARGET_CC:-$TARGET} -export API=21 +export API=24 # This value is from minSDK in jami-client-android export ANDROID_API=android-$API export ANDROID_TOOLCHAIN="${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64" export TARGET @@ -81,7 +81,7 @@ fi cd $DAEMON_DIR/extras/tools export PATH=`pwd`/build/bin:$PATH echo "Building tools" -./bootstrap +./bootstrap # --cache-dir=/var/cache/jami --cache-builds make $MAKEFLAGS make .pkg-config make .gas @@ -98,7 +98,7 @@ export STRIP=$NDK_TOOLCHAIN_PATH/llvm-strip FLAGS_COMMON="-fPIC" EXTRA_CFLAGS="${EXTRA_CFLAGS} ${FLAGS_COMMON}" EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} ${FLAGS_COMMON}" -EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -llog" +EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -llog ${FLAGS_COMMON}" ############ # Contribs # @@ -114,7 +114,7 @@ cp -r ${CURRENTDIR}/freetype ${DAEMON_DIR}/contrib/src cd ${CONTRIB_DIR} -../bootstrap --host=${TARGET} --enable-freetype --enable-x264 --enable-ffmpeg \ +../bootstrap --host=${TARGET} --enable-freetype --disable-x264 --enable-ffmpeg \ --disable-webrtc-audio-processing --disable-argon2 \ --disable-asio --enable-fmt --disable-gcrypt --disable-gmp \ --disable-gnutls --disable-gpg-error --disable-gsm \ @@ -122,8 +122,8 @@ cd ${CONTRIB_DIR} --disable-libarchive --disable-libressl --enable-msgpack \ --disable-natpmp --disable-nettle --enable-opencv --enable-opendht \ --disable-pjproject --disable-portaudio --disable-restinio \ - --disable-secp256k1 --disable-speexdsp --disable-upnp \ - --disable-uuid --disable-yaml-cpp + --disable-secp256k1 --disable-speex --disable-speexdsp --disable-upnp \ + --disable-uuid --disable-yaml-cpp --enable-onnx --disable-dhtnet --enable-opus # \ --cache-dir=/var/cache/jami --cache-builds make list make fetch diff --git a/contrib/install-cmake.sh b/contrib/install-cmake.sh new file mode 100755 index 0000000..ea07269 --- /dev/null +++ b/contrib/install-cmake.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +set -e + +if command -v apt-get &> /dev/null +then + apt-get remove cmake cmake-data -y +fi + +wget https://github.com/Kitware/CMake/releases/download/v3.27.8/cmake-3.27.8-Linux-x86_64.sh \ + -q -O /tmp/cmake-install.sh +echo "c43e9237360f8cb227c721bb7cd497f80cff692a7dc0ab10d258f4c22d6aec04 /tmp/cmake-install.sh" | sha256sum --check +chmod u+x /tmp/cmake-install.sh +/tmp/cmake-install.sh --skip-license --prefix=/usr/local/ +rm /tmp/cmake-install.sh \ No newline at end of file diff --git a/daemon b/daemon index 6c433a0..4392c72 160000 --- a/daemon +++ b/daemon @@ -1 +1 @@ -Subproject commit 6c433a087a0d24cb95aae3bdcaeee5e367e46a5d +Subproject commit 4392c72206b3a7c5f294fc187b2f6904e660890e diff --git a/docker/Dockerfile_android_onnxruntime b/docker/Dockerfile_android_onnxruntime index 99d0a56..91f2abc 100644 --- a/docker/Dockerfile_android_onnxruntime +++ b/docker/Dockerfile_android_onnxruntime @@ -1,14 +1,12 @@ -FROM sflagsantos/onnxruntime1.12.0-android +FROM gradle:jdk17 ENV DEBIAN_FRONTEND noninteractive -ENV EXTRALIBS_PATH=/home/gradle/Libs/onnxruntime/ ENV SSH_AUTH_SOCK /home/gradle/.sockets/ssh ENV LANG en_US.utf8 ENV LC_ALL en_US.utf8 RUN apt-get update && apt-get install -y --no-install-recommends \ - clang \ asciidoc \ autogen \ automake \ @@ -16,7 +14,9 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ autopoint \ gettext \ ca-certificates \ + clang \ cmake \ + default-jre \ bc \ bison \ build-essential \ @@ -39,38 +39,51 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ yasm \ nasm \ zip \ + libpcre2-dev \ libpcre3 \ libpcre3-dev \ + libavcodec-dev \ + libavutil-dev \ + libavformat-dev \ + libswscale-dev \ + libavdevice-dev \ + libopus-dev \ ruby ruby-dev \ - python3-distutils \ + python3-distutils \ && locale-gen $LANG $LC_ALL && update-locale $LANG $LC_ALL # Android SDK tools RUN echo "prefer-family = IPv6" >> /etc/wgetrc ENV ANDROID_HOME=/opt/android-sdk ENV ANDROID_SDK_ROOT=${ANDROID_HOME} -RUN wget -O /tmp/android-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip && \ +RUN wget -O /tmp/android-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip && \ mkdir -p ${ANDROID_HOME} && \ unzip -q -d ${ANDROID_HOME} /tmp/android-tools.zip && \ rm -f /tmp/android-tools.zip && \ chown -R root:root ${ANDROID_HOME} ENV PATH=${PATH}:${ANDROID_HOME}/cmdline-tools/bin -# Swig 4.0.2 -RUN wget -O /tmp/swig.tar.gz https://github.com/swig/swig/archive/rel-4.0.2.tar.gz && \ +# CMake 3.26 +ADD contrib/install-cmake.sh /opt/install-cmake.sh +RUN /opt/install-cmake.sh + +# Swig 4.1.1 +RUN wget -O /tmp/swig.tar.gz https://github.com/swig/swig/archive/v4.1.1.tar.gz && \ tar xzf /tmp/swig.tar.gz -C /opt && \ - cd /opt/swig-rel-4.0.2/ && ./autogen.sh && ./configure && make && make install && \ - cd .. && rm -rf /opt/swig-rel-4.0.2 /tmp/swig.tar.gz + cd /opt/swig-4.1.1/ && ./autogen.sh && ./configure && make && make install && \ + cd .. && rm -rf /opt/swig-4.1.1 /tmp/swig.tar.gz # Android SDK libraries, NDK RUN sdkmanager --sdk_root=${ANDROID_HOME} --update -RUN (while sleep 1; do echo "y"; done) | sdkmanager --channel=1 --sdk_root=${ANDROID_HOME} 'build-tools;32.0.0' \ - 'platforms;android-32'\ +RUN (while sleep 1; do echo "y"; done) | sdkmanager --channel=1 --sdk_root=${ANDROID_HOME} 'build-tools;34.0.0' \ + 'platforms;android-34'\ 'extras;android;m2repository'\ 'extras;google;m2repository'\ - 'ndk;25.0.8775105' + 'ndk;26.1.10909125' ENV ANDROID_SDK=${ANDROID_HOME} -ENV ANDROID_NDK=${ANDROID_HOME}/ndk/25.0.8775105 +ENV ANDROID_NDK=${ANDROID_HOME}/ndk/26.1.10909125 + +RUN chmod a+rX /home/gradle # Fastlane RUN gem install fastlane -NV diff --git a/extras/ci/android/Jenkinsfile b/extras/ci/android/Jenkinsfile index d6f4d7a..c8cced6 100644 --- a/extras/ci/android/Jenkinsfile +++ b/extras/ci/android/Jenkinsfile @@ -24,7 +24,7 @@ pipeline { agent { node { - label 'jami-buildmachine-04.mtl.sfl' + label 'jami-buildmachine-02.mtl.sfl' } } @@ -103,7 +103,7 @@ pipeline { stage('Building Docker Image') { steps { script { - docker.build('plugins-android', "-f docker/${dockerfile} --no-cache .") + docker.build('plugins-android', "-f docker/${dockerfile} .") } } } @@ -111,16 +111,20 @@ pipeline { stage('Setup and Build Dependencies') { steps { script { - docker.image('plugins-android').withRun('-t -u '+jenkinsUser+' -v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') { + docker.image('plugins-android').withRun('-t -v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') { container -> code:{ - def base_cmd = 'docker exec -t '+container.id+" sh -c '" - def exec_cmd = { cmd -> sh base_cmd+cmd+"'" } + 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 """) } } @@ -133,23 +137,35 @@ pipeline { steps { script { if(env.GERRIT_TOPIC == "all" || env.GERRIT_TOPIC == "GreenScreen") { - docker.image('plugins-android').withRun('-t -u '+jenkinsUser+' -v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') { + docker.image('plugins-android').withRun('-t -v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') { container -> code:{ - def base_cmd = 'docker exec -t '+container.id+" sh -c '" - def exec_cmd = { cmd -> sh base_cmd+cmd+"'" } + 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="GreenScreen" --distribution="android" + ANDROID_ABI="armeabi-v7a arm64-v8a x86_64" python3 build-plugin.py --projects="GreenScreen" --distribution="android" """) } } } - if (!fileExists("./build/android/GreenScreen.jpl")) { - error "GreenScreen build output not found" + 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' } - archiveArtifacts 'build/android/GreenScreen.jpl' } } } @@ -159,23 +175,35 @@ pipeline { steps { script { if(env.GERRIT_TOPIC == "all" || env.GERRIT_TOPIC == "AudioFilter") { - docker.image('plugins-android').withRun('-t -u '+jenkinsUser+' -v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') { + docker.image('plugins-android').withRun('-t -v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') { container -> code:{ - def base_cmd = 'docker exec -t '+container.id+" sh -c '" - def exec_cmd = { cmd -> sh base_cmd+cmd+"'" } + 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="AudioFilter" --distribution="android" + ANDROID_ABI="armeabi-v7a arm64-v8a x86_64" python3 build-plugin.py --projects="AudioFilter" --distribution="android" """) } } } - if (!fileExists("./build/android/AudioFilter.jpl")) { - error "AudioFilter build output not found" + 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' } - archiveArtifacts 'build/android/AudioFilter.jpl' } } } @@ -185,23 +213,35 @@ pipeline { steps { script { if(env.GERRIT_TOPIC == "all" || env.GERRIT_TOPIC == "AutoAnswer") { - docker.image('plugins-android').withRun('-t -u '+jenkinsUser+' -v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') { + docker.image('plugins-android').withRun('-t -v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') { container -> code:{ - def base_cmd = 'docker exec -t '+container.id+" sh -c '" - def exec_cmd = { cmd -> sh base_cmd+cmd+"'" } + 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="AutoAnswer" --distribution="android" + ANDROID_ABI="armeabi-v7a arm64-v8a x86_64" python3 build-plugin.py --projects="AutoAnswer" --distribution="android" """) } } } - if (!fileExists("./build/android/AutoAnswer.jpl")) { - error "AutoAnswer build output not found" + 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' } - archiveArtifacts 'build/android/AutoAnswer.jpl' } } } @@ -211,23 +251,35 @@ pipeline { steps { script { if(env.GERRIT_TOPIC == "all" || env.GERRIT_TOPIC == "WaterMark") { - docker.image('plugins-android').withRun('-t -u '+jenkinsUser+' -v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') { + docker.image('plugins-android').withRun('-t -v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') { container -> code:{ - def base_cmd = 'docker exec -t '+container.id+" sh -c '" - def exec_cmd = { cmd -> sh base_cmd+cmd+"'" } + 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="WaterMark" --distribution="android" + ANDROID_ABI="armeabi-v7a arm64-v8a x86_64" python3 build-plugin.py --projects="WaterMark" --distribution="android" """) } } } - if (!fileExists("./build/android/WaterMark.jpl")) { - error "WaterMark build output not found" + 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/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' } - archiveArtifacts 'build/android/WaterMark.jpl' } } } @@ -237,10 +289,12 @@ pipeline { steps { script { if(env.GERRIT_TOPIC == "all" || env.GERRIT_TOPIC == "Whisper" || env.GERRIT_TOPIC == "WhisperTranscript") { - docker.image('plugins-android').withRun('-t -u '+jenkinsUser+' -v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') { + docker.image('plugins-android').withRun('-t -v '+pwd()+':/home/gradle/jami:rw -e BATCH_MODE=1', '/bin/bash') { container -> code:{ - def base_cmd = 'docker exec -t '+container.id+" sh -c '" - def exec_cmd = { cmd -> sh base_cmd+cmd+"'" } + 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(""" @@ -250,10 +304,94 @@ pipeline { } } } - if (!fileExists("./build/android/WhisperTranscript.jpl")) { - error "WhisperTranscript build output not found" + 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 '+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 '+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' } - archiveArtifacts 'build/android/WhisperTranscript.jpl' } } } diff --git a/extras/ci/gnulinux/Jenkinsfile b/extras/ci/gnulinux/Jenkinsfile index e3d2450..8ed5b3d 100644 --- a/extras/ci/gnulinux/Jenkinsfile +++ b/extras/ci/gnulinux/Jenkinsfile @@ -141,7 +141,7 @@ pipeline { steps { script { if(env.GERRIT_TOPIC == "all" || env.GERRIT_TOPIC == "GreenScreen") { - docker.image('plugins-linux').withRun('-t -u '+jenkinsUser+' -v '+pwd()+':/root/jami/:rw -w /root/ -e BATCH_MODE=1', '/bin/bash') { + docker.image('plugins-linux').withRun('-t -u '+jenkinsUser+' -v '+pwd()+':/root/jami/:rw -v /var/cache/jami:/var/cache/jami:rw -w /root/ -e BATCH_MODE=1', '/bin/bash') { container -> code:{ def base_cmd = 'docker exec -t '+container.id+" sh -c '" def exec_cmd = { cmd -> sh base_cmd+cmd+"'" } -- GitLab