name: Deploy TravelMate (Full Mobile) on: push: branches: - release jobs: # --- JOB 1 : ANDROID (Génération APK) --- deploy-android: runs-on: macos-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Configuration 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 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 (Correctifs Ruby 3.4 inclus) echo "source 'https://rubygems.org'" > Gemfile echo "gem 'fastlane', '>= 2.230.0'" >> Gemfile echo "gem 'fastlane-plugin-firebase_app_distribution'" >> Gemfile for g in abbrev ostruct mutex_m base64 csv bigdecimal drb nkf reline logger; do echo "gem '$g'" >> Gemfile; done gem install bundler -v 2.7.2 --no-document bundle _2.7.2_ update # 3. Build & Envoi cd .. && flutter build apk --release && cd android 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" # --- JOB 2 : IOS (Génération 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 (Xcode 26.2) 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 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 run: | flutter clean flutter pub get 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 # Utilisation du Gemfile stabilisé echo "source 'https://rubygems.org'" > Gemfile echo "gem 'fastlane', '>= 2.230.0'" >> Gemfile echo "gem 'fastlane-plugin-firebase_app_distribution'" >> Gemfile for g in abbrev ostruct mutex_m base64 csv bigdecimal drb nkf reline logger; do echo "gem '$g'" >> Gemfile; done gem install bundler -v 2.7.2 --no-document bundle _2.7.2_ update # RECHERCHE DYNAMIQUE DE L'IPA IPA_FILE=$(find ../build/ios/ipa -name "*.ipa" | head -n 1) echo "📦 IPA trouvée : $IPA_FILE" bundle _2.7.2_ exec fastlane run firebase_app_distribution \ app:"$FIREBASE_IOS_APP_ID" \ ipa_path:"$IPA_FILE" \ service_credentials_file:"firebase_credentials.json" - name: Nettoyage Final if: always() run: | security list-keychains -d user -s login.keychain security delete-keychain build.keychain || true