From 4afcb32af60d23555ed191446c5e1c217060e617 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Mon, 4 Mar 2024 10:49:20 +0100 Subject: [PATCH] CI : Build on Ubuntu2004 instead of Ubuntu18 because of eol. --- .../job-linux-desktop-ubuntu-2004.yml | 187 ++++++++++++++++++ .gitlab-ci-files/job-linux-desktop.yml | 6 +- .gitlab-ci-files/job-linux-prepare.yml | 5 +- .gitlab-ci-files/rules.yml | 5 + .gitlab-ci.yml | 7 +- docker-files/bc-dev-ubuntu-20-04-lts | 110 +++++++++++ 6 files changed, 317 insertions(+), 3 deletions(-) create mode 100644 .gitlab-ci-files/job-linux-desktop-ubuntu-2004.yml create mode 100644 .gitlab-ci-files/rules.yml create mode 100644 docker-files/bc-dev-ubuntu-20-04-lts diff --git a/.gitlab-ci-files/job-linux-desktop-ubuntu-2004.yml b/.gitlab-ci-files/job-linux-desktop-ubuntu-2004.yml new file mode 100644 index 000000000..f41808627 --- /dev/null +++ b/.gitlab-ci-files/job-linux-desktop-ubuntu-2004.yml @@ -0,0 +1,187 @@ +.factorize_ubuntu2004: &docker_image_platform_and_runner_tag + tags: [ "docker" ] + image: gitlab.linphone.org:4567/bc/public/linphone-desktop/bc-dev-ubuntu-20-04-lts:$UBUNTU_2004_IMAGE_VERSION + +ubuntu2004-ninja-gcc: + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $DOCKER_UPDATE == null && $SKIP_LINUX == null + - if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_LINUX == null + variables: + CMAKE_GENERATOR: Ninja + CMAKE_OPTIONS: -DENABLE_PQCRYPTO=ON + CC: gcc + CXX: g++ + extends: .linux-desktop + <<: *docker_image_platform_and_runner_tag + +################################################# +# Nightly +################################################# + +ubuntu2004-makefile-gcc: + rules: + - !reference [.rules-merge-request-manual, rules] + - if: $NIGHTLY_MASTER + variables: + CMAKE_GENERATOR: Unix Makefiles + CMAKE_OPTIONS: -DENABLE_PQCRYPTO=ON + CC: gcc + CXX: g++ + ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS + extends: .linux-desktop + <<: *docker_image_platform_and_runner_tag + +ubuntu2004-ninja-gcc-novideo: + rules: + - !reference [.rules-merge-request-manual, rules] + - if: $NIGHTLY_MASTER + variables: + CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_PQCRYPTO=OFF + extends: ubuntu2004-ninja-gcc + +ubuntu2004-ninja-clang: + rules: + - !reference [.rules-merge-request-manual, rules] + - if: $NIGHTLY_MASTER + variables: + CMAKE_OPTIONS: -DENABLE_DOC=ON -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON + CMAKE_GENERATOR: Ninja + CC: clang + CXX: clang++ + extends: .linux-desktop + <<: *docker_image_platform_and_runner_tag + +ubuntu2004-ninja-clang-small: + rules: + - !reference [.rules-merge-request-manual, rules] + - if: $NIGHTLY_MASTER + variables: + CMAKE_OPTIONS: -DENABLE_VIDEO=NO -DENABLE_ADVANCED_IM=NO -DENABLE_DB_STORAGE=NO -DENABLE_PQCRYPTO=OFF + extends: ubuntu2004-ninja-clang + +ubuntu2004-makefile-gcc: + rules: + - !reference [.rules-merge-request-manual, rules] + - if: $NIGHTLY_MASTER + - if: $DEPLOY_PLUGINS + variables: + CMAKE_OPTIONS: -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON + CMAKE_GENERATOR: Unix Makefiles + CC: gcc + CXX: g++ + ADDITIONAL_BUILD_OPTIONS: -j$MAKEFILE_JOBS + APPIMAGETOOL_SIGN_PASSPHRASE: $GPG_SIGNING_PASS + script: + - echo "$GPG_SIGNING_PUB" > file.key && sed -i 's/\r /\n/g' file.key && chmod 600 file.key + - gpg --import file.key + - rm -f file.key + - echo "$GPG_SIGNING_KEY" > file.key && sed -i 's/\r /\n/g' file.key && chmod 600 file.key + - base64 -w 0 file.key | base64 -d | gpg --import --no-tty --batch --yes + - rm -f file.key + - cmake --version + - export CC=$CC + - export CXX=$CXX + - mkdir -p build/OUTPUT + - echo $CI_BUILD_TYPE + - echo $CMAKE_GENERATOR + - echo $DEFAULT_LINUX_CMAKE_OPTIONS + - echo $CMAKE_SANITIZER_OPTIONS + - eval "$(PACKAGE_MACOSXqtchooser -qt=$QT_LINUX_VER -print-env)" + - export PATH=${QTTOOLDIR}:$PATH + - export Qt5_DIR=${QTLIBDIR}/cmake/Qt5 + - echo "Using Qt $QT_LINUX_VER at ${QTLIBDIR}" + - cd build + - cmake .. -G "$CMAKE_GENERATOR" -DCMAKE_VERBOSE_MAKEFILE=ON -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=$CI_BUILD_TYPE $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS + - cmake --build . --target install --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS + extends: .linux-desktop + <<: *docker_image_platform_and_runner_tag + +################################################# +# Package - Nightly +################################################# + +ubuntu2004-makefile-gcc-package: + stage: package + tags: [ "docker-test-liblinphone" ] + image: gitlab.linphone.org:4567/bc/public/linphone-desktop/bc-dev-ubuntu-20-04-lts:$UBUNTU_2004_IMAGE_VERSION + dependencies: [] + rules: + - !reference [.rules-merge-request-manual, rules] + - if: $NIGHTLY_MASTER + - if: $PACKAGE_LINUX + - if: $DEPLOY_LINUX + variables: + CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$LINUX_PLATFORM/$APP_FOLDER -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON + CMAKE_GENERATOR: Unix Makefiles + CC: gcc + CXX: g++ + APPIMAGETOOL_SIGN_PASSPHRASE: $GPG_SIGNING_PASS + extends: .linux-desktop + script: + - echo "$GPG_SIGNING_PUB" > file.key && sed -i 's/\r /\n/g' file.key && chmod 600 file.key + - gpg --import file.key + - rm -f file.key + - echo "$GPG_SIGNING_KEY" > file.key && sed -i 's/\r /\n/g' file.key && chmod 600 file.key + - base64 -w 0 file.key | base64 -d | gpg --import --no-tty --batch --yes + - rm -f file.key + - cmake --version + - export CC=$CC + - export CXX=$CXX + - mkdir -p build/OUTPUT + - echo $CI_BUILD_TYPE + - echo $CMAKE_GENERATOR + - echo $DEFAULT_LINUX_CMAKE_OPTIONS + - echo $CMAKE_SANITIZER_OPTIONS + - eval "$(qtchooser -qt=$QT_LINUX_VER -print-env)" + - export PATH=${QTTOOLDIR}:$PATH + - export Qt5_DIR=${QTLIBDIR}/cmake/Qt5 + - cd build + - cmake .. -G "$CMAKE_GENERATOR" -DCMAKE_VERBOSE_MAKEFILE=ON -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=$CI_BUILD_TYPE $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS + - cmake --build . --target install --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS + artifacts: + paths: + - build/OUTPUT/* + expire_in: 1 week + +################################################# +# Deploy - Nightly +################################################# + +ubuntu2004-makefile-gcc-deploy: + stage: deploy + tags: [ "deploy" ] + needs: + - ubuntu2004-makefile-gcc-package + only: + variables: + - $NIGHTLY_MASTER + - $DEPLOY_LINUX + script: +# Going to folder in order to avoid having path in checksum + - |- + cd build/OUTPUT/Packages + for file in $(find . -type f -name '*.AppImage' -exec basename {} \;) + do + rsync -rlv --ignore-existing $file $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM/$APP_FOLDER + sha512sum $file > $file.sha512 + rsync -rlv --ignore-existing $file.sha512 $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM/$APP_FOLDER + done + cd ../../.. + - |- + if [[ $MAKE_RELEASE_FILE_URL != "" ]]; then + rsync -rlv build/OUTPUT/RELEASE $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM + rsync -rlv build/OUTPUT/RELEASE $MAIN_DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM + fi + + +ubuntu2004-makefile-gcc-plugins-deploy: + stage: deploy + tags: [ "deploy" ] + needs: + - ubuntu2004-makefile-gcc + only: + variables: + - $DEPLOY_PLUGINS + script: + - rsync -rlv --ignore-existing build/OUTPUT/plugins/app/*.so $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM/$APP_FOLDER/plugins/ + diff --git a/.gitlab-ci-files/job-linux-desktop.yml b/.gitlab-ci-files/job-linux-desktop.yml index 080785739..c35847ac5 100644 --- a/.gitlab-ci-files/job-linux-desktop.yml +++ b/.gitlab-ci-files/job-linux-desktop.yml @@ -12,10 +12,14 @@ echo $DEFAULT_LINUX_CMAKE_OPTIONS echo $CMAKE_SANITIZER_OPTIONS cd build + eval "$(qtchooser -qt=$QT_LINUX_VER -print-env)" + export PATH=${QTTOOLDIR}:$PATH + export Qt5_DIR=${QTLIBDIR}/cmake/Qt5 + echo "Using Qt $QT_LINUX_VER at ${QTLIBDIR}" cmake .. -G "$CMAKE_GENERATOR" -DCMAKE_VERBOSE_MAKEFILE=ON -DLINPHONESDK_PLATFORM=Desktop -DCMAKE_BUILD_TYPE=$CI_BUILD_TYPE $DEFAULT_LINUX_CMAKE_OPTIONS $CMAKE_OPTIONS $SCHEDULE_CMAKE_OPTIONS $CMAKE_SANITIZER_OPTIONS cmake --build . --target install --config $CI_BUILD_TYPE $LBC_NODEBUG_OPTIONS -.job-linux-desktop: +.linux-desktop: stage: build extends: .linux-prepare script: diff --git a/.gitlab-ci-files/job-linux-prepare.yml b/.gitlab-ci-files/job-linux-prepare.yml index b71b72ab3..20450b6f0 100644 --- a/.gitlab-ci-files/job-linux-prepare.yml +++ b/.gitlab-ci-files/job-linux-prepare.yml @@ -5,7 +5,7 @@ paths: - ccache/ - extends: .job-prepare + extends: .prepare before_script: ## @@ -28,6 +28,9 @@ - ccache -s - find $CI_PROJECT_DIR -name '.git' -exec bash -c 'git config --global --add safe.directory ${0%/.git}' {} \; - git describe --debug || true + - cd linphone-sdk + - git describe --debug || true + - cd .. after_script: - if ! [ -z ${TUNNEL_USER_KEY+x} ]; then rm -rf ~/.ssh || true; fi diff --git a/.gitlab-ci-files/rules.yml b/.gitlab-ci-files/rules.yml new file mode 100644 index 000000000..6f68798af --- /dev/null +++ b/.gitlab-ci-files/rules.yml @@ -0,0 +1,5 @@ +.rules-merge-request-manual: + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + when: manual + allow_failure: true \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index babf1f8f9..627d2a6a5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -27,6 +27,7 @@ variables: DEBIAN_10_IMAGE_VERSION: 20210217_python3 UBUNTU_ROLLING_IMAGE_VERSION: 20211012_add_qtwebview UBUNTU_1804_IMAGE_VERSION: 20230706_add_deps_for_av1 + UBUNTU_2004_IMAGE_VERSION: 20231024_add_multimedia workflow: @@ -52,11 +53,15 @@ workflow: .job-prepare: variables: ALL_JOB_VARIABLE: "" +.prepare: + variables: + ALL_JOB_VARIABLE: "" include: + - '.gitlab-ci-files/rules.yml' - '.gitlab-ci-files/job-linux-prepare.yml' - '.gitlab-ci-files/job-linux-desktop.yml' - - '.gitlab-ci-files/job-linux-desktop-ubuntu-1804.yml' + - '.gitlab-ci-files/job-linux-desktop-ubuntu-2004.yml' - '.gitlab-ci-files/job-windows-desktop.yml' - '.gitlab-ci-files/job-macosx-desktop.yml' diff --git a/docker-files/bc-dev-ubuntu-20-04-lts b/docker-files/bc-dev-ubuntu-20-04-lts new file mode 100644 index 000000000..c728bb513 --- /dev/null +++ b/docker-files/bc-dev-ubuntu-20-04-lts @@ -0,0 +1,110 @@ +############################################################################### +# Dockerfile used to make gitlab.linphone.org:4567/bc/public/linphone-desktop/bc-dev-ubuntu-20-04-lts:20231024_add_multimedia +############################################################################### + +FROM ubuntu:20.04 + +# Qt on Ubuntu 20.04 is too old. Use a downloader. +ARG QT_VERSION=5.15.2 +ARG QT6_VERSION=6.5.3 +#Do not use it. It seems that it cannot be used from python command. +#ARG QT_MODULES=qtnetworkauth qtquick3d qtmultimedia + +MAINTAINER Julien Wadel + +# Use a Swiss mirror +RUN sed -i -E 's/(archive|security)\.ubuntu\.com/ch.archive.ubuntu.com/' /etc/apt/sources.list + +# add fallbacks for timeout connections. + +#France +RUN echo "deb http://fr.archive.ubuntu.com/ubuntu/ bionic main restricted" >> /etc/apt/sources.list +RUN echo "deb http://security.ubuntu.com/ubuntu bionic-security main restricted" >> /etc/apt/sources.list +RUN echo "deb http://ch.archive.ubuntu.com/ubuntu/ bionic-updates main restricted" >> /etc/apt/sources.list +#Belgium +RUN echo "deb http://be.archive.ubuntu.com/ubuntu/ bionic main restricted" >> /etc/apt/sources.list +RUN echo "deb http://security.ubuntu.com/ubuntu bionic-security main restricted" >> /etc/apt/sources.list +RUN echo "deb http://be.archive.ubuntu.com/ubuntu/ bionic-updates main restricted" >> /etc/apt/sources.list +#International +RUN echo "deb http://archive.ubuntu.com/ubuntu/ bionic main restricted" >> /etc/apt/sources.list +RUN echo "deb http://security.ubuntu.com/ubuntu bionic-security main restricted" >> /etc/apt/sources.list +RUN echo "deb http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted" >> /etc/apt/sources.list + +# Configure locale +RUN apt-get update && \ + apt-get install -y locales && \ + apt-get clean && \ + echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ + locale-gen +ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8' +ENV TZ=Europe/Paris +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +ARG DEBIAN_FRONTEND=noninteractive + +ENV SHELL=/bin/bash +#ENV PS1='\[\e[33m\]\u@bc-dev-ubuntu-20-04>\[\e[0m\] ' + +# Install common general tools +RUN apt-get update && \ + apt-get install -y nano sudo vim && \ + apt-get clean + +# Install development tools +RUN apt-get update && \ + apt-get install -y alien at autoconf bison ccache clang doxygen elfutils g++ gdb git graphviz intltool libtool lsb-release make ninja-build openssh-client patch perl python3-pip python3-pystache python-six python3-jsonschema python3-jinja2 meson yasm && \ + apt-get clean + +# Install linphone & flexisip dependencies development packages +RUN apt-get update && \ + apt-get install -y libasound2-dev libavcodec-dev libavutil-dev libbsd-dev libegl1-mesa-dev libglew-dev libgsm1-dev libjansson-dev libmariadb-dev-compat libmbedtls-dev libopus-dev libpq-dev libprotobuf-dev libpulse-dev libqt5svg5-dev libsnmp-dev libspeex-dev libspeexdsp-dev libsqlite3-dev libsrtp2-dev libssl-dev libswscale-dev libturbojpeg0-dev libv4l-dev libvpx-dev libxerces-c-dev libxml2-dev libxv-dev protobuf-compiler qttools5-dev qttools5-dev-tools xsdcxx && \ + apt-get clean + +# Install signing tools +RUN sudo apt-get install -y gnupg2 + +# Install configuration tools +RUN sudo apt-get install -y wget + +# Configure user bc +RUN useradd -ms /bin/bash bc && \ + echo 'bc:cotcot' | chpasswd && \ + echo 'bc ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + +# Install newest cmake. Documented at https://gist.github.com/bmegli/4049b7394f9cfa016c24ed67e5041930 +RUN wget https://github.com/Kitware/CMake/releases/download/v3.25.3/cmake-3.25.3.tar.gz && \ + tar -zvxf cmake-3.25.3.tar.gz && \ + cd cmake-3.25.3 && ./bootstrap && make -j8 && \ + sudo apt-get install checkinstall && sudo checkinstall --pkgname=cmake --pkgversion="3.25-custom" --default && hash -r && \ + cd .. && sudo rm -rf cmake-3.25.3 && rm -rf cmake-3.25.3.tar.gz + +# Install nasm from source as we need a newer version than the one being packaged +RUN curl --fail --silent --show-error --location https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01.tar.gz | \ + tar --extract --gzip --file - && cd nasm-2.16.01 && \ + ./configure --prefix=/usr/local && make && make install && \ + cd .. && rm -rf nasm-2.16.01 + +########### QT + +RUN sudo apt-get update && sudo apt-get install -y libxkbcommon* flite1-dev libspeechd-dev speech-dispatcher libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libx11-xcb* libxcb* qdbus-qt5 libqt5dbus5 libdbus-1-dev libdbus-glib-1-dev libatspi2.0-0 libatspi2.0-dev +RUN sudo apt-get update && sudo apt-get install -y libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev + +USER bc +WORKDIR /home/bc + +RUN sudo pip3 install --upgrade setuptools +RUN sudo pip3 install ez_setup + +## Install Qt download tool +# installation is split because there is a way where some modules are not downloaded in the first attempt. +RUN sudo pip3 install py7zr aqtinstall +RUN sudo python3 -m aqt install-qt linux desktop $QT_VERSION -O /opt/Qt +RUN sudo python3 -m aqt install-qt linux desktop $QT_VERSION -O /opt/Qt --noarchives -m qtnetworkauth qtquick3d +RUN sudo python3 -m aqt install-qt linux desktop $QT6_VERSION -O /opt/Qt +RUN sudo python3 -m aqt install-qt linux desktop $QT6_VERSION -O /opt/Qt --noarchives -m qtnetworkauth qtquick3d qtmultimedia + +RUN sudo chown -R bc:bc /opt/Qt/ + +RUN qtchooser -install $QT_VERSION /opt/Qt/$QT_VERSION/gcc_64/bin/qmake +RUN qtchooser -install $QT6_VERSION /opt/Qt/$QT6_VERSION/gcc_64/bin/qmake + +CMD bash