From 8b0fcee6a60028b9132bb2560379dddde1ad332e Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Thu, 12 Nov 2020 13:24:13 +0400 Subject: [PATCH] Use docker build in linux action --- .github/workflows/linux.yml | 506 ++---------------------------------- 1 file changed, 15 insertions(+), 491 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index fdb5c5ca06..ef2a521e74 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -45,9 +45,17 @@ on: jobs: linux: - name: Ubuntu 14.04 + name: CentOS 7 runs-on: ubuntu-latest - container: ubuntu:trusty + container: + image: docker.pkg.github.com/telegramdesktop/tdesktop/centos_env + credentials: + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + defaults: + run: + shell: scl enable devtoolset-8 -- bash --noprofile --norc -eo pipefail {0} strategy: matrix: @@ -57,59 +65,17 @@ jobs: - "TDESKTOP_DISABLE_GTK_INTEGRATION" env: - GIT: "https://github.com" - QT: "5_15_1" - QT_PREFIX: "/usr/local/desktop-app/Qt-5.15.1" - OPENSSL_VER: "1_1_1" - OPENSSL_PREFIX: "/usr/local/desktop-app/openssl-1.1.1" - CMAKE_VER: "3.17.0" UPLOAD_ARTIFACT: "false" - ONLY_CACHE: "false" - MANUAL_CACHING: "6" - DOC_PATH: "docs/building-cmake.md" - AUTO_CACHING: "1" steps: - name: Get repository name. run: echo "REPO_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV - - name: Disable man for further package installs. + - name: Yum install. run: | - cfgFile="/etc/dpkg/dpkg.cfg.d/no_man" - sudo touch $cfgFile - p() { - sudo echo "path-exclude=/usr/share/$1/*" >> $cfgFile - } - - p man - p locale - p doc - - - name: Apt install. - shell: bash - run: | - sudo apt-get update - sudo apt-get install software-properties-common -y && \ - sudo add-apt-repository ppa:git-core/ppa -y && \ - sudo apt-get update && \ - sudo apt-get install git libexif-dev liblzma-dev libz-dev libssl-dev \ - libgtk2.0-dev libice-dev libsm-dev libicu-dev libdrm-dev dh-autoreconf \ - autoconf automake build-essential libxml2-dev libass-dev libfreetype6-dev \ - libgpac-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev \ - libvorbis-dev libxcb1-dev libxcb-image0-dev libxcb-shm0-dev \ - libxcb-screensaver0-dev libjpeg-dev ninja-build \ - libxcb-xfixes0-dev libxcb-keysyms1-dev libxcb-icccm4-dev libatspi2.0-dev \ - libxcb-render-util0-dev libxcb-util0-dev libxcb-xkb-dev libxrender-dev \ - libasound-dev libpulse-dev libxcb-sync0-dev libxcb-randr0-dev libegl1-mesa-dev \ - libx11-xcb-dev libffi-dev libncurses5-dev pkg-config texi2html bison yasm \ - zlib1g-dev xutils-dev python-xcbgen chrpath gperf wget -y --force-yes && \ - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y && \ - sudo apt-get update && \ - sudo apt-get install gcc-8 g++-8 -y && \ - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 60 && \ - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 60 && \ - sudo update-alternatives --config gcc && \ - sudo add-apt-repository --remove ppa:ubuntu-toolchain-r/test -y + yum -y autoremove git + yum -y install https://packages.endpoint.com/rhel/7/os/x86_64/endpoint-repo-1.7-1.x86_64.rpm + yum -y install git - name: Clone. uses: actions/checkout@v2 @@ -118,452 +84,11 @@ jobs: path: ${{ env.REPO_NAME }} - name: First set up. - shell: bash run: | gcc --version - - gcc --version > CACHE_KEY.txt - echo $MANUAL_CACHING >> CACHE_KEY.txt - if [ "$AUTO_CACHING" == "1" ]; then - thisFile=$REPO_NAME/.github/workflows/linux.yml - echo `md5sum $thisFile | cut -c -32` >> CACHE_KEY.txt - fi - md5cache=$(md5sum CACHE_KEY.txt | cut -c -32) - echo "CACHE_KEY=$md5cache" >> $GITHUB_ENV - - mkdir -p Libraries - cd Libraries - echo "LibrariesPath=`pwd`" >> $GITHUB_ENV - - - name: Patches. - run: | - echo "Find necessary commit from doc." - checkoutCommit=$(grep -A 1 "cd patches" $REPO_NAME/$DOC_PATH | sed -n 2p) - cd $LibrariesPath - git clone $GIT/desktop-app/patches.git - cd patches - eval $checkoutCommit - - - name: CMake. - run: | - cd $LibrariesPath - - file=cmake-$CMAKE_VER-Linux-x86_64.sh - wget $GIT/Kitware/CMake/releases/download/v$CMAKE_VER/$file - sudo mkdir /opt/cmake - sudo sh $file --prefix=/opt/cmake --skip-license - sudo ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake - rm $file - - cmake --version - - - name: MozJPEG. - run: | - cd $LibrariesPath - - git clone -b v4.0.1-rc2 $GIT/mozilla/mozjpeg.git - cd mozjpeg - cmake -B build . \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DWITH_JPEG8=ON \ - -DPNG_SUPPORTED=OFF - cmake --build build -j$(nproc) - sudo cmake --install build - cd .. - rm -rf mozjpeg - - - name: Opus cache. - id: cache-opus - uses: actions/cache@v2 - with: - path: ${{ env.LibrariesPath }}/opus - key: ${{ runner.OS }}-opus-${{ env.CACHE_KEY }} - - name: Opus. - if: steps.cache-opus.outputs.cache-hit != 'true' - run: | - cd $LibrariesPath - - git clone -b v1.3 --depth=1 $GIT/xiph/opus - cd opus - ./autogen.sh - ./configure - make -j$(nproc) - - name: Opus install. - run: | - cd $LibrariesPath/opus - sudo make install - - - name: Libva. - run: | - cd $LibrariesPath - - git clone $GIT/intel/libva.git - cd libva - ./autogen.sh --enable-static - make -j$(nproc) - sudo make install - cd .. - rm -rf libva - - - name: Libvdpau. - run: | - cd $LibrariesPath - - git clone -b libvdpau-1.2 --depth=1 https://gitlab.freedesktop.org/vdpau/libvdpau.git - cd libvdpau - ./autogen.sh --enable-static - make -j$(nproc) - sudo make install - cd .. - rm -rf libvdpau - - - name: FFmpeg cache. - id: cache-ffmpeg - uses: actions/cache@v2 - with: - path: ${{ env.LibrariesPath }}/ffmpeg-cache - key: ${{ runner.OS }}-ffmpeg-${{ env.CACHE_KEY }} - - name: FFmpeg build. - if: steps.cache-ffmpeg.outputs.cache-hit != 'true' - run: | - cd $LibrariesPath - - git clone --branch release/4.2 $GIT/FFmpeg/FFmpeg ffmpeg - cd ffmpeg - ./configure \ - --disable-debug \ - --disable-programs \ - --disable-doc \ - --disable-network \ - --disable-autodetect \ - --disable-everything \ - --disable-alsa \ - --disable-iconv \ - --enable-libopus \ - --enable-vaapi \ - --enable-vdpau \ - --enable-protocol=file \ - --enable-hwaccel=h264_vaapi \ - --enable-hwaccel=h264_vdpau \ - --enable-hwaccel=mpeg4_vaapi \ - --enable-hwaccel=mpeg4_vdpau \ - --enable-decoder=aac \ - --enable-decoder=aac_fixed \ - --enable-decoder=aac_latm \ - --enable-decoder=aasc \ - --enable-decoder=alac \ - --enable-decoder=flac \ - --enable-decoder=gif \ - --enable-decoder=h264 \ - --enable-decoder=h264_vdpau \ - --enable-decoder=hevc \ - --enable-decoder=mp1 \ - --enable-decoder=mp1float \ - --enable-decoder=mp2 \ - --enable-decoder=mp2float \ - --enable-decoder=mp3 \ - --enable-decoder=mp3adu \ - --enable-decoder=mp3adufloat \ - --enable-decoder=mp3float \ - --enable-decoder=mp3on4 \ - --enable-decoder=mp3on4float \ - --enable-decoder=mpeg4 \ - --enable-decoder=mpeg4_vdpau \ - --enable-decoder=msmpeg4v2 \ - --enable-decoder=msmpeg4v3 \ - --enable-decoder=opus \ - --enable-decoder=pcm_alaw \ - --enable-decoder=pcm_f32be \ - --enable-decoder=pcm_f32le \ - --enable-decoder=pcm_f64be \ - --enable-decoder=pcm_f64le \ - --enable-decoder=pcm_lxf \ - --enable-decoder=pcm_mulaw \ - --enable-decoder=pcm_s16be \ - --enable-decoder=pcm_s16be_planar \ - --enable-decoder=pcm_s16le \ - --enable-decoder=pcm_s16le_planar \ - --enable-decoder=pcm_s24be \ - --enable-decoder=pcm_s24daud \ - --enable-decoder=pcm_s24le \ - --enable-decoder=pcm_s24le_planar \ - --enable-decoder=pcm_s32be \ - --enable-decoder=pcm_s32le \ - --enable-decoder=pcm_s32le_planar \ - --enable-decoder=pcm_s64be \ - --enable-decoder=pcm_s64le \ - --enable-decoder=pcm_s8 \ - --enable-decoder=pcm_s8_planar \ - --enable-decoder=pcm_u16be \ - --enable-decoder=pcm_u16le \ - --enable-decoder=pcm_u24be \ - --enable-decoder=pcm_u24le \ - --enable-decoder=pcm_u32be \ - --enable-decoder=pcm_u32le \ - --enable-decoder=pcm_u8 \ - --enable-decoder=pcm_zork \ - --enable-decoder=vorbis \ - --enable-decoder=wavpack \ - --enable-decoder=wmalossless \ - --enable-decoder=wmapro \ - --enable-decoder=wmav1 \ - --enable-decoder=wmav2 \ - --enable-decoder=wmavoice \ - --enable-encoder=libopus \ - --enable-parser=aac \ - --enable-parser=aac_latm \ - --enable-parser=flac \ - --enable-parser=h264 \ - --enable-parser=hevc \ - --enable-parser=mpeg4video \ - --enable-parser=mpegaudio \ - --enable-parser=opus \ - --enable-parser=vorbis \ - --enable-demuxer=aac \ - --enable-demuxer=flac \ - --enable-demuxer=gif \ - --enable-demuxer=h264 \ - --enable-demuxer=hevc \ - --enable-demuxer=m4v \ - --enable-demuxer=mov \ - --enable-demuxer=mp3 \ - --enable-demuxer=ogg \ - --enable-demuxer=wav \ - --enable-muxer=ogg \ - --enable-muxer=opus - - make -j$(nproc) - sudo make DESTDIR="$LibrariesPath/ffmpeg-cache" install - cd .. - rm -rf ffmpeg - - name: FFmpeg install. - run: | - cd $LibrariesPath - #List of files from cmake/external/ffmpeg/CMakeLists.txt. - copyLib() { - mkdir -p ffmpeg/$1 - yes | cp -i ffmpeg-cache/usr/local/lib/$1.a ffmpeg/$1/$1.a - } - copyLib libavformat - copyLib libavcodec - copyLib libswresample - copyLib libswscale - copyLib libavutil - - sudo cp -R ffmpeg-cache/. / - - - name: OpenAL Soft. - run: | - cd $LibrariesPath - - git clone -b openal-soft-1.20.1 --depth=1 $GIT/kcat/openal-soft.git - cd openal-soft/build - cmake .. \ - -DCMAKE_BUILD_TYPE=Release \ - -DLIBTYPE:STRING=STATIC \ - -DALSOFT_EXAMPLES=OFF \ - -DALSOFT_TESTS=OFF \ - -DALSOFT_UTILS=OFF \ - -DALSOFT_CONFIG=OFF - make -j$(nproc) - sudo make install - cd - - rm -rf openal-soft - - - name: OpenSSL cache. - id: cache-openssl - uses: actions/cache@v2 - with: - path: ${{ env.LibrariesPath }}/openssl-cache - key: ${{ runner.OS }}-${{ env.OPENSSL_VER }}-${{ env.CACHE_KEY }} - - name: OpenSSL build. - if: steps.cache-openssl.outputs.cache-hit != 'true' - run: | - cd $LibrariesPath - - opensslDir=openssl_${OPENSSL_VER} - git clone -b OpenSSL_${OPENSSL_VER}-stable --depth=1 \ - $GIT/openssl/openssl $opensslDir - cd $opensslDir - ./config --prefix="$OPENSSL_PREFIX" no-tests - make -j$(nproc) - sudo make DESTDIR="$LibrariesPath/openssl-cache" install_sw - cd .. - # rm -rf $opensslDir # Keep this folder for WebRTC. - - name: OpenSSL install. - run: | - cd $LibrariesPath - sudo cp -R openssl-cache/. / - - - name: Libwayland. - run: | - cd $LibrariesPath - - git clone -b 1.18.0 https://gitlab.freedesktop.org/wayland/wayland - cd wayland - ./autogen.sh \ - --enable-static \ - --disable-documentation \ - --disable-dtd-validation - make -j$(nproc) - sudo make install - cd .. - rm -rf wayland - - - name: Libxkbcommon. - run: | - cd $LibrariesPath - - git clone -b xkbcommon-0.8.4 --depth=1 $GIT/xkbcommon/libxkbcommon.git - cd libxkbcommon - ./autogen.sh \ - --disable-docs \ - --disable-wayland \ - --with-xkb-config-root=/usr/share/X11/xkb \ - --with-x-locale-root=/usr/share/X11/locale - make -j$(nproc) - sudo make install - cd .. - rm -rf libxkbcommon - - - name: Qt 5.15.1 cache. - id: cache-qt - uses: actions/cache@v2 - with: - path: ${{ env.LibrariesPath }}/qt-cache - key: ${{ runner.OS }}-qt-${{ env.CACHE_KEY }}-${{ hashFiles('**/qt*_5_15_1/*') }} - - name: Qt 5.15.1 build. - if: steps.cache-qt.outputs.cache-hit != 'true' - run: | - cd $LibrariesPath - - git clone -b v5.15.1 --depth=1 git://code.qt.io/qt/qt5.git qt_${QT} - cd qt_${QT} - perl init-repository --module-subset=qtbase,qtwayland,qtimageformats,qtsvg - git submodule update qtbase qtwayland qtimageformats qtsvg - cd qtbase - find ../../patches/qtbase_${QT} -type f -print0 | sort -z | xargs -r0 git apply - cd .. - cd qtwayland - find ../../patches/qtwayland_${QT} -type f -print0 | sort -z | xargs -r0 git apply - cd .. - - ./configure -prefix "$QT_PREFIX" \ - -release \ - -opensource \ - -confirm-license \ - -qt-zlib \ - -qt-libpng \ - -qt-harfbuzz \ - -qt-pcre \ - -qt-xcb \ - -no-icu \ - -no-gtk \ - -static \ - -dbus-runtime \ - -openssl-linked \ - -I "$OPENSSL_PREFIX/include" OPENSSL_LIBS="$OPENSSL_PREFIX/lib/libssl.a $OPENSSL_PREFIX/lib/libcrypto.a -ldl -lpthread" \ - -nomake examples \ - -nomake tests - - make -j$(nproc) - sudo make INSTALL_ROOT="$LibrariesPath/qt-cache" install - cd .. - rm -rf qt_${QT} - - name: Qt 5.15.1 install. - run: | - cd $LibrariesPath - sudo cp -R qt-cache/. / - - - name: Breakpad cache. - id: cache-breakpad - uses: actions/cache@v2 - with: - path: ${{ env.LibrariesPath }}/breakpad-cache - key: ${{ runner.OS }}-breakpad-${{ env.CACHE_KEY }} - - name: Breakpad clone. - run: | - cd $LibrariesPath - - git clone https://chromium.googlesource.com/breakpad/breakpad - cd breakpad - git checkout bc8fb886 - git clone https://chromium.googlesource.com/linux-syscall-support src/third_party/lss - cd src/third_party/lss - git checkout a91633d1 - - name: Breakpad build. - if: steps.cache-breakpad.outputs.cache-hit != 'true' - run: | - cd $LibrariesPath - - BreakpadCache=$LibrariesPath/breakpad-cache - - git clone https://chromium.googlesource.com/external/gyp - cd gyp - git checkout 9f2a7bb1 - git apply ../patches/gyp.diff - cd .. - - cd breakpad - ./configure - make -j$(nproc) - sudo make DESTDIR="$BreakpadCache" install - cd src - rm -r testing - git clone $GIT/google/googletest testing - cd tools - sed -i 's/minidump_upload.m/minidump_upload.cc/' linux/tools_linux.gypi - ../../../gyp/gyp --depth=. --generator-output=.. -Goutput_dir=../out tools.gyp --format=cmake - cd ../../out/Default - cmake . - make -j$(nproc) dump_syms - - mv dump_syms $BreakpadCache/ - cd .. - rm -rf gyp breakpad - - name: Breakpad install. - run: | - cd $LibrariesPath - sudo cp -R breakpad-cache/. / - mkdir -p breakpad/out/Default/ - cp breakpad-cache/dump_syms breakpad/out/Default/dump_syms - - - name: WebRTC cache. - id: cache-webrtc - uses: actions/cache@v2 - with: - path: ${{ env.LibrariesPath }}/tg_owt - key: ${{ runner.OS }}-webrtc-${{ env.CACHE_KEY }} - - name: WebRTC. - if: steps.cache-webrtc.outputs.cache-hit != 'true' - run: | - cd $LibrariesPath - - git clone $GIT/desktop-app/tg_owt.git - mkdir -p tg_owt/out/Debug - cd tg_owt/out/Debug - cmake -G Ninja \ - -DCMAKE_BUILD_TYPE=Debug \ - -DTG_OWT_SPECIAL_TARGET=linux \ - -DTG_OWT_LIBJPEG_INCLUDE_PATH=/usr/local/include \ - -DTG_OWT_OPENSSL_INCLUDE_PATH=$OPENSSL_PREFIX/include \ - -DTG_OWT_OPUS_INCLUDE_PATH=/usr/local/include/opus \ - -DTG_OWT_FFMPEG_INCLUDE_PATH=/usr/local/include \ - ../.. - ninja - - # Cleanup. - cd $LibrariesPath/tg_owt - mv out/Debug/libtg_owt.a libtg_owt.a - rm -rf out - mkdir -p out/Debug - mv libtg_owt.a out/Debug/libtg_owt.a - - rm -rf $LibrariesPath/openssl_${OPENSSL_VER} + ln -s $LibrariesPath Libraries - name: Telegram Desktop build. - if: env.ONLY_CACHE == 'false' run: | cd $REPO_NAME/Telegram @@ -587,7 +112,6 @@ jobs: make -j$(nproc) - name: Check. - if: env.ONLY_CACHE == 'false' run: | filePath="$REPO_NAME/out/Debug/bin/Telegram" if test -f "$filePath"; then