mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2025-12-27 13:29:31 +00:00
This workflow automatically builds APKs for feature branches: - Triggers on pushes to branches starting with 'claude/', 'feature/', or 'dev/' - Runs build_runner to generate required .g.dart files - Supports both signed (if secrets available) and debug builds - Uploads APK artifacts with branch name and commit SHA - 30-day artifact retention for testing - Manual trigger support via workflow_dispatch This allows developers to test changes without manually building locally. Artifacts can be downloaded from the GitHub Actions run page.
99 lines
3.6 KiB
YAML
99 lines
3.6 KiB
YAML
name: Feature Branch Build
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- 'claude/**'
|
|
- 'feature/**'
|
|
- 'dev/**'
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
build_android_debug:
|
|
name: Build Android APK (Debug/Unsigned)
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Setup Flutter Environment
|
|
uses: ./.github/actions/flutter-setup
|
|
with:
|
|
flutter-channel: stable
|
|
java-version: 17
|
|
|
|
- name: Accept Android SDK Licenses
|
|
run: |
|
|
yes | sudo $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses
|
|
|
|
- name: Run build_runner to generate code
|
|
run: flutter pub run build_runner build --delete-conflicting-outputs
|
|
|
|
- name: Check for keystore (for signed builds)
|
|
id: check_keystore
|
|
run: |
|
|
if [ -n "${{ secrets.UPLOAD_KEYSTORE_JKS }}" ]; then
|
|
echo "has_keystore=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "has_keystore=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Decode android/upload.jks (if available)
|
|
if: steps.check_keystore.outputs.has_keystore == 'true'
|
|
run: echo "${{ secrets.UPLOAD_KEYSTORE_JKS }}" | base64 --decode > android/upload.jks
|
|
|
|
- name: Decode android/key.properties (if available)
|
|
if: steps.check_keystore.outputs.has_keystore == 'true'
|
|
run: echo "${{ secrets.KEY_PROPERTIES }}" | base64 --decode > android/key.properties
|
|
|
|
- name: Build Signed APKs (if keystore available)
|
|
if: steps.check_keystore.outputs.has_keystore == 'true'
|
|
run: |
|
|
flutter build apk --release --split-per-abi
|
|
flutter build apk --release
|
|
|
|
- name: Build Debug APKs (if no keystore)
|
|
if: steps.check_keystore.outputs.has_keystore == 'false'
|
|
run: |
|
|
echo "Building debug APK (no keystore found)"
|
|
flutter build apk --debug
|
|
|
|
- name: Rename Universal APK (signed)
|
|
if: steps.check_keystore.outputs.has_keystore == 'true'
|
|
run: mv build/app/outputs/flutter-apk/{app-release,app-universal-release}.apk
|
|
|
|
- name: Get branch name
|
|
id: branch_name
|
|
run: |
|
|
BRANCH_NAME=${GITHUB_REF#refs/heads/}
|
|
SAFE_BRANCH_NAME=$(echo "$BRANCH_NAME" | sed 's/[^a-zA-Z0-9_-]/_/g')
|
|
echo "branch=$SAFE_BRANCH_NAME" >> $GITHUB_OUTPUT
|
|
echo "short_sha=${GITHUB_SHA:0:7}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Upload Android APK Artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: android-apk-${{ steps.branch_name.outputs.branch }}-${{ steps.branch_name.outputs.short_sha }}
|
|
path: |
|
|
build/app/outputs/flutter-apk/*.apk
|
|
retention-days: 30
|
|
|
|
- name: Comment on commit with artifact link
|
|
if: steps.check_keystore.outputs.has_keystore == 'true'
|
|
run: |
|
|
echo "✅ APK build complete!"
|
|
echo "📦 Artifacts will be available at: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
echo ""
|
|
echo "Built files:"
|
|
ls -lh build/app/outputs/flutter-apk/*.apk
|
|
|
|
- name: Comment on commit with debug build notice
|
|
if: steps.check_keystore.outputs.has_keystore == 'false'
|
|
run: |
|
|
echo "⚠️ Debug APK build complete (no signing keystore available)"
|
|
echo "📦 Artifacts will be available at: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
echo ""
|
|
echo "Built files:"
|
|
ls -lh build/app/outputs/flutter-apk/*.apk
|