# Construit l'APK release et publie une GitHub Release à chaque mise à jour # de main (nouvelle version de l'app). Sur une pull request ou un lancement # manuel (workflow_dispatch), l'APK est seulement construit et déposé en # artifact — aucune release n'est publiée. name: Build APK on: push: branches: [main] pull_request: branches: [main] workflow_dispatch: permissions: contents: write jobs: build: 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: channel: stable flutter-version: 3.35.3 cache: true - name: Read app version from pubspec.yaml id: version run: echo "version=$(grep '^version:' pubspec.yaml | awk '{print $2}' | cut -d+ -f1)" >> "$GITHUB_OUTPUT" - run: flutter pub get # Keystore fixe injecté via secrets : sans lui, Gradle signerait avec une # clé debug générée sur le runner (différente à chaque build) et l'APK ne # s'installerait pas par-dessus une version déjà présente sur l'appareil. - name: Set up release signing env: KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} run: | for v in KEYSTORE_BASE64 KEYSTORE_PASSWORD KEY_ALIAS KEY_PASSWORD; do if [ -z "${!v}" ]; then echo "::error::Secret ANDROID_$v manquant — impossible de signer l'APK avec une clé stable." exit 1 fi done echo "$KEYSTORE_BASE64" | base64 -d > android/app/release.jks { echo "storeFile=release.jks" echo "storePassword=$KEYSTORE_PASSWORD" echo "keyAlias=$KEY_ALIAS" echo "keyPassword=$KEY_PASSWORD" } > android/key.properties - name: Build release APK run: flutter build apk --release - name: Rename APK with version run: cp build/app/outputs/flutter-apk/app-release.apk "xtremobile-v${{ steps.version.outputs.version }}.apk" - name: Upload APK artifact uses: actions/upload-artifact@v4 with: name: xtremobile-v${{ steps.version.outputs.version }}-apk path: xtremobile-v${{ steps.version.outputs.version }}.apk # La release n'est créée que sur main : un même numéro de version met à # jour la release existante au lieu d'en créer une seconde. - name: Publish GitHub Release if: github.ref == 'refs/heads/main' uses: softprops/action-gh-release@v2 with: tag_name: v${{ steps.version.outputs.version }} name: XtremMobile v${{ steps.version.outputs.version }} files: xtremobile-v${{ steps.version.outputs.version }}.apk generate_release_notes: true