Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 93 additions & 54 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ on:
- main
pull_request:

env:
FLUTTER_CHANNEL: "stable"
FLUTTER_VERSION: "3.32.8"
RUBY_VERSION: "3.2.2"

jobs:
analyze:
name: Analyze code (SAST)
Expand All @@ -17,8 +22,8 @@ jobs:
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: "3.32.8"
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: ${{ env.FLUTTER_CHANNEL }}
cache: true
- name: Generate code
run: flutter pub run build_runner build --delete-conflicting-outputs
Expand All @@ -36,8 +41,8 @@ jobs:
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: "3.32.8"
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: ${{ env.FLUTTER_CHANNEL }}
cache: true
- name: Run tests
run: flutter test
Expand All @@ -53,8 +58,8 @@ jobs:
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: "3.32.8"
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: ${{ env.FLUTTER_CHANNEL }}
cache: true

- name: Create key.jks
Expand All @@ -81,58 +86,92 @@ jobs:
name: apk
path: build/app/outputs/flutter-apk/

deploy-firebase:
name: Deploy to Firebase
distribute:
name: Upload artifact to Firebase App Distribution
runs-on: ubuntu-latest
needs: build-android
if: github.ref == 'refs/heads/main'
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- name: Checkout
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "3.4.5"
bundler-cache: true
working-directory: "android"

- name: Set up Flutter
uses: subosito/flutter-action@v2
- name: Download app APK
uses: actions/download-artifact@v4
with:
flutter-version: "3.32.8"
channel: "stable"
cache: true

- name: Create google_service_account.json
run: |
echo "${{ secrets.GOOGLE_SERVICES_ACCOUNT_BASE64 }}" | base64 --decode > google_service_account.json

- name: Create firebase google_service_account.json
name: apk
- name: Upload artifact to Firebase App Distribution
id: uploadArtifact
env:
CREDENTIAL_FILE_CONTENT: ${{ secrets.CREDENTIAL_FILE_CONTENT }}
run: |
cat <<< "$CREDENTIAL_FILE_CONTENT" > service_credentials_content.json

- name: Create key.jks
INPUT_APPID: ${{secrets.FIREBASE_APP_ID}}
INPUT_SERVICECREDENTIALSFILECONTENT: ${{ secrets.CREDENTIAL_FILE_CONTENT }}
GOOGLE_APPLICATION_CREDENTIALS: service_credentials_content.json
INPUT_GROUPS: testers
INPUT_FILE: app-release.apk
run: |
echo "${{ secrets.ANDROID_KEYSTORE_FILE_BASE64 }}" | base64 --decode > android/key.jks

