diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 15723eb..177bd13 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -17,6 +17,7 @@ jobs: with: flutter-version: '3.47.1' channel: 'stable' + cache: true - name: Get dependencies run: flutter pub get @@ -24,5 +25,45 @@ jobs: - 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