diff --git a/.github/workflows/flutter_ci.yaml b/.github/workflows/flutter_ci.yaml index 72e169ca708a..4d931a1fbec9 100644 --- a/.github/workflows/flutter_ci.yaml +++ b/.github/workflows/flutter_ci.yaml @@ -22,15 +22,17 @@ on: - "!frontend/appflowy_tauri/**" env: + CARGO_TERM_COLOR: always FLUTTER_VERSION: "3.10.1" 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: - build: + prepare: if: github.event.pull_request.draft != true strategy: fail-fast: false @@ -83,21 +85,20 @@ jobs: prefix-key: ${{ matrix.os }} workspaces: | frontend/rust-lib + cache-all-crates: true - - uses: davidB/rust-cargo-make@v1 + - uses: taiki-e/install-action@v2 with: - version: '0.36.6' + tool: cargo-make@${{ env.CARGO_MAKE_VERSION }}, duckscript_cli - name: Install prerequisites working-directory: frontend run: | - cargo install --force duckscript_cli 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 - sudo apt-get install keybinder-3.0 libnotify-dev + 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 @@ -106,6 +107,171 @@ jobs: 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: [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 }} + cache: true + + - 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 + + - 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 Flutter unit tests + working-directory: frontend + run: | + if [ "$RUNNER_OS" == "macOS" ]; then + 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 }} + cache: true + + - 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 @@ -118,20 +284,33 @@ jobs: fi shell: bash - - name: Build AppFlowy + - 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 --profile ${{ matrix.flutter_profile }} appflowy-dev + cargo make code_generation - - name: Flutter Analyzer + - name: Run Flutter integration tests working-directory: frontend/appflowy_flutter run: | - flutter analyze . - - - name: Run Flutter unit tests - working-directory: frontend - run: | - cargo make dart_unit_test + 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 @@ -139,7 +318,7 @@ jobs: action: codecov/codecov-action@v3 with: | name: appflowy - flags: appflowy_flutter_unit_test + flags: appflowy_flutter_integrateion_test fail_ci_if_error: true verbose: true os: ${{ matrix.os }} @@ -147,3 +326,87 @@ jobs: 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 }} + cache: true + + - 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 diff --git a/.github/workflows/integration_test.yml b/.github/workflows/integration_test.yml deleted file mode 100644 index 76460117222b..000000000000 --- a/.github/workflows/integration_test.yml +++ /dev/null @@ -1,150 +0,0 @@ -name: integration test - -on: - push: - branches: - - "main" - - "release/*" - paths: - - ".github/workflows/integration_test.yml" - - "frontend/**" - - "!frontend/appflowy_tauri/**" - - pull_request: - branches: - - "main" - - "release/*" - paths: - - ".github/workflows/integration_test.yml" - - "frontend/**" - - "!frontend/appflowy_tauri/**" - -env: - CARGO_TERM_COLOR: always - FLUTTER_VERSION: "3.10.1" - RUST_TOOLCHAIN: "1.70" - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - build: - 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: - # 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 - df -h - - - 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 }} - cache: true - - - uses: Swatinem/rust-cache@v2 - with: - prefix-key: ${{ matrix.os }} - workspaces: | - frontend/rust-lib - cache-all-crates: true - - - uses: davidB/rust-cargo-make@v1 - with: - version: '0.36.6' - - - name: Install prerequisites - working-directory: frontend - run: | - cargo install --force duckscript_cli - 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 - sudo apt-get install 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: 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 - - - name: Build AppFlowy - working-directory: frontend - run: | - cargo make --profile ${{ matrix.flutter_profile }} appflowy-dev - - - 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 \ No newline at end of file diff --git a/.run/ProtoBuf_Gen.run.xml b/.run/ProtoBuf_Gen.run.xml deleted file mode 100644 index 13d9202183f9..000000000000 --- a/.run/ProtoBuf_Gen.run.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - \ No newline at end of file diff --git a/.run/Run backend.run.xml b/.run/Run backend.run.xml deleted file mode 100644 index 840a367809c6..000000000000 --- a/.run/Run backend.run.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - \ No newline at end of file diff --git a/.run/dart-event.run.xml b/.run/dart-event.run.xml deleted file mode 100644 index c64ee9bf57cf..000000000000 --- a/.run/dart-event.run.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - \ No newline at end of file diff --git a/frontend/.vscode/launch.json b/frontend/.vscode/launch.json index 9d7a00c4497f..34866a9537ce 100644 --- a/frontend/.vscode/launch.json +++ b/frontend/.vscode/launch.json @@ -67,11 +67,11 @@ "cwd": "${workspaceRoot}/appflowy_flutter" }, { - "name": "AF-Android-Simlator: Clean + Rebuild All", + "name": "AF-Android: Clean + Rebuild All", "request": "launch", "program": "./lib/main.dart", "type": "dart", - "preLaunchTask": "AF: Clean + Rebuild All (Android Simulator)", + "preLaunchTask": "AF: Clean + Rebuild All (Android)", "env": { "RUST_LOG": "trace" }, diff --git a/frontend/Makefile.toml b/frontend/Makefile.toml index bcd71b472d48..ebfa6f121cbb 100644 --- a/frontend/Makefile.toml +++ b/frontend/Makefile.toml @@ -186,6 +186,14 @@ RUST_COMPILE_TARGET = "aarch64-apple-ios" BUILD_ARCHS = "arm64" CRATE_TYPE = "staticlib" +[env.production-ios-arm64] +BUILD_FLAG = "release" +TARGET_OS = "ios" +FLUTTER_OUTPUT_DIR = "Release" +RUST_COMPILE_TARGET = "aarch64-apple-ios" +BUILD_ARCHS = "arm64" +CRATE_TYPE = "staticlib" + [env.development-android] BUILD_FLAG = "debug" TARGET_OS = "android" diff --git a/frontend/appflowy_flutter/android/app/src/main/AndroidManifest.xml b/frontend/appflowy_flutter/android/app/src/main/AndroidManifest.xml index 03eb9bc4dacf..43f4005b72ec 100644 --- a/frontend/appflowy_flutter/android/app/src/main/AndroidManifest.xml +++ b/frontend/appflowy_flutter/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ - + + + + + + + + + +