name: Pull Request Workflow

on:
  pull_request:
  merge_group:

jobs:
  code_tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./scripts/generate-locale-config.sh
      - run: git diff --exit-code
      - run: cat .github/workflows/versions.env >> $GITHUB_ENV
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ env.FLUTTER_VERSION }}
          cache: true
      - run: flutter pub get
      - run: flutter gen-l10n
      - name: Check formatting
        run: dart format lib/ test/ --set-exit-if-changed
      - name: Check import formatting
        run: dart run import_sorter:main --no-comments --exit-if-changed
      - name: Check license compliance
        run: dart run license_checker check-licenses -c licenses.yaml --problematic
      - run: flutter analyze
      - name: Apply google services patch
        run: git apply ./scripts/enable-android-google-services.patch
      - run: flutter analyze
      - run: flutter test

  build_debug_apk:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: cat .github/workflows/versions.env >> $GITHUB_ENV
      - uses: actions/setup-java@v4
        with:
          java-version: ${{ env.JAVA_VERSION }}
          distribution: "zulu"
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ env.FLUTTER_VERSION }}
          cache: true
      - uses: moonrepo/setup-rust@v1
      - run: flutter pub get
      - run: flutter build apk --debug

  build_debug_web:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: cat .github/workflows/versions.env >> $GITHUB_ENV
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ env.FLUTTER_VERSION }}
          cache: true
      - uses: moonrepo/setup-rust@v1
      - run: rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
      - run: flutter pub get
      - name: Prepare web
        run: ./scripts/prepare-web.sh
      - run: flutter build web

  build_debug_linux:
    strategy:
      matrix:
        arch: [ x64, arm64 ]
    runs-on: ${{ matrix.arch == 'arm64' && 'self-hosted' || 'ubuntu-latest'}}
    steps:
      - uses: actions/checkout@v4
      - run: cat .github/workflows/versions.env >> $GITHUB_ENV
      - name: Install dependencies
        run: sudo apt-get update && sudo apt-get install git wget curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev libwebkit2gtk-4.1-dev -y
      - name: Install Flutter
        run: |
          git clone --branch ${{ env.FLUTTER_VERSION }} https://github.com/flutter/flutter.git
          ./flutter/bin/flutter doctor
      - uses: moonrepo/setup-rust@v1
      - run: ./flutter/bin/flutter pub get
      - run: ./flutter/bin/flutter build linux --target-platform linux-${{ matrix.arch }}

  build_debug_ios:
    runs-on: macos-15
    steps:
      - uses: actions/checkout@v4
      - run: cat .github/workflows/versions.env >> $GITHUB_ENV
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ env.FLUTTER_VERSION }}
          cache: true
      - name: Setup Xcode version
        uses: maxim-lobanov/setup-xcode@v1.6.0
        with:
          xcode-version: latest
      - run: brew install sqlcipher
      - uses: moonrepo/setup-rust@v1
      - run: flutter pub get
      - run: flutter build ios --no-codesign
