name: Flutter-CI on: push: branches: - "main" - "develop" - "release/*" paths: - ".github/workflows/flutter_ci.yaml" - "frontend/**" - "!frontend/appflowy_tauri/**" pull_request: branches: - "main" - "develop" - "release/*" paths: - ".github/workflows/flutter_ci.yaml" - "frontend/**" - "!frontend/appflowy_tauri/**" env: CARGO_TERM_COLOR: always FLUTTER_VERSION: "3.13.9" RUST_TOOLCHAIN: "1.70" CARGO_MAKE_VERSION: "0.36.6" concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: prepare: if: github.event.pull_request.draft != true strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] include: - os: ubuntu-latest flutter_profile: development-linux-x86_64 target: x86_64-unknown-linux-gnu - os: macos-latest flutter_profile: development-mac-x86_64 target: x86_64-apple-darwin - os: windows-latest flutter_profile: development-windows-x86 target: x86_64-pc-windows-msvc runs-on: ${{ matrix.os }} steps: # the following step is required to avoid running out of space - name: Maximize build space if: matrix.os == 'ubuntu-latest' run: | sudo rm -rf /usr/share/dotnet sudo rm -rf /opt/ghc sudo rm -rf "/usr/local/share/boost" sudo rm -rf "$AGENT_TOOLSDIRECTORY" - name: Checkout source code uses: actions/checkout@v2 - name: Install Rust toolchain id: rust_toolchain uses: actions-rs/toolchain@v1 with: toolchain: ${{ env.RUST_TOOLCHAIN }} target: ${{ matrix.target }} override: true profile: minimal - name: Install flutter id: flutter uses: subosito/flutter-action@v2 with: channel: "stable" flutter-version: ${{ env.FLUTTER_VERSION }} - uses: Swatinem/rust-cache@v2 with: prefix-key: ${{ matrix.os }} workspaces: | frontend/rust-lib cache-all-crates: true - uses: taiki-e/install-action@v2 with: tool: cargo-make@${{ env.CARGO_MAKE_VERSION }}, duckscript_cli - name: Install prerequisites working-directory: frontend run: | if [ "$RUNNER_OS" == "Linux" ]; then sudo wget -qO /etc/apt/trusted.gpg.d/dart_linux_signing_key.asc https://dl-ssl.google.com/linux/linux_signing_key.pub sudo wget -qO /etc/apt/sources.list.d/dart_stable.list https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list sudo apt-get update sudo apt-get install -y dart curl build-essential libssl-dev clang cmake ninja-build pkg-config libgtk-3-dev keybinder-3.0 libnotify-dev elif [ "$RUNNER_OS" == "Windows" ]; then vcpkg integrate install elif [ "$RUNNER_OS" == "macOS" ]; then echo 'do nothing' fi cargo make appflowy-flutter-deps-tools shell: bash - name: Build AppFlowy working-directory: frontend run: | cargo make --profile ${{ matrix.flutter_profile }} appflowy-core-dev - name: Run code generation working-directory: frontend run: | cargo make code_generation - name: Flutter Analyzer working-directory: frontend/appflowy_flutter run: | flutter analyze . - name: Compress appflowy_flutter run: tar -czf appflowy_flutter.tar.gz frontend/appflowy_flutter - uses: actions/upload-artifact@v3 with: name: ${{ github.run_id }}-${{ matrix.os }} path: appflowy_flutter.tar.gz unit_test: needs: [prepare] if: github.event.pull_request.draft != true strategy: fail-fast: false matrix: os: [macos-latest] include: - os: macos-latest flutter_profile: development-mac-x86_64 target: x86_64-apple-darwin runs-on: ${{ matrix.os }} steps: - name: Checkout source code uses: actions/checkout@v2 - name: Install Rust toolchain id: rust_toolchain uses: actions-rs/toolchain@v1 with: toolchain: ${{ env.RUST_TOOLCHAIN }} target: ${{ matrix.target }} override: true profile: minimal - name: Install flutter id: flutter uses: subosito/flutter-action@v2 with: channel: "stable" flutter-version: ${{ env.FLUTTER_VERSION }} - uses: Swatinem/rust-cache@v2 with: prefix-key: ${{ matrix.os }} workspaces: | frontend/rust-lib cache-all-crates: true - uses: taiki-e/install-action@v2 with: tool: cargo-make@${{ env.CARGO_MAKE_VERSION }}, duckscript_cli - name: Install prerequisites working-directory: frontend run: | if [ "$RUNNER_OS" == "macOS" ]; then cargo make appflowy-flutter-deps-tools fi shell: bash - name: Run Flutter unit tests working-directory: frontend run: | if [ "$RUNNER_OS" == "macOS" ]; then flutter config --enable-macos-desktop cargo make --profile ${{ matrix.flutter_profile }} appflowy-dev cargo make dart_unit_test else cargo make dart_unit_test_no_build fi shell: bash - name: Upload coverage to Codecov uses: Wandalen/wretry.action@v1.0.36 with: action: codecov/codecov-action@v3 with: | name: appflowy flags: appflowy_flutter_unit_test fail_ci_if_error: true verbose: true os: ${{ matrix.os }} token: ${{ secrets.CODECOV_TOKEN }} attempt_limit: 20 attempt_delay: 10000 integration_test: needs: [prepare] if: github.event.pull_request.draft != true strategy: fail-fast: false matrix: os: [ubuntu-latest,windows-latest] include: - os: ubuntu-latest flutter_profile: development-linux-x86_64 target: x86_64-unknown-linux-gnu - os: windows-latest flutter_profile: development-windows-x86 target: x86_64-pc-windows-msvc runs-on: ${{ matrix.os }} steps: - name: Checkout source code uses: actions/checkout@v2 - name: Install Rust toolchain id: rust_toolchain uses: actions-rs/toolchain@v1 with: toolchain: ${{ env.RUST_TOOLCHAIN }} target: ${{ matrix.target }} override: true profile: minimal - name: Install flutter id: flutter uses: subosito/flutter-action@v2 with: channel: "stable" flutter-version: ${{ env.FLUTTER_VERSION }} - uses: taiki-e/install-action@v2 with: tool: cargo-make@${{ env.CARGO_MAKE_VERSION }} - name: Install prerequisites working-directory: frontend run: | if [ "$RUNNER_OS" == "Linux" ]; then sudo wget -qO /etc/apt/trusted.gpg.d/dart_linux_signing_key.asc https://dl-ssl.google.com/linux/linux_signing_key.pub sudo wget -qO /etc/apt/sources.list.d/dart_stable.list https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list sudo apt-get update sudo apt-get install -y dart curl build-essential libssl-dev clang cmake ninja-build pkg-config libgtk-3-dev keybinder-3.0 libnotify-dev fi shell: bash - name: Enable Flutter Desktop run: | if [ "$RUNNER_OS" == "Linux" ]; then flutter config --enable-linux-desktop elif [ "$RUNNER_OS" == "macOS" ]; then flutter config --enable-macos-desktop elif [ "$RUNNER_OS" == "Windows" ]; then git config --system core.longpaths true flutter config --enable-windows-desktop fi shell: bash - uses: actions/download-artifact@v3 with: name: ${{ github.run_id }}-${{ matrix.os }} - name: Uncompress appflowy_flutter run: tar -xf appflowy_flutter.tar.gz - name: Run code generation working-directory: frontend run: | cargo make code_generation - name: Run Flutter integration tests working-directory: frontend/appflowy_flutter run: | if [ "$RUNNER_OS" == "Linux" ]; then export DISPLAY=:99 sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 & sudo apt-get install network-manager flutter test integration_test/runner.dart -d Linux --coverage elif [ "$RUNNER_OS" == "macOS" ]; then flutter test integration_test/runner.dart -d macOS --coverage elif [ "$RUNNER_OS" == "Windows" ]; then flutter test integration_test/runner.dart -d Windows --coverage fi shell: bash - name: Upload coverage to Codecov uses: Wandalen/wretry.action@v1.0.36 with: action: codecov/codecov-action@v3 with: | name: appflowy flags: appflowy_flutter_integrateion_test fail_ci_if_error: true verbose: true os: ${{ matrix.os }} token: ${{ secrets.CODECOV_TOKEN }} attempt_limit: 20 attempt_delay: 10000 build: needs: [prepare] if: github.event.pull_request.draft != true strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] include: - os: ubuntu-latest flutter_profile: development-linux-x86_64 target: x86_64-unknown-linux-gnu - os: macos-latest flutter_profile: development-mac-x86_64 target: x86_64-apple-darwin - os: windows-latest flutter_profile: development-windows-x86 target: x86_64-pc-windows-msvc runs-on: ${{ matrix.os }} steps: - name: Checkout source code uses: actions/checkout@v2 - name: Install Rust toolchain id: rust_toolchain uses: actions-rs/toolchain@v1 with: toolchain: ${{ env.RUST_TOOLCHAIN }} target: ${{ matrix.target }} override: true profile: minimal - name: Install flutter id: flutter uses: subosito/flutter-action@v2 with: channel: "stable" flutter-version: ${{ env.FLUTTER_VERSION }} - uses: taiki-e/install-action@v2 with: tool: cargo-make@${{ env.CARGO_MAKE_VERSION }} - name: Install prerequisites working-directory: frontend run: | if [ "$RUNNER_OS" == "Linux" ]; then sudo wget -qO /etc/apt/trusted.gpg.d/dart_linux_signing_key.asc https://dl-ssl.google.com/linux/linux_signing_key.pub sudo wget -qO /etc/apt/sources.list.d/dart_stable.list https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list sudo apt-get update sudo apt-get install -y dart curl build-essential libssl-dev clang cmake ninja-build pkg-config libgtk-3-dev keybinder-3.0 libnotify-dev fi shell: bash - name: Enable Flutter Desktop run: | if [ "$RUNNER_OS" == "Linux" ]; then flutter config --enable-linux-desktop elif [ "$RUNNER_OS" == "macOS" ]; then flutter config --enable-macos-desktop elif [ "$RUNNER_OS" == "Windows" ]; then git config --system core.longpaths true flutter config --enable-windows-desktop fi shell: bash - uses: actions/download-artifact@v3 with: name: ${{ github.run_id }}-${{ matrix.os }} - name: Uncompress appflowy_flutter run: tar -xf appflowy_flutter.tar.gz - name: Run code generation if: matrix.os == 'windows-latest' working-directory: frontend run: | cargo make code_generation - name: Build flutter product working-directory: frontend run: | cargo make --profile ${{ matrix.flutter_profile }} appflowy-make-product-dev