diff --git a/.github/workflows/build-macos-arm64.yml b/.github/workflows/build-macos-arm64.yml index a6919ced9..64d5ff042 100644 --- a/.github/workflows/build-macos-arm64.yml +++ b/.github/workflows/build-macos-arm64.yml @@ -31,212 +31,163 @@ env: SIGN_BASE_URL: "${{ secrets.SIGN_BASE_URL }}" jobs: - - generate-bridge-linux: - uses: ./.github/workflows/bridge.yml - - build-rustdesk-android: - needs: [generate-bridge-linux] - name: build rustdesk android apk ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] - runs-on: ${{ matrix.job.os }} + build-flatpak-appimage: + name: Build Flatpak ${{ matrix.job.target }} + runs-on: ${{ matrix.job.on }} strategy: fail-fast: false matrix: job: - { - arch: aarch64, - target: aarch64-linux-android, - os: ubuntu-20.04, - extra-build-features: "", - openssl-arch: android-arm64, + target: x86_64-unknown-linux-gnu, + distro: ubuntu18.04, + on: ubuntu-20.04, + arch: x86_64, } - { - arch: armv7, - target: armv7-linux-androideabi, - os: ubuntu-20.04, - extra-build-features: "", - openssl-arch: android-arm, + target: aarch64-unknown-linux-gnu, + # try out newer flatpak since error of "error: Nothing matches org.freedesktop.Platform in remote flathub" + distro: ubuntu22.04, + on: [self-hosted, Linux, ARM64], + arch: aarch64, } steps: - - name: Export GitHub Actions cache environment variables - uses: actions/github-script@v6 - with: - script: | - core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); - core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); - - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get install -y \ - clang \ - cmake \ - curl \ - gcc-multilib \ - git \ - g++ \ - g++-multilib \ - libappindicator3-dev \ - libasound2-dev \ - libc6-dev \ - libclang-10-dev \ - libclang-dev \ - libgstreamer1.0-dev \ - libgstreamer-plugins-base1.0-dev \ - libgtk-3-dev \ - libpam0g-dev \ - libpulse-dev \ - libva-dev \ - libvdpau-dev \ - libxcb-randr0-dev \ - libxcb-shape0-dev \ - libxcb-xfixes0-dev \ - libxdo-dev \ - libxfixes-dev \ - llvm-10-dev \ - llvm-dev \ - nasm \ - ninja-build \ - openjdk-11-jdk-headless \ - pkg-config \ - tree \ - wget - - name: Checkout source code uses: actions/checkout@v3 - - name: Install flutter - uses: subosito/flutter-action@v2 - with: - channel: "stable" - flutter-version: ${{ env.FLUTTER_VERSION }} - - uses: nttld/setup-ndk@v1 - id: setup-ndk - with: - ndk-version: ${{ env.NDK_VERSION }} - add-to-path: true - - name: Setup vcpkg with Github Actions binary cache - uses: lukka/run-vcpkg@v11 - with: - vcpkgDirectory: /opt/artifacts/vcpkg - vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }} - - - name: Install vcpkg dependencies + - name: Rename Binary run: | - case ${{ matrix.job.target }} in - aarch64-linux-android) - ./flutter/build_android_deps.sh arm64-v8a - ;; - armv7-linux-androideabi) - ./flutter/build_android_deps.sh armeabi-v7a - ;; + apt update -y + apt install -y wget + wget https://github.com/rustdesk/rustdesk/releases/download/nightly/rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb + mv rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb rustdesk-${{ env.VERSION }}.deb + + - name: Patch archlinux PKGBUILD + run: | + sed -i "s/x86_64/${{ matrix.job.arch }}/g" res/PKGBUILD + if [[ "${{ matrix.job.arch }}" == "aarch64" ]]; then + sed -i "s/linux\/x64/linux\/arm64/g" ./res/PKGBUILD + fi + bsdtar -zxvf rustdesk-${{ env.VERSION }}.deb + tar -xvf ./data.tar.xz + case ${{ matrix.job.arch }} in + aarch64) + mkdir -p flutter/build/linux/arm64/release/bundle + cp -rf usr/lib/rustdesk/* flutter/build/linux/arm64/release/bundle/ + ;; + x86_64) + mkdir -p flutter/build/linux/x64/release/bundle + cp -rf usr/lib/rustdesk/* flutter/build/linux/x64/release/bundle/ + ;; esac + + - name: Build archlinux package + uses: rustdesk-org/arch-makepkg-action@master + with: + packages: > + llvm + clang + libva + libvdpau + rust + gstreamer + unzip + git + cmake + gcc + curl + wget + nasm + zip + make + pkg-config + clang + gtk3 + xdotool + libxcb + libxfixes + alsa-lib + pipewire + python + ttf-arphic-uming + libappindicator-gtk3 + pam + gst-plugins-base + gst-plugin-pipewire + scripts: | + cd res && HBB=`pwd`/.. FLUTTER=1 makepkg -f + + - name: Publish archlinux package + uses: softprops/action-gh-release@v1 + with: + prerelease: true + tag_name: ${{ env.TAG_NAME }} + files: | + res/rustdesk-${{ env.VERSION }}*.zst + + - name: Build appimage package shell: bash - - - name: Restore bridge files - uses: actions/download-artifact@master - with: - name: bridge-artifact - path: ./ - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@v1 - with: - toolchain: ${{ env.RUST_VERSION }} - components: "rustfmt" - - - uses: Swatinem/rust-cache@v2 - with: - prefix-key: rustdesk-lib-cache-android # TODO: drop '-android' part after caches are invalidated - key: ${{ matrix.job.target }}-${{ matrix.job.extra-build-features }} - - - name: Build rustdesk lib - env: - ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} - ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }} run: | - rustup target add ${{ matrix.job.target }} - cargo install cargo-ndk --version ${{ env.CARGO_NDK_VERSION }} - case ${{ matrix.job.target }} in - aarch64-linux-android) - ./flutter/ndk_arm64.sh - mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a - cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so - ;; - armv7-linux-androideabi) - ./flutter/ndk_arm.sh - mkdir -p ./flutter/android/app/src/main/jniLibs/armeabi-v7a - cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so - ;; - esac - - - name: Build rustdesk - shell: bash - env: - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64 - run: | - export PATH=/usr/lib/jvm/java-11-openjdk-amd64/bin:$PATH - # temporary use debug sign config - sed -i "s/signingConfigs.release/signingConfigs.debug/g" ./flutter/android/app/build.gradle - case ${{ matrix.job.target }} in - aarch64-linux-android) - mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a - cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/ - cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so - # build flutter - pushd flutter - flutter build apk --release --target-platform android-arm64 --split-per-abi - mv build/app/outputs/flutter-apk/app-arm64-v8a-release.apk ../rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk - ;; - armv7-linux-androideabi) - mkdir -p ./flutter/android/app/src/main/jniLibs/armeabi-v7a - cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/ - cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so - # build flutter - pushd flutter - flutter build apk --release --target-platform android-arm --split-per-abi - mv build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk ../rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk - ;; - esac + # set-up appimage-builder + pushd /tmp + wget -O appimage-builder-x86_64.AppImage https://github.com/AppImageCrafters/appimage-builder/releases/download/v1.1.0/appimage-builder-1.1.0-x86_64.AppImage + chmod +x appimage-builder-x86_64.AppImage + sudo mv appimage-builder-x86_64.AppImage /usr/local/bin/appimage-builder popd - mkdir -p signed-apk; pushd signed-apk - mv ../rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk . + # run appimage-builder + pushd appimage + sudo appimage-builder --skip-tests --recipe ./AppImageBuilder-${{ matrix.job.arch }}.yml - - uses: r0adkll/sign-android-release@v1 - name: Sign app APK - if: env.ANDROID_SIGNING_KEY != null - id: sign-rustdesk + - uses: rustdesk-org/run-on-arch-action@amd64-support + name: Build rustdesk flatpak package for ${{ matrix.job.arch }} + id: rpm with: - releaseDirectory: ./signed-apk - signingKeyBase64: ${{ secrets.ANDROID_SIGNING_KEY }} - alias: ${{ secrets.ANDROID_ALIAS }} - keyStorePassword: ${{ secrets.ANDROID_KEY_STORE_PASSWORD }} - keyPassword: ${{ secrets.ANDROID_KEY_PASSWORD }} - env: - # override default build-tools version (29.0.3) -- optional - BUILD_TOOLS_VERSION: "30.0.2" + arch: ${{ matrix.job.arch }} + distro: ${{ matrix.job.distro }} + githubToken: ${{ github.token }} + setup: | + ls -l "${PWD}" + dockerRunArgs: | + --volume "${PWD}:/workspace" + shell: /bin/bash + install: | + apt-get update -y + apt-get install -y \ + curl \ + git \ + rpm \ + wget + run: | + # disable git safe.directory + git config --global --add safe.directory "*" + pushd /workspace + # install + apt-get update -y + apt-get install -y \ + cmake \ + curl \ + flatpak \ + flatpak-builder \ + gcc \ + git \ + g++ \ + libgtk-3-dev \ + nasm \ + wget + # flatpak deps + flatpak --user remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + flatpak --user install -y flathub org.freedesktop.Platform/${{ matrix.job.arch }}/23.08 + flatpak --user install -y flathub org.freedesktop.Sdk/${{ matrix.job.arch }}/23.08 + # package + pushd flatpak + git clone https://github.com/flathub/shared-modules.git --depth=1 + flatpak-builder --user --force-clean --repo=repo ./build ./rustdesk.json + flatpak build-bundle ./repo rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.flatpak com.rustdesk.RustDesk - - name: Upload Artifacts - if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true' - uses: actions/upload-artifact@master - with: - name: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk - path: ${{steps.sign-rustdesk.outputs.signedReleaseFile}} - - - name: Publish signed apk package - if: env.ANDROID_SIGNING_KEY != null + - name: Publish flatpak package uses: softprops/action-gh-release@v1 with: prerelease: true tag_name: ${{ env.TAG_NAME }} files: | - ${{steps.sign-rustdesk.outputs.signedReleaseFile}} - - - name: Publish unsigned apk package - if: env.ANDROID_SIGNING_KEY == null && env.UPLOAD_ARTIFACT == 'true' - uses: softprops/action-gh-release@v1 - with: - prerelease: true - tag_name: ${{ env.TAG_NAME }} - files: | - signed-apk/rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk + flatpak/rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.flatpak diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 13bc1b293..ba599e87a 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -1431,6 +1431,18 @@ jobs: if [[ "${{ matrix.job.arch }}" == "aarch64" ]]; then sed -i "s/linux\/x64/linux\/arm64/g" ./res/PKGBUILD fi + bsdtar -zxvf rustdesk-${{ env.VERSION }}.deb + tar -xvf ./data.tar.xz + case ${{ matrix.job.arch }} in + aarch64) + mkdir -p flutter/build/linux/arm64/release/bundle + cp -rf usr/lib/rustdesk/* flutter/build/linux/arm64/release/bundle/ + ;; + x86_64) + mkdir -p flutter/build/linux/x64/release/bundle + cp -rf usr/lib/rustdesk/* flutter/build/linux/x64/release/bundle/ + ;; + esac - name: Build archlinux package uses: rustdesk-org/arch-makepkg-action@master @@ -1466,18 +1478,6 @@ jobs: gst-plugins-base gst-plugin-pipewire scripts: | - bsdtar -zxvf rustdesk-${{ env.VERSION }}.deb - tar -xvf ./data.tar.xz - case ${{ matrix.job.arch }} in - aarch64) - mkdir -p flutter/build/linux/arm64/release/bundle - cp -rf usr/lib/rustdesk/* flutter/build/linux/arm64/release/bundle/ - ;; - x86_64) - mkdir -p flutter/build/linux/x64/release/bundle - cp -rf usr/lib/rustdesk/* flutter/build/linux/x64/release/bundle/ - ;; - esac cd res && HBB=`pwd`/.. FLUTTER=1 makepkg -f - name: Publish archlinux package @@ -1549,7 +1549,6 @@ jobs: - name: Publish flatpak package uses: softprops/action-gh-release@v1 - if: env.UPLOAD_ARTIFACT == 'true' with: prerelease: true tag_name: ${{ env.TAG_NAME }}