From 4bc338e9f353c0a7f91e464811e216a13b12fc74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Sat, 13 Jun 2026 14:30:43 +0100 Subject: [PATCH] feat: upload .apk to release --- .github/workflows/deploy_beta.yml | 21 ++++++++ android/fastlane/Fastfile | 9 ++++ pubspec.lock | 88 +++++++++++++++---------------- 3 files changed, 74 insertions(+), 44 deletions(-) diff --git a/.github/workflows/deploy_beta.yml b/.github/workflows/deploy_beta.yml index 3a64cd35..f05bf23e 100644 --- a/.github/workflows/deploy_beta.yml +++ b/.github/workflows/deploy_beta.yml @@ -5,6 +5,9 @@ on: release: types: [ published ] +permissions: + contents: write + jobs: deploy: runs-on: macos-26 @@ -91,3 +94,21 @@ jobs: ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} + + - if: matrix.platform == 'android' && github.event_name == 'release' + name: Build Release APK + run: | + cd ./android + fastlane android_apk + env: + GOOGLE_PLAY_SERVICE_ACCOUNT_KEY: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_KEY }} + ANDROID_KEYSTORE_FILE: ./upload-keystore + ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} + ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} + ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} + + - if: matrix.platform == 'android' && github.event_name == 'release' + name: Upload APK to Release Assets + run: gh release upload "${{ github.event.release.tag_name }}" build/app/outputs/flutter-apk/app-release.apk --clobber + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index 4e4ca3b9..45d99a84 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -19,6 +19,15 @@ platform :android do ) end + desc "Build a signed release APK for direct installation" + lane :android_apk do + build_number = latest_google_play_version_code + + Dir.chdir "../.." do + sh("flutter", "build", "apk", "--release", "--build-number=#{build_number}") + end + end + def latest_google_play_version_code json_key_data = Base64.strict_decode64(ENV["GOOGLE_PLAY_SERVICE_ACCOUNT_KEY"]) productionVersionCodes = google_play_track_version_codes(track: 'production', json_key_data: json_key_data) diff --git a/pubspec.lock b/pubspec.lock index a9b1aa62..d1f50b3a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -237,10 +237,10 @@ packages: dependency: transitive description: name: coverage - sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d" + sha256: "956a3de0725ca232ad353565a8290d3357592bf4250f6f298a185e2d949c5d3d" url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.15.1" crypto: dependency: transitive description: @@ -317,18 +317,18 @@ packages: dependency: "direct main" description: name: drift - sha256: "8033500116b24398fba0cca0369cc31678cd627c01e41753a61186911cea743e" + sha256: "6cc0b623c0e83f7080524d8396e9301b1d78b9c66a4fdceeb0f798211303254c" url: "https://pub.dev" source: hosted - version: "2.33.0" + version: "2.34.0" drift_dev: dependency: "direct dev" description: name: drift_dev - sha256: b3dd5b75e30522a91da8abda9f5bb17230cb038097f6d15fa75d42bb563428aa + sha256: "9cfff1576b49725da0d32c040651a41ae195e8c4af8d8da301593e41d7abc2f7" url: "https://pub.dev" source: hosted - version: "2.33.0" + version: "2.34.0" easy_localization: dependency: "direct main" description: @@ -513,10 +513,10 @@ packages: dependency: "direct main" description: name: flutter_riverpod - sha256: "4e166be88e1dbbaa34a280bdb744aeae73b7ef25fdf8db7a3bb776760a3648e2" + sha256: "9255e1e3ad6e38906a1b4f8287678f95f378744c5b46b1985588543f3f19046e" url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.3.2" flutter_secure_storage: dependency: "direct main" description: @@ -611,50 +611,50 @@ packages: dependency: "direct main" description: name: geolocator - sha256: "79939537046c9025be47ec645f35c8090ecadb6fe98eba146a0d25e8c1357516" + sha256: e146a6d63776582651e97a79cbe459f8e1211b100101fadcd84db83361fa599f url: "https://pub.dev" source: hosted - version: "14.0.2" + version: "14.0.3" geolocator_android: dependency: transitive description: name: geolocator_android - sha256: "179c3cb66dfa674fc9ccbf2be872a02658724d1c067634e2c427cf6df7df901a" + sha256: "86ea1654e4f61ff51466848e91c116b422d6010ea269fda0fbe1af7e9e742ce1" url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "5.0.3" geolocator_apple: dependency: transitive description: name: geolocator_apple - sha256: dbdd8789d5aaf14cf69f74d4925ad1336b4433a6efdf2fce91e8955dc921bf22 + sha256: "853803d6bb1713c094e935b4a5ae5f19c0308acf81da13fa9ff84fb4c70c0b73" url: "https://pub.dev" source: hosted - version: "2.3.13" + version: "2.3.14" geolocator_linux: dependency: transitive description: name: geolocator_linux - sha256: b02993d59b753bf1967ed28862002841aec5cdd5090c1f495213b32ce488aced + sha256: "3da7420f11c3496511a5bd3c18fd67b88e5659f12e46b7ce00a788f6996e850a" url: "https://pub.dev" source: hosted - version: "0.2.5" + version: "0.2.6" geolocator_platform_interface: dependency: transitive description: name: geolocator_platform_interface - sha256: dde05dae7d584db6e82feb87dd9fb0b4b4c83ed68065667b4bef637be38e13a7 + sha256: cdb082e4f048b69da244117b7914cc60d2a8897546ffaa4f2529c786ded7aee2 url: "https://pub.dev" source: hosted - version: "4.2.7" + version: "4.2.8" geolocator_web: dependency: transitive description: name: geolocator_web - sha256: b1ae9bdfd90f861fde8fd4f209c37b953d65e92823cb73c7dee1fa021b06f172 + sha256: "19e485a0f8d6a88abcf9c53cba3a4105e14b7435ed8ac1c108c067b938fe8429" url: "https://pub.dev" source: hosted - version: "4.1.3" + version: "4.1.4" geolocator_windows: dependency: transitive description: @@ -707,10 +707,10 @@ packages: dependency: transitive description: name: googleapis_auth - sha256: "2a8895c3885197f96bb2fd91ee0ae77b53ff3874c7b1f1eadb6566248e880958" + sha256: "1417d8846663df5e7b77ca56591c5edd442c66ffc9c01ab036e138a21a148e86" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" graphs: dependency: transitive description: @@ -1108,10 +1108,10 @@ packages: dependency: transitive description: name: permission_handler_apple - sha256: e20daf680eef1ca62ffe8c8c526b778cc386d50137c77ac71c8ec9c88c13fb9d + sha256: "79dfa1df734798aa3cfdad166d3a3698c206d8813de13516ea1071b5d7e2f420" url: "https://pub.dev" source: hosted - version: "9.4.9" + version: "9.4.10" permission_handler_html: dependency: transitive description: @@ -1260,10 +1260,10 @@ packages: dependency: transitive description: name: riverpod - sha256: "8c22216be8ad3ef2b44af3a329693558c98eca7b8bd4ef495c92db0bba279f83" + sha256: "17100416c51db7810c71a7bb2c34d1f881faa0074fd452afb0c4db6f8f126c76" url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.3.2" rxdart: dependency: "direct main" description: @@ -1284,10 +1284,10 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: a2c49fc1fed7140cadd892d765bd47edbe4ac0b9c7e7e3c493dcb58126f99cf0 + sha256: "93ae5884a9df5d3bb696825bceb3a17590754548b5d740eba51500afc8d088f5" url: "https://pub.dev" source: hosted - version: "2.4.25" + version: "2.4.26" shared_preferences_foundation: dependency: transitive description: @@ -1441,10 +1441,10 @@ packages: dependency: transitive description: name: sqflite_common - sha256: cce558075afe2a83f3fd7fc123acd6b090683e4f23910d44fbb31ecd7800b014 + sha256: "5bf6a55c166e73bf651ba7ec3ed486e577620e3dc8f3a9c6a258a8031b624590" url: "https://pub.dev" source: hosted - version: "2.5.9" + version: "2.5.11" sqflite_darwin: dependency: transitive description: @@ -1465,10 +1465,10 @@ packages: dependency: "direct main" description: name: sqlite3 - sha256: "9488c7d2cdb1091c91cacf7e207cff81b28bff8e366f042bad3afe7d34afe189" + sha256: "37356bcb56ce0d9404d602c41e4bdb7765e7e9732a3e47adb3d98c556a6abdad" url: "https://pub.dev" source: hosted - version: "3.3.2" + version: "3.3.3" sqlite3_flutter_libs: dependency: "direct main" description: @@ -1481,10 +1481,10 @@ packages: dependency: transitive description: name: sqlparser - sha256: ecdc06d4a7d79dcbc928d99afd2f7f5b0f98a637c46f89be83d911617f759978 + sha256: "40bdddb306a727be9ce510bd2d2b9a6c9db6c586d846ef7b22e3990a2b24f02d" url: "https://pub.dev" source: hosted - version: "0.44.4" + version: "0.44.5" stack_trace: dependency: transitive description: @@ -1529,42 +1529,42 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_calendar - sha256: "4a8c7c1a662694f4a15f5303ad94a91f9e6c1fb73cffd66e2e451e50b942b88f" + sha256: "68707ffc555334aecd8b0bd7cb1976a780dca90d1413459eea776c1ce9a64c71" url: "https://pub.dev" source: hosted - version: "33.2.10" + version: "33.2.12" syncfusion_flutter_charts: dependency: "direct main" description: name: syncfusion_flutter_charts - sha256: "59ee76f19b3b7b514c5539db7d9889ed2c697703616e381c753ab83731a9059e" + sha256: "9565d7607e516997fac3570e1fbc7e8d4723141017add79341236857afd11f1b" url: "https://pub.dev" source: hosted - version: "33.2.10" + version: "33.2.12" syncfusion_flutter_core: dependency: "direct main" description: name: syncfusion_flutter_core - sha256: fe25aa8cf709f8e10c17c6f36019dd98bffad4218d9402f3c990156408cfd941 + sha256: "788020307d273fed25c2c8cb860d6e2fbe5cac18abb96819e66ca4e354c6a312" url: "https://pub.dev" source: hosted - version: "33.2.10" + version: "33.2.12" syncfusion_flutter_datepicker: dependency: "direct main" description: name: syncfusion_flutter_datepicker - sha256: "36e080278a089aea7b7bc1cf56e07aba329234fc04b551a3014b7b211e1e7176" + sha256: e82635057ae0b6167969045a2ced1b0986361892e92c4fe093f42816a2279b3a url: "https://pub.dev" source: hosted - version: "33.2.10" + version: "33.2.12" syncfusion_localizations: dependency: transitive description: name: syncfusion_localizations - sha256: e4581bf1398f2e9333b626b259e0ac6c688b68bc8115a4afad9c08e11cbda09d + sha256: fc8d2ba5285dc11790b1d76f652ef1d860f05b660a63a579691421678d0b214e url: "https://pub.dev" source: hosted - version: "33.2.10" + version: "33.2.12" synchronized: dependency: transitive description: