diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index b9c608dba8..633df91b52 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -323,1349 +323,3 @@ jobs: files: | ./SignOutput/rustdesk-*.exe ./rustdesk-*.tar.gz - - build-for-macOS-arm64-selfhost: - # use build-for-macOS instead - if: false - runs-on: [self-hosted, macOS, ARM64] - 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: Checkout source code - uses: actions/checkout@v3 - - - name: Install flutter rust bridge deps - shell: bash - run: | - cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid" - pushd flutter && flutter pub get && popd - ~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/macos/Runner/bridge_generated.h - - - name: Build rustdesk - run: | - ./build.py --flutter --hwcodec - - - name: create unsigned dmg - if: env.UPLOAD_ARTIFACT == 'true' - run: | - CREATE_DMG="$(command -v create-dmg)" - CREATE_DMG="$(readlink -f "$CREATE_DMG")" - sed -i -e 's/MAXIMUM_UNMOUNTING_ATTEMPTS=3/MAXIMUM_UNMOUNTING_ATTEMPTS=7/' "$CREATE_DMG" - create-dmg --icon "RustDesk.app" 200 190 --hide-extension "RustDesk.app" --window-size 800 400 --app-drop-link 600 185 rustdesk-${{ env.VERSION }}-arm64.dmg ./flutter/build/macos/Build/Products/Release/RustDesk.app - - - name: Upload unsigned macOS app - if: env.UPLOAD_ARTIFACT == 'true' - uses: actions/upload-artifact@master - with: - name: rustdesk-unsigned-macos-arm64 - path: rustdesk-${{ env.VERSION }}-arm64.dmg # can not upload the directory directly or tar.gz file, which destroy the link structure, causing the codesign failed - - - name: Codesign app and create signed dmg - if: env.MACOS_P12_BASE64 != null && env.UPLOAD_ARTIFACT == 'true' - run: | - # Patch create-dmg to give more attempts to unmount image - CREATE_DMG="$(command -v create-dmg)" - CREATE_DMG="$(readlink -f "$CREATE_DMG")" - sed -i -e 's/MAXIMUM_UNMOUNTING_ATTEMPTS=3/MAXIMUM_UNMOUNTING_ATTEMPTS=7/' "$CREATE_DMG" - # start sign the rustdesk.app and dmg - rm -rf *.dmg || true - codesign --force --options runtime -s ${{ secrets.MACOS_CODESIGN_IDENTITY }} --deep --strict ./flutter/build/macos/Build/Products/Release/RustDesk.app -vvv - create-dmg --icon "RustDesk.app" 200 190 --hide-extension "RustDesk.app" --window-size 800 400 --app-drop-link 600 185 rustdesk-${{ env.VERSION }}.dmg ./flutter/build/macos/Build/Products/Release/RustDesk.app - codesign --force --options runtime -s ${{ secrets.MACOS_CODESIGN_IDENTITY }} --deep --strict rustdesk-${{ env.VERSION }}.dmg -vvv - # notarize the rustdesk-${{ env.VERSION }}.dmg - rcodesign notary-submit --api-key-path ~/.p12/api-key.json --staple rustdesk-${{ env.VERSION }}.dmg - - - name: Rename rustdesk - if: env.UPLOAD_ARTIFACT == 'true' - run: | - for name in rustdesk*??.dmg; do - mv "$name" "${name%%.dmg}-aarch64.dmg" - done - - - name: Publish DMG package - if: env.UPLOAD_ARTIFACT == 'true' - uses: softprops/action-gh-release@v1 - with: - prerelease: true - tag_name: ${{ env.TAG_NAME }} - files: | - rustdesk*-aarch64.dmg - - build-rustdesk-ios: - if: ${{ inputs.upload-artifact }} - name: build rustdesk ios ipa - runs-on: ${{ matrix.job.os }} - strategy: - fail-fast: false - matrix: - job: - - { - arch: aarch64, - target: aarch64-apple-ios, - os: macos-13, - vcpkg-triplet: arm64-ios, - } - 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: | - brew install nasm - - name: Checkout source code - uses: actions/checkout@v3 - - name: Install flutter - uses: subosito/flutter-action@v2 - with: - channel: "stable" - flutter-version: ${{ env.FLUTTER_VERSION }} - - - name: Setup vcpkg with Github Actions binary cache - uses: lukka/run-vcpkg@v11 - with: - vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }} - - - name: Install vcpkg dependencies - run: | - $VCPKG_ROOT/vcpkg install --triplet ${{ matrix.job.vcpkg-triplet }} --x-install-root="$VCPKG_ROOT/installed" - shell: bash - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@v1 - with: - toolchain: ${{ env.RUST_VERSION }} - targets: ${{ matrix.job.target }} - components: "rustfmt" - - - uses: Swatinem/rust-cache@v2 - with: - prefix-key: rustdesk-lib-cache-ios - key: ${{ matrix.job.target }} - - - name: Install flutter rust bridge deps - shell: bash - run: | - cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid" - pushd flutter && flutter pub get && popd - ~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/ios/Runner/bridge_generated.h - - - name: Build rustdesk lib - run: | - rustup target add ${{ matrix.job.target }} - cargo build --features flutter,hwcodec --release --target aarch64-apple-ios --lib - - - name: Build rustdesk - shell: bash - run: | - pushd flutter - # flutter build ipa --release --obfuscate --split-debug-info=./split-debug-info --no-codesign - # for easy debugging - flutter build ipa --release --no-codesign - - # - 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: flutter/build/ios/ipa/*.ipa - - # - name: Publish ipa 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: | - # flutter/build/ios/ipa/*.ipa - - build-rustdesk-ios-selfhost: - #if: ${{ inputs.upload-artifact }} - if: false - runs-on: [self-hosted, macOS, ARM64] - strategy: - fail-fast: false - 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: Checkout source code - uses: actions/checkout@v3 - - # $VCPKG_ROOT/vcpkg install --triplet arm64-ios --x-install-root="$VCPKG_ROOT/installed" - - - name: Install flutter rust bridge deps - shell: bash - run: | - cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid" - pushd flutter && flutter pub get && popd - ~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/ios/Runner/bridge_generated.h - - - name: Build rustdesk lib - run: | - cargo build --features flutter,hwcodec --release --target aarch64-apple-ios --lib - - - name: Build rustdesk - # ios sdk not installed on this machine, I will install it later after I am back home - if: false - shell: bash - run: | - pushd flutter - # flutter build ipa --release --obfuscate --split-debug-info=./split-debug-info --no-codesign - # for easy debugging - flutter build ipa --release --no-codesign - - # - 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: flutter/build/ios/ipa/*.ipa - - # - name: Publish ipa 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: | - # flutter/build/ios/ipa/*.ipa - - build-for-macOS: - name: ${{ matrix.job.target }} - runs-on: ${{ matrix.job.os }} - strategy: - fail-fast: false - matrix: - job: - - { - target: x86_64-apple-darwin, - os: macos-13, #macos-latest or macos-14 use M1 now, https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#:~:text=14%20GB-,macos%2Dlatest%20or%20macos%2D14,-The%20macos%2Dlatestlabel - extra-build-args: "", - arch: x86_64, - } - - { - target: aarch64-apple-darwin, - os: macos-latest, - # extra-build-args: "--disable-flutter-texture-render", # disable this for mac, because we see a lot of users reporting flickering both on arm and x64, and we can not confirm if texture rendering has better performance if htere is no vram, https://github.com/rustdesk/rustdesk/issues/6296 - extra-build-args: "", - 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: Checkout source code - uses: actions/checkout@v3 - - - name: Import the codesign cert - if: env.MACOS_P12_BASE64 != null - uses: apple-actions/import-codesign-certs@v1 - with: - p12-file-base64: ${{ secrets.MACOS_P12_BASE64 }} - p12-password: ${{ secrets.MACOS_P12_PASSWORD }} - keychain: rustdesk - - - name: Check sign and import sign key - if: env.MACOS_P12_BASE64 != null - run: | - security default-keychain -s rustdesk.keychain - security find-identity -v - - - name: Import notarize key - if: env.MACOS_P12_BASE64 != null - uses: timheuer/base64-to-file@v1.2 - with: - # https://gregoryszorc.com/docs/apple-codesign/stable/apple_codesign_rcodesign.html#notarizing-and-stapling - fileName: rustdesk.json - fileDir: ${{ github.workspace }} - encodedString: ${{ secrets.MACOS_NOTARIZE_JSON }} - - - name: Install rcodesign tool - if: env.MACOS_P12_BASE64 != null - shell: bash - run: | - pushd /tmp - wget https://github.com/indygreg/apple-platform-rs/releases/download/apple-codesign%2F0.22.0/apple-codesign-0.22.0-macos-universal.tar.gz - tar -zxvf apple-codesign-0.22.0-macos-universal.tar.gz - mv apple-codesign-0.22.0-macos-universal/rcodesign /usr/local/bin - popd - - - name: Install build runtime - run: | - brew install llvm create-dmg nasm cmake gcc wget ninja pkg-config - - - name: Install flutter - uses: subosito/flutter-action@v2 - with: - channel: "stable" - flutter-version: ${{ env.FLUTTER_VERSION }} - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@v1 - with: - toolchain: ${{ env.RUST_VERSION }} - targets: ${{ matrix.job.target }} - components: "rustfmt" - - - uses: Swatinem/rust-cache@v2 - with: - prefix-key: ${{ matrix.job.os }} - - - name: Install flutter rust bridge deps - shell: bash - run: | - cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid" - pushd flutter && flutter pub get && popd - ~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/macos/Runner/bridge_generated.h - - - name: Setup vcpkg with Github Actions binary cache - uses: lukka/run-vcpkg@v11 - with: - vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }} - - - name: Install vcpkg dependencies - run: | - $VCPKG_ROOT/vcpkg install --x-install-root="$VCPKG_ROOT/installed" - - - name: Show version information (Rust, cargo, Clang) - shell: bash - run: | - clang --version || true - rustup -V - rustup toolchain list - rustup default - cargo -V - rustc -V - - - name: Build rustdesk - run: | - ./build.py --flutter --hwcodec ${{ matrix.job.extra-build-args }} - - - name: create unsigned dmg - if: env.UPLOAD_ARTIFACT == 'true' - run: | - CREATE_DMG="$(command -v create-dmg)" - CREATE_DMG="$(readlink -f "$CREATE_DMG")" - sed -i -e 's/MAXIMUM_UNMOUNTING_ATTEMPTS=3/MAXIMUM_UNMOUNTING_ATTEMPTS=7/' "$CREATE_DMG" - create-dmg --icon "RustDesk.app" 200 190 --hide-extension "RustDesk.app" --window-size 800 400 --app-drop-link 600 185 rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.dmg ./flutter/build/macos/Build/Products/Release/RustDesk.app - - - name: Upload unsigned macOS app - if: env.UPLOAD_ARTIFACT == 'true' - uses: actions/upload-artifact@master - with: - name: rustdesk-unsigned-macos-${{ matrix.job.arch }} - path: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.dmg # can not upload the directory directly or tar.gz, which destroy the link structure, causing the codesign failed - - - name: Codesign app and create signed dmg - if: env.MACOS_P12_BASE64 != null && env.UPLOAD_ARTIFACT == 'true' - run: | - # Patch create-dmg to give more attempts to unmount image - CREATE_DMG="$(command -v create-dmg)" - CREATE_DMG="$(readlink -f "$CREATE_DMG")" - sed -i -e 's/MAXIMUM_UNMOUNTING_ATTEMPTS=3/MAXIMUM_UNMOUNTING_ATTEMPTS=7/' "$CREATE_DMG" - # Unlock keychain - security default-keychain -s rustdesk.keychain - security unlock-keychain -p ${{ secrets.MACOS_P12_PASSWORD }} rustdesk.keychain - # start sign the rustdesk.app and dmg - rm -rf *.dmg || true - codesign --force --options runtime -s ${{ secrets.MACOS_CODESIGN_IDENTITY }} --deep --strict ./flutter/build/macos/Build/Products/Release/RustDesk.app -vvv - create-dmg --icon "RustDesk.app" 200 190 --hide-extension "RustDesk.app" --window-size 800 400 --app-drop-link 600 185 rustdesk-${{ env.VERSION }}.dmg ./flutter/build/macos/Build/Products/Release/RustDesk.app - codesign --force --options runtime -s ${{ secrets.MACOS_CODESIGN_IDENTITY }} --deep --strict rustdesk-${{ env.VERSION }}.dmg -vvv - # notarize the rustdesk-${{ env.VERSION }}.dmg - rcodesign notary-submit --api-key-path ${{ github.workspace }}/rustdesk.json --staple rustdesk-${{ env.VERSION }}.dmg - - - name: Rename rustdesk - if: env.UPLOAD_ARTIFACT == 'true' - run: | - for name in rustdesk*??.dmg; do - mv "$name" "${name%%.dmg}-${{ matrix.job.arch }}.dmg" - done - - - name: Publish DMG package - if: env.UPLOAD_ARTIFACT == 'true' - uses: softprops/action-gh-release@v1 - with: - prerelease: true - tag_name: ${{ env.TAG_NAME }} - files: | - rustdesk*-${{ matrix.job.arch }}.dmg - - publish_unsigned: - needs: - - build-for-macOS - - build-for-windows-flutter - runs-on: ubuntu-latest - if: ${{ inputs.upload-artifact }} - steps: - - name: Download artifacts - uses: actions/download-artifact@master - with: - name: rustdesk-unsigned-macos-x86_64 - path: ./ - - - name: Download Artifacts - uses: actions/download-artifact@master - with: - name: rustdesk-unsigned-macos-aarch64 - path: ./ - - - name: Download Artifacts - uses: actions/download-artifact@master - with: - name: rustdesk-unsigned-windows-x86_64 - path: ./windows-x86_64/ - - - name: Combine unsigned app - run: | - tar czf rustdesk-${{ env.VERSION }}-unsigned.tar.gz *.dmg windows-x86_64 - - - name: Publish unsigned app - uses: softprops/action-gh-release@v1 - with: - prerelease: true - tag_name: ${{ env.TAG_NAME }} - files: rustdesk-${{ env.VERSION }}-unsigned.tar.gz - - generate-bridge-linux: - uses: ./.github/workflows/bridge.yml - - build-rustdesk-android: - needs: [generate-bridge-linux] - name: build rustdesk android apk ${{ matrix.job.target }} - runs-on: ${{ matrix.job.os }} - strategy: - fail-fast: false - matrix: - job: - - { - arch: aarch64, - target: aarch64-linux-android, - os: ubuntu-20.04, - openssl-arch: android-arm64, - } - - { - arch: armv7, - target: armv7-linux-androideabi, - os: ubuntu-20.04, - openssl-arch: android-arm, - } - 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 \ - 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 \ - 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.ANDROID_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 - 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 - ;; - esac - 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 }} - - - name: fix android for flutter 3.13 - if: $${{ env.ANDROID_FLUTTER_VERSION == '3.13.9' }} - run: | - sed -i 's/uni_links_desktop/#uni_links_desktop/g' flutter/pubspec.yaml - cd flutter/lib - find . | grep dart | xargs sed -i 's/textScaler: TextScaler.linear(\(.*\)),/textScaleFactor: \1,/g' - - - 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 - popd - mkdir -p signed-apk; pushd signed-apk - mv ../rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk . - - - uses: r0adkll/sign-android-release@v1 - name: Sign app APK - if: env.ANDROID_SIGNING_KEY != null - id: sign-rustdesk - 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" - - - 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 && env.UPLOAD_ARTIFACT == 'true' - 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 - - build-rustdesk-linux: - needs: [generate-bridge-linux] - name: build rustdesk linux ${{ matrix.job.target }} - runs-on: ${{ matrix.job.on }} - strategy: - fail-fast: false - matrix: - # use a high level qemu-user-static - job: - - { - arch: x86_64, - target: x86_64-unknown-linux-gnu, - distro: ubuntu18.04, - on: ubuntu-20.04, - deb_arch: amd64, - vcpkg-triplet: x64-linux, - } - - { - arch: aarch64, - target: aarch64-unknown-linux-gnu, - distro: ubuntu18.04, - on: [self-hosted, Linux, ARM64], - deb_arch: arm64, - vcpkg-triplet: arm64-linux, - } - 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: Maximize build space - if: ${{ matrix.job.arch == 'x86_64' }} - run: | - sudo rm -rf /opt/ghc - sudo rm -rf /usr/local/lib/android - sudo rm -rf /usr/share/dotnet - sudo apt-get update -y - sudo apt-get install -y nasm qemu-user-static - - - name: Checkout source code - uses: actions/checkout@v3 - - - name: Set Swap Space - if: ${{ matrix.job.arch == 'x86_64' }} - uses: pierotofy/set-swap-space@master - with: - swap-size-gb: 12 - - - name: Free Space - run: | - df -h - free -m - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@v1 - if: matrix.job.arch == 'x86_64' || env.UPLOAD_ARTIFACT == 'true' - with: - toolchain: ${{ env.RUST_VERSION }} - targets: ${{ matrix.job.target }} - components: "rustfmt" - - - name: Save Rust toolchain version - run: | - RUST_TOOLCHAIN_VERSION=$(cargo --version | awk '{print $2}') - echo "RUST_TOOLCHAIN_VERSION=$RUST_TOOLCHAIN_VERSION" >> $GITHUB_ENV - - - name: Disable rust bridge build - run: | - # only build cdylib - sed -i "s/\[\"cdylib\", \"staticlib\", \"rlib\"\]/\[\"cdylib\"\]/g" Cargo.toml - - - name: Restore bridge files - if: matrix.job.arch == 'x86_64' || env.UPLOAD_ARTIFACT == 'true' - uses: actions/download-artifact@master - with: - name: bridge-artifact - path: ./ - - - name: Setup vcpkg with Github Actions binary cache - if: matrix.job.arch == 'x86_64' || env.UPLOAD_ARTIFACT == 'true' - uses: lukka/run-vcpkg@v11 - with: - vcpkgDirectory: /opt/artifacts/vcpkg - vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }} - - - name: Install vcpkg dependencies - if: matrix.job.arch == 'x86_64' || env.UPLOAD_ARTIFACT == 'true' - run: | - $VCPKG_ROOT/vcpkg install --triplet ${{ matrix.job.vcpkg-triplet }} --x-install-root="$VCPKG_ROOT/installed" - shell: bash - - - name: Restore bridge files - if: matrix.job.arch == 'x86_64' || env.UPLOAD_ARTIFACT == 'true' - uses: actions/download-artifact@master - with: - name: bridge-artifact - path: ./ - - - uses: rustdesk-org/run-on-arch-action@amd64-support - name: Build rustdesk - id: vcpkg - if: matrix.job.arch == 'x86_64' || env.UPLOAD_ARTIFACT == 'true' - with: - arch: ${{ matrix.job.arch }} - distro: ${{ matrix.job.distro }} - githubToken: ${{ github.token }} - setup: | - ls -l "${PWD}" - ls -l /opt/artifacts/vcpkg/installed - dockerRunArgs: | - --volume "${PWD}:/workspace" - --volume "/opt/artifacts:/opt/artifacts" - shell: /bin/bash - install: | - apt-get update -y - echo -e "installing deps" - apt-get install -y \ - build-essential \ - clang \ - cmake \ - curl \ - gcc \ - git \ - g++ \ - libappindicator3-dev \ - libasound2-dev \ - libclang-10-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 \ - nasm \ - ninja-build \ - pkg-config \ - tree \ - python3 \ - rpm \ - unzip \ - wget \ - xz-utils - # we have libopus compiled by us. - apt-get remove -y libopus-dev || true - # output devs - ls -l ./ - tree -L 3 /opt/artifacts/vcpkg/installed - run: | - # disable git safe.directory - git config --global --add safe.directory "*" - # rust - pushd /opt - # do not use rustup, because memory overflow in qemu - wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }}.tar.gz - tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz - cd rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} && ./install.sh - rm -rf rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} - # edit config - mkdir -p ~/.cargo/ - echo """ - [source.crates-io] - registry = 'https://github.com/rust-lang/crates.io-index' - """ > ~/.cargo/config - cat ~/.cargo/config - # start build - pushd /workspace - export VCPKG_ROOT=/opt/artifacts/vcpkg - if [[ "${{ matrix.job.arch }}" == "aarch64" ]]; then - export JOBS="--jobs 3" - else - export JOBS="" - fi - echo $JOBS - cargo build --lib $JOBS --features hwcodec,flutter --release - rm -rf target/release/deps target/release/build - rm -rf ~/.cargo - - # Setup Flutter - # disable git safe.directory - git config --global --add safe.directory "*" - pushd /workspace - case ${{ matrix.job.arch }} in - aarch64) - export PATH=/opt/flutter-elinux/bin:$PATH - sed -i "s/flutter build linux --release/flutter-elinux build linux --verbose/g" ./build.py - sed -i "s/x64\/release/arm64\/release/g" ./build.py - ;; - x86_64) - export PATH=/opt/flutter/bin:$PATH - ;; - esac - popd - pushd /opt - wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${{ env.FLUTTER_VERSION }}-stable.tar.xz - tar xf flutter_linux_${{ env.FLUTTER_VERSION }}-stable.tar.xz - case ${{ matrix.job.arch }} in - aarch64) - # clone repo and reset to flutter ${{ env.FLUTTER_VERSION }} - git clone https://github.com/sony/flutter-elinux.git || true - pushd flutter-elinux - git fetch - git reset --hard ${{ env.FLUTTER_VERSION }} - bin/flutter-elinux doctor -v - bin/flutter-elinux precache --linux - popd - cp -R flutter/bin/cache/artifacts/engine/linux-x64/shader_lib flutter-elinux/flutter/bin/cache/artifacts/engine/linux-arm64 - rm -rf flutter - ;; - x86_64) - flutter doctor -v - ;; - esac - - # build flutter - pushd /workspace - export CARGO_INCREMENTAL=0 - export DEB_ARCH=${{ matrix.job.deb_arch }} - python3 ./build.py --flutter --skip-cargo - for name in rustdesk*??.deb; do - mv "$name" "${name%%.deb}-${{ matrix.job.arch }}.deb" - done - - # rpm package - echo -e "start packaging fedora package" - pushd /workspace - case ${{ matrix.job.arch }} in - aarch64) - sed -i "s/linux\/x64/linux\/arm64/g" ./res/rpm-flutter.spec - ;; - esac - HBB=`pwd` rpmbuild ./res/rpm-flutter.spec -bb - pushd ~/rpmbuild/RPMS/${{ matrix.job.arch }} - for name in rustdesk*??.rpm; do - mv "$name" /workspace/"${name%%.rpm}.rpm" - done - - # rpm suse package - echo -e "start packaging suse package" - pushd /workspace - case ${{ matrix.job.arch }} in - aarch64) - sed -i "s/linux\/x64/linux\/arm64/g" ./res/rpm-flutter-suse.spec - ;; - esac - HBB=`pwd` rpmbuild ./res/rpm-flutter-suse.spec -bb - pushd ~/rpmbuild/RPMS/${{ matrix.job.arch }} - for name in rustdesk*??.rpm; do - mv "$name" /workspace/"${name%%.rpm}-suse.rpm" - done - - - name: Publish debian/rpm package - if: env.UPLOAD_ARTIFACT == 'true' - uses: softprops/action-gh-release@v1 - with: - prerelease: true - tag_name: ${{ env.TAG_NAME }} - files: | - rustdesk-*.deb - rustdesk-*.rpm - - - name: Upload deb - uses: actions/upload-artifact@master - if: env.UPLOAD_ARTIFACT == 'true' - with: - name: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb - path: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb - - # only x86_64 for arch since we can not find newest arm64 docker image to build - # old arch image does not make sense for arch since it is "arch" which always update to date - # and failed to makepkg arm64 on x86_64 - - name: Patch archlinux PKGBUILD - if: matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true' - run: | - sed -i "s/x86_64/${{ matrix.job.arch }}/g" res/PKGBUILD - if [[ "${{ matrix.job.arch }}" == "aarch64" ]]; then - sed -i "s/x86_64/aarch64/g" ./res/PKGBUILD - fi - - - name: Build archlinux package - if: matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true' - uses: rustdesk-org/arch-makepkg-action@master - with: - packages: - scripts: | - cd res && HBB=`pwd`/.. FLUTTER=1 makepkg -f - - - name: Publish archlinux package - if: matrix.job.arch == 'x86_64' && env.UPLOAD_ARTIFACT == 'true' - uses: softprops/action-gh-release@v1 - with: - prerelease: true - tag_name: ${{ env.TAG_NAME }} - files: | - res/rustdesk-${{ env.VERSION }}*.zst - - build-rustdesk-linux-sciter: - if: ${{ inputs.upload-artifact }} - needs: build-rustdesk-linux # not for dep, just make it run later for parallelism - runs-on: ${{ matrix.job.on }} - name: build-rustdesk-linux-sciter ${{ matrix.job.target }} - strategy: - fail-fast: false - matrix: - # use a high level qemu-user-static - job: - - { - arch: x86_64, - target: x86_64-unknown-linux-gnu, - on: ubuntu-20.04, - distro: ubuntu18.04, - deb_arch: amd64, - sciter_arch: x64, - vcpkg-triplet: x64-linux, - } - - { - arch: armv7, - target: armv7-unknown-linux-gnueabihf, - on: [self-hosted, Linux, ARM64], - distro: ubuntu18.04-rustdesk, - deb_arch: armhf, - sciter_arch: arm32, - vcpkg-triplet: arm-linux, - } - 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 \ - cmake \ - crossbuild-essential-armhf \ - curl \ - g++ \ - gcc \ - git \ - nasm \ - ninja-build \ - pkg-config \ - unzip \ - xz-utils \ - zip - - - name: Checkout source code - uses: actions/checkout@v3 - - - name: Free Space - run: | - df -h - free -m - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@v1 - with: - toolchain: ${{ env.RUST_VERSION }} - targets: ${{ matrix.job.target }} - components: "rustfmt" - - - name: Save Rust toolchain version - run: | - RUST_TOOLCHAIN_VERSION=$(cargo --version | awk '{print $2}') - echo "RUST_TOOLCHAIN_VERSION=$RUST_TOOLCHAIN_VERSION" >> $GITHUB_ENV - - - 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 - run: | - cp $PWD/res/vcpkg/linux.cmake $VCPKG_ROOT/scripts/toolchains/linux.cmake - $VCPKG_ROOT/vcpkg install --triplet ${{ matrix.job.vcpkg-triplet }} --x-install-root="$VCPKG_ROOT/installed" - shell: bash - - - uses: rustdesk-org/run-on-arch-action@amd64-support - name: Build rustdesk sciter binary for ${{ matrix.job.arch }} - id: vcpkg - with: - arch: ${{ matrix.job.arch }} - distro: ${{ matrix.job.distro }} - githubToken: ${{ github.token }} - setup: | - ls -l "${PWD}" - dockerRunArgs: | - --volume "${PWD}:/workspace" - --volume "/opt/artifacts:/opt/artifacts" - shell: /bin/bash - install: | - apt-get update -y - apt-get install -y \ - build-essential \ - clang \ - cmake \ - curl \ - gcc \ - git \ - g++ \ - libappindicator3-dev \ - libasound2-dev \ - libclang-dev \ - libdbus-1-dev \ - libglib2.0-dev \ - libgstreamer1.0-dev \ - libgstreamer-plugins-base1.0-dev \ - libgtk-3-dev \ - liblzma-dev \ - libpam0g-dev \ - libpulse-dev \ - libva-dev \ - libvdpau-dev \ - libxcb-randr0-dev \ - libxcb-shape0-dev \ - libxcb-xfixes0-dev \ - libxdo-dev \ - libxfixes-dev \ - nasm \ - ninja-build \ - pkg-config \ - python3 \ - rpm \ - unzip \ - wget \ - xz-utils - run: | - # disable git safe.directory - git config --global --add safe.directory "*" - # rust - pushd /opt - # do not use rustup, because memory overflow in qemu - wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }}.tar.gz - tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz - cd rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} && ./install.sh - rm -rf rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} - # edit config - mkdir -p ~/.cargo/ - echo """ - [source.crates-io] - registry = 'https://github.com/rust-lang/crates.io-index' - """ > ~/.cargo/config - cat ~/.cargo/config - - # build - pushd /workspace - python3 ./res/inline-sciter.py - export VCPKG_ROOT=/opt/artifacts/vcpkg - export CARGO_INCREMENTAL=0 - cargo build --features inline --release --bins --jobs 1 - # package - mkdir -p ./Release - mv ./target/release/rustdesk ./Release/rustdesk - wget -O ./Release/libsciter-gtk.so https://github.com/c-smile/sciter-sdk/raw/master/bin.lnx/${{ matrix.job.sciter_arch }}/libsciter-gtk.so - export DEB_ARCH=${{ matrix.job.deb_arch }} - ./build.py --package ./Release - - - name: Rename rustdesk - shell: bash - run: | - for name in rustdesk*??.deb; do - # use cp to duplicate deb files to fit other packages. - cp "$name" "${name%%.deb}-${{ matrix.job.arch }}-sciter.deb" - done - - - name: Publish debian package - if: env.UPLOAD_ARTIFACT == 'true' - uses: softprops/action-gh-release@v1 - with: - prerelease: true - tag_name: ${{ env.TAG_NAME }} - files: | - rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}-sciter.deb - - - name: Upload deb - uses: actions/upload-artifact@master - if: env.UPLOAD_ARTIFACT == 'true' - with: - name: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}-sciter.deb - path: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}-sciter.deb - - build-appimage: - name: Build appimage ${{ matrix.job.target }} - needs: [build-rustdesk-linux] - runs-on: ubuntu-20.04 - if: ${{ inputs.upload-artifact }} - strategy: - fail-fast: false - matrix: - job: - - { - target: x86_64-unknown-linux-gnu, - arch: x86_64, - } - - { - target: aarch64-unknown-linux-gnu, - arch: aarch64, - } - steps: - - name: Checkout source code - uses: actions/checkout@v3 - - - name: Download Binary - uses: actions/download-artifact@master - with: - name: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb - path: . - - - name: Rename Binary - run: | - mv rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.deb appimage/rustdesk.deb - - - name: Build appimage package - shell: bash - run: | - # install libarchive-tools for bsdtar command used in AppImageBuilder.yml - sudo apt-get update -y - sudo apt-get install -y libarchive-tools - # 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 - # run appimage-builder - pushd appimage - sudo appimage-builder --skip-tests --recipe ./AppImageBuilder-${{ matrix.job.arch }}.yml - - - name: Publish appimage package - if: env.UPLOAD_ARTIFACT == 'true' - uses: softprops/action-gh-release@v1 - with: - prerelease: true - tag_name: ${{ env.TAG_NAME }} - files: | - ./appimage/rustdesk-${{ env.VERSION }}-*.AppImage - - build-flatpak: - name: Build flatpak ${{ matrix.job.target }}${{ matrix.job.suffix }} - needs: - - build-rustdesk-linux - - build-rustdesk-linux-sciter - runs-on: ${{ matrix.job.on }} - if: ${{ inputs.upload-artifact }} - strategy: - fail-fast: false - matrix: - job: - - { - target: x86_64-unknown-linux-gnu, - distro: ubuntu18.04, - on: ubuntu-20.04, - arch: x86_64, - suffix: "", - } - - { - target: x86_64-unknown-linux-gnu, - distro: ubuntu18.04, - on: ubuntu-20.04, - arch: x86_64, - suffix: "-sciter", - } - - { - 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, - suffix: "", - } - steps: - - name: Checkout source code - uses: actions/checkout@v3 - - - name: Download Binary - uses: actions/download-artifact@master - with: - name: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}${{ matrix.job.suffix }}.deb - path: . - - - name: Rename Binary - run: | - mv rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}${{ matrix.job.suffix }}.deb flatpak/rustdesk.deb - - - uses: rustdesk-org/run-on-arch-action@amd64-support - name: Build rustdesk flatpak package for ${{ matrix.job.arch }} - id: flatpak - with: - 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 }}${{ matrix.job.suffix }}.flatpak com.rustdesk.RustDesk - - - name: Publish flatpak package - uses: softprops/action-gh-release@v1 - with: - prerelease: true - tag_name: ${{ env.TAG_NAME }} - files: | - flatpak/rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}${{ matrix.job.suffix }}.flatpak - - build-rustdesk-web: - if: False - name: build-rustdesk-web - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - env: - RELEASE_NAME: web-basic - steps: - - name: Checkout source code - uses: actions/checkout@v3 - - - name: Prepare env - run: | - sudo apt-get update -y - sudo apt-get install -y wget npm - - - name: Install flutter - uses: subosito/flutter-action@v2.12.0 #https://github.com/subosito/flutter-action/issues/277 - with: - channel: "stable" - flutter-version: ${{ env.FLUTTER_VERSION }} - cache: true - - # https://rustdesk.com/docs/en/dev/build/web/ - - name: Build web - shell: bash - run: | - pushd flutter/web/js - npm install yarn -g - npm install typescript -g - npm install protoc -g - # Install protoc first, see: https://google.github.io/proto-lens/installing-protoc.html - npm install ts-proto - # Only works with vite <= 2.8, see: https://github.com/vitejs/vite/blob/main/docs/guide/build.md#chunking-strategy - npm install vite@2.8 - yarn install && yarn build - popd - - pushd flutter/web - wget https://github.com/rustdesk/doc.rustdesk.com/releases/download/console/web_deps.tar.gz - tar xzf web_deps.tar.gz - popd - - pushd flutter - flutter build web --release - cd build - cp ../web/README.md web - # TODO: Remove the following line when the web is almost complete. - echo -e "\n\nThis build is for preview and not full functionality." >> web/README.md - dir_name="rustdesk-${{ env.VERSION }}-${{ env.RELEASE_NAME }}" - mv web "${dir_name}" && tar czf "${dir_name}".tar.gz "${dir_name}" - sha256sum "${dir_name}".tar.gz - popd - - - name: Publish web - if: env.UPLOAD_ARTIFACT == 'true' - uses: softprops/action-gh-release@v1 - with: - prerelease: true - tag_name: ${{ env.TAG_NAME }} - files: | - flutter/build/rustdesk-${{ env.VERSION }}-${{ env.RELEASE_NAME }}.tar.gz