name: Deploy TravelMate (Android & iOS) on: push: branches: - release # Assure-toi de pousser sur cette branche exacte jobs: # --- JOB 1 : ANDROID (APK) --- deploy-android: runs-on: macos-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Dépendances Flutter & Secrets run: | flutter pub get echo "${{ secrets.ENV_FILE }}" > .env printf '%s' '${{ secrets.FIREBASE_CREDENTIALS }}' > ./android/firebase_credentials.json - name: Build & Deploy Android working-directory: ./android env: ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} RAW_PROPERTIES: ${{ secrets.ANDROID_KEY_PROPERTIES }} FIREBASE_ANDROID_APP_ID: ${{ secrets.FIREBASE_ANDROID_APP_ID }} run: | # 1. Keystore & Properties echo "$ANDROID_KEYSTORE_BASE64" | base64 -D > keystore.jks echo "$RAW_PROPERTIES" > temp_props.txt echo "storePassword=$(grep 'storePassword' temp_props.txt | cut -d'=' -f2 | tr -d '\r')" > key.properties echo "keyPassword=$(grep 'keyPassword' temp_props.txt | cut -d'=' -f2 | tr -d '\r')" >> key.properties echo "keyAlias=$(grep 'keyAlias' temp_props.txt | cut -d'=' -f2 | tr -d '\r')" >> key.properties echo "storeFile=$(pwd)/keystore.jks" >> key.properties # 2. Gemfile Ruby 3.4 Patches echo "source 'https://rubygems.org'" > Gemfile echo "gem 'fastlane', '>= 2.210.0'" >> Gemfile echo "gem 'fastlane-plugin-firebase_app_distribution'" >> Gemfile for g in abbrev ostruct mutex_m base64 csv bigdecimal drb nkf; do echo "gem '$g'" >> Gemfile; done gem install bundler -v 2.7.2 --no-document bundle _2.7.2_ update # 3. Build APK cd .. && flutter build apk --release && cd android # 4. Envoi Firebase bundle _2.7.2_ exec fastlane run firebase_app_distribution \ app:"$FIREBASE_ANDROID_APP_ID" \ android_artifact_path:"../build/app/outputs/flutter-apk/app-release.apk" \ service_credentials_file:"firebase_credentials.json" \ release_notes:"Android APK stable - Xcode 26.2" # --- JOB 2 : IOS (IPA) --- deploy-ios: runs-on: macos-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Dépendances iOS & Secrets run: | flutter pub get echo "${{ secrets.ENV_FILE }}" > .env printf '%s' '${{ secrets.FIREBASE_CREDENTIALS }}' > ./ios/firebase_credentials.json cd ios && (pod install --repo-update || pod update) - name: Préparer le Code Signing (Safe Mode Mac Perso) env: P12_BASE: ${{ secrets.IOS_P12_BASE64 }} P12_PASS: ${{ secrets.IOS_P12_PASSWORD }} PROV_BASE: ${{ secrets.IOS_PROVISION_BASE64 }} run: | security delete-keychain build.keychain || true security create-keychain -p "" build.keychain security unlock-keychain -p "" build.keychain # Crucial pour Xcode 26.2 : ajouter à la liste de recherche security list-keychains -d user -s build.keychain $(security list-keychains -d user | xargs) echo "$P12_BASE" | base64 -D -o cert.p12 security import cert.p12 -k build.keychain -P "$P12_PASS" -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple: -s -k "" build.keychain mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles echo "$PROV_BASE" | base64 -D -o ~/Library/MobileDevice/Provisioning\ Profiles/distribution.mobileprovision - name: Build IPA (Standard Xcode 26.2) run: flutter build ipa --release --export-method ad-hoc - name: Envoi Firebase iOS env: FIREBASE_IOS_APP_ID: ${{ secrets.FIREBASE_IOS_APP_ID }} run: | cd ios echo "source 'https://rubygems.org'" > Gemfile echo "gem 'fastlane', '>= 2.210.0'" >> Gemfile echo "gem 'fastlane-plugin-firebase_app_distribution'" >> Gemfile for g in abbrev ostruct mutex_m base64 csv bigdecimal drb nkf; do echo "gem '$g'" >> Gemfile; done gem install bundler -v 2.7.2 --no-document bundle _2.7.2_ update IPA_PATH=$(find .. -name "*.ipa" -not -path "*/Pods/*" | head -n 1) bundle _2.7.2_ exec fastlane run firebase_app_distribution \ app:"$FIREBASE_IOS_APP_ID" \ ipa_path:"$IPA_PATH" \ service_credentials_file:"firebase_credentials.json" \ release_notes:"iOS IPA stable - Xcode 26.2" - name: Nettoyage Trousseau if: always() run: | security list-keychains -d user -s login.keychain security delete-keychain build.keychain || true