- name: Create key.properties
run: |
cat <<EOF > android/key.properties
storePassword=${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
keyPassword=${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
keyAlias=release
storeFile=../key.jks
EOF
env:
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}

- name: Deploy to Firebase
uses: maierj/fastlane-action@v3.1.0
with:
lane: "firebase"
subdirectory: android
env:
APP_PACKAGE_NAME: ${{ vars.APP_PACKAGE_NAME }}
cat <<< "${INPUT_SERVICECREDENTIALSFILECONTENT}" > service_credentials_content.json
sudo npm install -g firebase-tools
firebase appdistribution:distribute "$INPUT_FILE" --app "$INPUT_APPID" --groups "$INPUT_GROUPS" --testers "$INPUT_TESTERS" --release-notes "$(git log -1 --pretty=short)"
# deploy-firebase:
# name: Distribute existing APK to Firebase App Distribution
# runs-on: ubuntu-latest
# needs: build-android
# # if: github.ref == 'refs/heads/main'
# steps:
# - name: Checkout
# uses: actions/checkout@v4

# - name: Set up Ruby
# uses: ruby/setup-ruby@v1
# with:
# ruby-version: ${{ env.RUBY_VERSION }}
# bundler-cache: true
# working-directory: "android"

# - name: Set up Flutter
# uses: subosito/flutter-action@v2
# with:
# flutter-version: ${{ env.FLUTTER_VERSION }}
# channel: ${{ env.FLUTTER_CHANNEL }}
# cache: true

# - name: Create google_service_account.json
# run: |
# echo "${{ secrets.GOOGLE_SERVICES_ACCOUNT_BASE64 }}" | base64 --decode > google_service_account.json

# - name: Create firebase google_service_account.json
# env:
# CREDENTIAL_FILE_CONTENT: ${{ secrets.CREDENTIAL_FILE_CONTENT }}
# run: |
# cat <<< "$CREDENTIAL_FILE_CONTENT" > service_credentials_content.json

# - name: Create key.jks
# run: |
# echo "${{ secrets.ANDROID_KEYSTORE_FILE_BASE64 }}" | base64 --decode > android/key.jks

# - name: Create key.properties
# run: |
# cat <<EOF > android/key.properties
# storePassword=${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
# keyPassword=${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
# keyAlias=release
# storeFile=../key.jks
# EOF
# env:
# ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}

# - name: Deploy existing APK to Firebase
# uses: maierj/fastlane-action@v3.1.0
# with:
# lane: "distribute_existing_apk"
# env:
# APP_PACKAGE_NAME: ${{ vars.APP_PACKAGE_NAME }}
# FIREBASE_APP_ID: ${{ vars.FIREBASE_APP_ID }}
# APK_PATH: ${{ vars.APK_PATH }}

# - name: Deploy to Firebase
# uses: maierj/fastlane-action@v3.1.0
# with:
# lane: "release_play_store_using_firebase"
# subdirectory: android
# env:
# APP_PACKAGE_NAME: ${{ vars.APP_PACKAGE_NAME }}
# FIREBASE_APP_ID: ${{ vars.FIREBASE_APP_ID }}
3 changes: 1 addition & 2 deletions .github/workflows/deploy-with-fastlane.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@ on:
push:
tags:
- "v*"
- "v*-rc.*"
- "*.*.*"

env:
FLUTTER_CHANNEL: "stable"
FLUTTER_VERSION: "3.32.8"
RUBY_VERSION: "3.4.5" #"3.2.2"
RUBY_VERSION: "3.2.2" # 3.2.2

jobs:
# build_ios:
Expand Down
6 changes: 5 additions & 1 deletion assets/translations/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -322,5 +322,9 @@
"or": "ODER",
"proceedWithGoogle": "Mit Google fortfahren",
"proceedWithApple": "Mit Apple fortfahren",
"emailPhoneValidateDesc": "Entweder eine E-Mail oder eine Telefonnummer muss angegeben werden."
"emailPhoneValidateDesc": "Entweder eine E-Mail oder eine Telefonnummer muss angegeben werden.",
"logoutWarningTitle": "Nicht synchronisierte Daten",
"logoutWarningMessage": "Sie haben nicht synchronisierte Daten, die verloren gehen, wenn Sie sich jetzt abmelden. Möchten Sie fortfahren?",
"syncNow": "Jetzt synchronisieren",
"logoutAnyway": "Trotzdem abmelden"
}
6 changes: 5 additions & 1 deletion assets/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -322,5 +322,9 @@
"or": "OR",
"proceedWithGoogle": "Proceed with Google",
"proceedWithApple": "Proceed with Apple",
"emailPhoneValidateDesc": "Either email or phone must be provided."
"emailPhoneValidateDesc": "Either email or phone must be provided.",
"logoutWarningTitle": "Unsynchronized Data",
"logoutWarningMessage": "You have unsynchronized data that will be lost if you logout now. Do you want to continue?",
"syncNow": "Sync Now",
"logoutAnyway": "Logout Anyway"
}
6 changes: 5 additions & 1 deletion assets/translations/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -321,5 +321,9 @@
"or": "O",
"proceedWithGoogle": "Continuar con Google",
"proceedWithApple": "Continuar con Apple",
"emailPhoneValidateDesc": "Se debe proporcionar un correo electrónico o un número de teléfono."
"emailPhoneValidateDesc": "Se debe proporcionar un correo electrónico o un número de teléfono.",
"logoutWarningTitle": "Datos no sincronizados",
"logoutWarningMessage": "Tienes datos no sincronizados que se perderán si cierras sesión ahora. ¿Quieres continuar?",
"syncNow": "Sincronizar ahora",
"logoutAnyway": "Cerrar sesión de todos modos"
}
6 changes: 5 additions & 1 deletion assets/translations/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -320,5 +320,9 @@
"or": "OU",
"proceedWithGoogle": "Continuer avec Google",
"proceedWithApple": "Continuer avec Apple",
"emailPhoneValidateDesc": "Un e-mail ou un numéro de téléphone doit être fourni."
"emailPhoneValidateDesc": "Un e-mail ou un numéro de téléphone doit être fourni.",
"logoutWarningTitle": "Données non synchronisées",
"logoutWarningMessage": "Vous avez des données non synchronisées qui seront perdues si vous vous déconnectez maintenant. Voulez-vous continuer ?",
"syncNow": "Synchroniser maintenant",
"logoutAnyway": "Se déconnecter quand même"
}
6 changes: 5 additions & 1 deletion assets/translations/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -322,5 +322,9 @@
"or": "O",
"proceedWithGoogle": "Continua con Google",
"proceedWithApple": "Continua con Apple",
"emailPhoneValidateDesc": "È necessario fornire un'email o un numero di telefono."
"emailPhoneValidateDesc": "È necessario fornire un'email o un numero di telefono.",
"logoutWarningTitle": "Dati non sincronizzati",
"logoutWarningMessage": "Hai dati non sincronizzati che andranno persi se esci ora. Vuoi continuare?",
"syncNow": "Sincronizza ora",
"logoutAnyway": "Esci comunque"
}
42 changes: 42 additions & 0 deletions ios/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
PODS:
- AppAuth (2.0.0):
- AppAuth/Core (= 2.0.0)
- AppAuth/ExternalUserAgent (= 2.0.0)
- AppAuth/Core (2.0.0)
- AppAuth/ExternalUserAgent (2.0.0):
- AppAuth/Core
- AppCheckCore (11.2.0):
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- PromisesObjC (~> 2.4)
- connectivity_plus (0.0.1):
- Flutter
- DKImagePickerController/Core (4.3.9):
Expand Down Expand Up @@ -116,6 +126,11 @@ PODS:
- Flutter
- flutter_secure_storage (6.0.0):
- Flutter
- google_sign_in_ios (0.0.1):
- Flutter
- FlutterMacOS
- GoogleSignIn (~> 9.0)
- GTMSessionFetcher (>= 3.4.0)
- GoogleAdsOnDeviceConversion (2.1.0):
- GoogleUtilities/Logger (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
Expand Down Expand Up @@ -145,6 +160,11 @@ PODS:
- GoogleDataTransport (10.1.0):
- nanopb (~> 3.30910.0)
- PromisesObjC (~> 2.4)
- GoogleSignIn (9.0.0):
- AppAuth (~> 2.0)
- AppCheckCore (~> 11.0)
- GTMAppAuth (~> 5.0)
- GTMSessionFetcher/Core (~> 3.3)
- GoogleUtilities/AppDelegateSwizzler (8.1.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
Expand Down Expand Up @@ -172,6 +192,14 @@ PODS:
- GoogleUtilities/UserDefaults (8.1.0):
- GoogleUtilities/Logger
- GoogleUtilities/Privacy
- GTMAppAuth (5.0.0):
- AppAuth/Core (~> 2.0)
- GTMSessionFetcher/Core (< 4.0, >= 3.3)
- GTMSessionFetcher (3.5.0):
- GTMSessionFetcher/Full (= 3.5.0)
- GTMSessionFetcher/Core (3.5.0)
- GTMSessionFetcher/Full (3.5.0):
- GTMSessionFetcher/Core
- image_cropper (0.0.4):
- Flutter
- TOCropViewController (~> 2.7.4)
Expand Down Expand Up @@ -240,6 +268,7 @@ DEPENDENCIES:
- Flutter (from `Flutter`)
- flutter_device_uuid (from `.symlinks/plugins/flutter_device_uuid/ios`)
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
- google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`)
- image_cropper (from `.symlinks/plugins/image_cropper/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
Expand All @@ -251,6 +280,8 @@ DEPENDENCIES:

SPEC REPOS:
trunk:
- AppAuth
- AppCheckCore
- DKImagePickerController
- DKPhotoGallery
- FCUUID
Expand All @@ -266,7 +297,10 @@ SPEC REPOS:
- GoogleAdsOnDeviceConversion
- GoogleAppMeasurement
- GoogleDataTransport
- GoogleSignIn
- GoogleUtilities
- GTMAppAuth
- GTMSessionFetcher
- nanopb
- PromisesObjC
- PromisesSwift
Expand Down Expand Up @@ -295,6 +329,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/flutter_device_uuid/ios"
flutter_secure_storage:
:path: ".symlinks/plugins/flutter_secure_storage/ios"
google_sign_in_ios:
:path: ".symlinks/plugins/google_sign_in_ios/darwin"
image_cropper:
:path: ".symlinks/plugins/image_cropper/ios"
image_picker_ios:
Expand All @@ -313,6 +349,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/url_launcher_ios/ios"

SPEC CHECKSUMS:
AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063
AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f
connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
Expand All @@ -334,10 +372,14 @@ SPEC CHECKSUMS:
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_device_uuid: 8df3bc29405e4f2f999c206cce4ecf33cc1f6a21
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
google_sign_in_ios: 205742c688aea0e64db9da03c33121694a365109
GoogleAdsOnDeviceConversion: 2be6297a4f048459e0ae17fad9bfd2844e10cf64
GoogleAppMeasurement: 700dce7541804bec33db590a5c496b663fbe2539
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleSignIn: c7f09cfbc85a1abf69187be091997c317cc33b77
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238
GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6
image_cropper: c4326ea50132b1e1564499e5d32a84f01fb03537
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
Expand Down
Loading