CI: add appimage.yml #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: appimage | ||
| on: | ||
| workflow_call: | ||
| outputs: | ||
| name: | ||
| description: "The artifact name" | ||
| value: ${{ jobs.build_ubuntu.outputs.name }} | ||
| env: | ||
| GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | ||
| jobs: | ||
| build_ubuntu: | ||
| strategy: | ||
| matrix: | ||
| BUILD_TYPE: [Release] | ||
| # See: https://docs.github.com/zh/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners | ||
| # See: https://github.com/actions/runner-images/ | ||
| runs-on: ubuntu-latest | ||
| env: | ||
| BUILD_TYPE: ${{matrix.BUILD_TYPE}} | ||
| SOURCE_DIR: ${{github.workspace}}/.cache/source | ||
| TOOSL_DIR: ${{github.workspace}}/.cache/tools | ||
| INSTALL_DIR: ${{github.workspace}}/.cache/install | ||
| RabbitRemoteControl_VERSION: 0.0.27 | ||
| artifact_name: build_appimage | ||
| # Map the job outputs to step outputs | ||
| outputs: | ||
| name: ${{ env.artifact_name }} | ||
| steps: | ||
| - name: Checkout Repository | ||
| uses: actions/checkout@v3 | ||
| with: | ||
| submodules: true | ||
| - name: Make directories | ||
| run: | | ||
| cmake -E make_directory ${{github.workspace}}/build | ||
| cmake -E make_directory ${{env.SOURCE_DIR}} | ||
| cmake -E make_directory ${{env.TOOSL_DIR}} | ||
| cmake -E make_directory ${{env.INSTALL_DIR}} | ||
| - name: git clone RabbitCommon | ||
| working-directory: ${{env.SOURCE_DIR}} | ||
| run: | | ||
| git clone https://github.com/KangLin/RabbitCommon.git | ||
| - name: Install apt packages | ||
| run: | | ||
| sudo apt-get update -y | ||
| sudo apt-get upgrade -y | ||
| sudo apt install -y -q cmake build-essential xvfb xpra \ | ||
| libgl1-mesa-dev libglx-dev libglu1-mesa-dev \ | ||
| cmake debhelper fakeroot graphviz \ | ||
| libxkbcommon-dev libxkbcommon-x11-dev xorg-dev libx11-xcb-dev \ | ||
| libx11-dev libxfixes-dev libxcb-randr0-dev libxcb-shm0-dev \ | ||
| libxcb-xinerama0-dev libxcb-composite0-dev libxcomposite-dev \ | ||
| libxinerama-dev libxcb1-dev libx11-xcb-dev libxcb-xfixes0-dev \ | ||
| libpixman-1-dev libpam0g-dev libutf8proc-dev \ | ||
| libfuse3-dev libusb-1.0-0-dev libpcap-dev libcups2-dev \ | ||
| libavcodec-dev libavformat-dev libresample1-dev libswscale-dev \ | ||
| libvncserver-dev libssh-dev libtelnet-dev | ||
| - name: Install Qt | ||
| - name: Install Qt | ||
| uses: jurplel/install-qt-action@v3 | ||
| with: | ||
| aqtversion: '==3.1.*' | ||
| version: '6.8.0' | ||
| host: 'linux' | ||
| target: 'desktop' | ||
| arch: 'linux_gcc_64' | ||
| modules: 'qtscxml qtmultimedia qtimageformats qtserialport qt5compat' | ||
| - name: Cache installed | ||
| uses: actions/cache@v3 | ||
| id: cache-installed | ||
| with: | ||
| path: | | ||
| ${{env.INSTALL_DIR}} | ||
| key: install_ubuntu_${{matrix.BUILD_TYPE}} | ||
| - name: build FreeRDP | ||
| working-directory: ${{env.SOURCE_DIR}} | ||
| run: | | ||
| if [ ! -d ${{env.INSTALL_DIR}}/lib/cmake/FreeRDP3 ]; then | ||
| git clone -b 3.9.0 --depth=1 https://github.com/FreeRDP/FreeRDP.git | ||
| # git clone https://github.com/KangLin/FreeRDP.git | ||
| cd FreeRDP | ||
| git submodule update --init --recursive | ||
| cmake -E make_directory build | ||
| cd build | ||
| cmake .. \ | ||
| -DCMAKE_BUILD_TYPE=${{matrix.BUILD_TYPE}} \ | ||
| -DCMAKE_INSTALL_PREFIX="${{env.INSTALL_DIR}}" \ | ||
| -DWITH_SERVER=ON \ | ||
| -DWITH_CLIENT_SDL=OFF \ | ||
| -DWITH_KRB5=OFF \ | ||
| -DWITH_MANPAGES=OFF | ||
| cmake --build . --config ${{matrix.BUILD_TYPE}} | ||
| cmake --build . --config ${{matrix.BUILD_TYPE}} --target install | ||
| fi | ||
| - name: build RabbitVNC | ||
| if: false | ||
| working-directory: ${{env.SOURCE_DIR}} | ||
| run: | | ||
| if [ ! -d ${{env.INSTALL_DIR}}/lib/cmake/RabbitVNC ]; then | ||
| git clone --depth=1 https://github.com/KangLin/RabbitVNC.git | ||
| cd ${{env.SOURCE_DIR}}/RabbitVNC | ||
| cmake -E make_directory build | ||
| cd build | ||
| cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.BUILD_TYPE }} \ | ||
| -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} \ | ||
| -DBUILD_TESTS=OFF -DBUILD_VIEWER=OFF | ||
| cmake --build . --config ${{ matrix.BUILD_TYPE }} | ||
| cmake --build . --config ${{ matrix.BUILD_TYPE }} --target install | ||
| fi | ||
| - name: build tigervnc | ||
| #if: ${{ matrix.BUILD_TYPE == 'Debug'}} | ||
| working-directory: ${{env.SOURCE_DIR}} | ||
| run: | | ||
| if [ ! -d ${{env.INSTALL_DIR}}/lib/cmake/tigervnc ]; then | ||
| git clone --depth=1 https://github.com/KangLin/tigervnc.git | ||
| cd ${{env.SOURCE_DIR}}/tigervnc | ||
| cmake -E make_directory build | ||
| cd build | ||
| cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.BUILD_TYPE }} \ | ||
| -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} \ | ||
| -DBUILD_TESTS=OFF -DBUILD_VIEWER=OFF | ||
| cmake --build . --config ${{ matrix.BUILD_TYPE }} | ||
| cmake --build . --config ${{ matrix.BUILD_TYPE }} --target install/strip | ||
| fi | ||
| - name: build libdatachannel | ||
| working-directory: ${{env.SOURCE_DIR}} | ||
| run: | | ||
| if [ ! -d ${{env.INSTALL_DIR}}/lib/cmake/LibDataChannel ]; then | ||
| git clone -b v0.17.8 --depth=1 https://github.com/paullouisageneau/libdatachannel.git | ||
| cd libdatachannel | ||
| git submodule update --init --recursive | ||
| cmake -E make_directory build | ||
| cd build | ||
| cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.BUILD_TYPE }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} | ||
| cmake --build . --config ${{ matrix.BUILD_TYPE }} | ||
| cmake --build . --config ${{ matrix.BUILD_TYPE }} --target install/strip | ||
| fi | ||
| - name: build QtService | ||
| working-directory: ${{env.SOURCE_DIR}} | ||
| run: | | ||
| if [ ! -d ${{env.INSTALL_DIR}}/lib/cmake/QtService ]; then | ||
| git clone --depth=1 https://github.com/KangLin/qt-solutions.git | ||
| cd qt-solutions/qtservice | ||
| git submodule update --init --recursive | ||
| cmake -E make_directory build | ||
| cd build | ||
| export Qt6_DIR=/usr/lib/`uname -a`-linux-gnu/cmake/Qt6 | ||
| cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.BUILD_TYPE }} \ | ||
| -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} | ||
| cmake --build . --config ${{ matrix.BUILD_TYPE }} | ||
| cmake --build . --config ${{ matrix.BUILD_TYPE }} --target install/strip | ||
| fi | ||
| - name: pcapplusplus | ||
| working-directory: ${{env.SOURCE_DIR}} | ||
| run: | | ||
| if [ ! -d ${{env.INSTALL_DIR}}/lib/cmake/pcapplusplus ]; then | ||
| git clone -b v24.09 --depth=1 https://github.com/seladb/PcapPlusPlus.git | ||
| cd PcapPlusPlus | ||
| cmake -E make_directory build | ||
| cd build | ||
| cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.BUILD_TYPE }} \ | ||
| -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} \ | ||
| -DPCAPPP_BUILD_EXAMPLES=OFF \ | ||
| -DPCAPPP_BUILD_TESTS=OFF \ | ||
| -DPCAPPP_BUILD_TUTORIALS=OFF | ||
| cmake --build . --config ${{ matrix.BUILD_TYPE }} | ||
| cmake --build . --config ${{ matrix.BUILD_TYPE }} --target install/strip | ||
| fi | ||
| - name: build_appimage.sh | ||
| working-directory: ${{github.workspace}} | ||
| env: | ||
| RabbitCommon_DIR: ${{env.SOURCE_DIR}}/RabbitCommon | ||
| RabbitVNC_DIR: ${{ env.INSTALL_DIR }}/lib/cmake/RabbitVNC | ||
| tigervnc_DIR: ${{env.INSTALL_DIR}}/lib/cmake/tigervnc | ||
| #LibDataChannel_DIR: ${{ env.INSTALL_DIR }}/lib/cmake/LibDataChannel | ||
| QtService_DIR: ${{ env.INSTALL_DIR }}/lib/cmake/QtService | ||
| FreeRDP_DIR: ${{ env.INSTALL_DIR }}/lib/cmake/FreeRDP3 | ||
| WinPR_DIR: ${{ env.INSTALL_DIR }}/lib/cmake/WinPR3 | ||
| FreeRDP_Client_DIR: ${{env.INSTALL_DIR}}/lib/cmake/FreeRDP-Client3 | ||
| FreeRDP_Shadow_DIR: ${{env.INSTALL_DIR}}/lib/cmake/FreeRDP-Shadow3 | ||
| FreeRDP_Server_DIR: ${{env.INSTALL_DIR}}/lib/cmake/FreeRDP-Server3 | ||
| PcapPlusPlus_DIR: ${{env.INSTALL_DIR}}/lib/cmake/pcapplusplus | ||
| run: | | ||
| if [ '${{matrix.BUILD_TYPE}}' == 'Release' ]; then | ||
| echo "Build Release ......" | ||
| export BUILD_VIEWER_TERMINAL=OFF | ||
| export tigervnc_DIR=${{env.INSTALL_DIR}}/lib/cmake/tigervnc | ||
| fi | ||
| ./build_appimage.sh | ||
| - name: update configure file | ||
| if: ${{ matrix.BUILD_TYPE == 'Release'}} | ||
| working-directory: ${{github.workspace}} | ||
| #continue-on-error: true | ||
| run: | | ||
| #sudo apt update -y -qq | ||
| #sudo apt-get install -y -qq xvfb xpra | ||
| sudo Xvfb :99 -ac & | ||
| export DISPLAY=:99.0 | ||
| echo "Install rabbit remote control ......" | ||
| sudo apt install ./rabbitremotecontrol_${{env.RabbitRemoteControl_VERSION}}_amd64.deb | ||
| #echo "ls -l /opt/RabbitRemoteControl/bin/" | ||
| #ls -l /opt/RabbitRemoteControl/bin/ | ||
| echo "Update update_linux.xml ......" | ||
| export QT_XCB_GL_INTEGRATION=none | ||
| MD5SUM=`cat rabbitremotecontrol_${{env.RabbitRemoteControl_VERSION}}_amd64.deb.md5sum|awk '{print $1}'` | ||
| echo "MD5SUM rabbitremotecontrol_${{env.RabbitRemoteControl_VERSION}}_amd64.deb: ${MD5SUM}" | ||
| #echo "Enable core dump ......" | ||
| #ulimit -c unlimited | ||
| #echo "# sudo sysctl -w kernel.core_pattern=core" | ||
| #sudo sysctl -w kernel.core_pattern=${{github.workspace}}/core | ||
| echo "Generate update configure file ......" | ||
| /opt/RabbitRemoteControl/bin/RabbitRemoteControl.sh \ | ||
| -f "${{github.workspace}}/update_ubuntu.json" \ | ||
| --foc 1 \ | ||
| -u "https://github.com/KangLin/RabbitRemoteControl/releases/download/${{env.RabbitRemoteControl_VERSION}}/rabbitremotecontrol_${{env.RabbitRemoteControl_VERSION}}_amd64.deb;https://sourceforge.net/projects/rabbitremotecontrol/files/${{env.RabbitRemoteControl_VERSION}}/rabbitremotecontrol_${{env.RabbitRemoteControl_VERSION}}_amd64.deb" \ | ||
| --md5 "${MD5SUM}" \ | ||
| -m "v${{env.RabbitRemoteControl_VERSION}}" | ||
| mv "${{github.workspace}}/update_ubuntu.json.xml" update_linux.xml | ||
| - name: Update version configure file | ||
| if: ${{ matrix.BUILD_TYPE == 'Release'}} | ||
| working-directory: ${{github.workspace}} | ||
| #continue-on-error: true | ||
| run: | | ||
| sudo Xvfb :99 -ac & | ||
| export DISPLAY=:99.0 | ||
| /opt/RabbitRemoteControl/bin/RabbitRemoteControl.sh \ | ||
| -f "${{github.workspace}}/version.json" \ | ||
| --foc 0 \ | ||
| --pv ${{env.RabbitRemoteControl_VERSION}} | ||
| - name: Update artifact | ||
| if: ${{ matrix.BUILD_TYPE == 'Release' }} | ||
| uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: ${{ env.artifact_name }} | ||
| path: | | ||
| ${{github.workspace}}/update_ubuntu.json | ||
| ${{github.workspace}}/version.json | ||
| ${{github.workspace}}/update_linux.xml | ||