name: CI on: push: branches: [ master ] pull_request: branches: [ master ] jobs: analyze: name: Analyze & Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: subosito/flutter-action@v2 with: flutter-version: '3.47.1' channel: 'stable' cache: true - name: Get dependencies run: flutter pub get - name: Analyze run: flutter analyze # Includes test/architecture_test.dart, which fails the build if a layer # boundary is crossed. - name: Run tests run: flutter test release-apk: name: Release APK runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' - uses: subosito/flutter-action@v2 with: flutter-version: '3.47.1' channel: 'stable' cache: true - name: Get dependencies run: flutter pub get # The debug build does not minify, so it cannot catch an R8 problem. This # job exists because a release APK that aborted on every test shipped # once while the debug build passed every check. - name: Build release APK run: flutter build apk --release # Building is not enough on its own: a renamed JNI callback still # produces a successful build and a broken APK. This reads R8's mapping # and the DEX string pool to confirm the names JNI resolves survived. - name: Check JNI names survived minification run: ./tool/check_jni_keep_rules.sh - uses: actions/upload-artifact@v4 with: name: app-release-apk path: build/app/outputs/flutter-apk/app-release.apk if-no-files-found: error