Update build-apk.yml

This commit is contained in:
Eliaway 2026-06-12 00:31:59 +03:00 committed by GitHub
parent c4fa8c2637
commit c987d202b7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -5,62 +5,185 @@ on:
branches: [ feature/advanced-player-features ]
workflow_dispatch:
# ✅ منع تشغيل متعدد في نفس الوقت
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 60
# ✅ صلاحيات واضحة
permissions:
contents: read
actions: write
steps:
# ─────────────────────────────────────────
# 1. CHECKOUT
# ─────────────────────────────────────────
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: false
token: ${{ secrets.GITHUB_TOKEN }} # ✅ حل مشكلة exit 128
fetch-depth: 1
# ─────────────────────────────────────────
# 2. SUBMODULES
# ─────────────────────────────────────────
- name: Initialize submodules manually
run: |
git config --global url."https://${{ secrets.GITHUB_TOKEN }}@github.com/".insteadOf "https://github.com/"
git submodule init MPVKit
git submodule update --depth=1 MPVKit
env:
GIT_TERMINAL_PROMPT: 0 # ✅ منع توقف Git عند طلب كلمة مرور
# ─────────────────────────────────────────
# 3. JDK SETUP
# ─────────────────────────────────────────
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: 'gradle' # ✅ cache تلقائي للـ Gradle
# ─────────────────────────────────────────
# 4. ANDROID SDK + NDK
# ─────────────────────────────────────────
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Install NDK (required for MPVKit)
run: |
echo "y" | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager \
"ndk;27.2.12479018" \
"cmake;3.22.1"
# ✅ MPVKit يحتاج NDK، بدونه البناء يفشل
# ─────────────────────────────────────────
# 5. GRADLE SETUP
# ─────────────────────────────────────────
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-read-only: false
gradle-home-cache-cleanup: true # ✅ تنظيف cache القديم
# ─────────────────────────────────────────
# 6. CONFIGURATION FILES
# ─────────────────────────────────────────
- name: Create local.properties
run: |
cat > local.properties << 'EOF'
sdk.dir=/usr/local/lib/android/sdk
SUPABASE_URL=${{ secrets.SUPABASE_URL }}
SUPABASE_ANON_KEY=${{ secrets.SUPABASE_ANON_KEY }}
TRAKT_CLIENT_ID=${{ secrets.TRAKT_CLIENT_ID }}
TRAKT_CLIENT_SECRET=${{ secrets.TRAKT_CLIENT_SECRET }}
TRAKT_REDIRECT_URI=nuvio://auth/trakt
INTRO_DB_URL=${{ secrets.INTRO_DB_URL }}
EOF
# ✅ استخدام Secrets بدل قيم فارغة
- name: Add Gradle properties
run: |
echo "kotlin.native.ignoreDisabledTargets=true" >> gradle.properties
echo "kotlin.native.enableKlibsCrossCompilation=false" >> gradle.properties
cat >> gradle.properties << 'EOF'
kotlin.native.ignoreDisabledTargets=true
kotlin.native.enableKlibsCrossCompilation=false
org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m
org.gradle.parallel=true
org.gradle.caching=true
android.useAndroidX=true
EOF
# ✅ زيادة الذاكرة + تفعيل parallel build
# ─────────────────────────────────────────
# 7. BUILD
# ─────────────────────────────────────────
- name: Build Full Debug APK
run: ./gradlew :composeApp:assembleFullDebug -x lint -x test --no-configuration-cache
- name: Rename APK
run: |
APK_PATH=$(find composeApp/build/outputs/apk -name "*.apk" | head -1 )
./gradlew :composeApp:assembleFullDebug \
-x lint \
-x test \
--stacktrace \
--build-cache \
--parallel
# ✅ حذف --no-configuration-cache (يبطئ)
# ✅ أضفنا --stacktrace لتفاصيل الأخطاء
# ✅ أضفنا --build-cache و --parallel للسرعة
# ─────────────────────────────────────────
# 8. APK HANDLING
# ─────────────────────────────────────────
- name: Find and Rename APK
id: apk_info
run: |
APK_PATH=$(find composeApp/build/outputs/apk -name "*.apk" | head -1)
if [ -n "$APK_PATH" ]; then
cp "$APK_PATH" composeApp/build/outputs/apk/NuvioMobile-custom-debug.apk
DEST="composeApp/build/outputs/apk/NuvioMobile-custom-debug.apk"
cp "$APK_PATH" "$DEST"
echo "apk_found=true" >> $GITHUB_OUTPUT
echo "apk_path=$DEST" >> $GITHUB_OUTPUT
echo "✅ APK found: $APK_PATH"
# ✅ طباعة حجم الـ APK
ls -lh "$APK_PATH"
else
echo "apk_found=false" >> $GITHUB_OUTPUT
echo "❌ No APK found!"
fi
# ─────────────────────────────────────────
# 9. UPLOAD ARTIFACTS
# ─────────────────────────────────────────
- name: Upload APK Artifact
if: steps.apk_info.outputs.apk_found == 'true'
uses: actions/upload-artifact@v4
with:
name: NuvioMobile-APK
path: composeApp/build/outputs/apk/NuvioMobile-custom-debug.apk
if-no-files-found: warn
name: NuvioMobile-APK-${{ github.run_number }} # ✅ رقم فريد لكل build
path: ${{ steps.apk_info.outputs.apk_path }}
retention-days: 7 # ✅ احتفظ 7 أيام فقط (توفير مساحة)
if-no-files-found: error
- name: Upload All APKs (fallback)
if: always()
uses: actions/upload-artifact@v4
with:
name: All-APKs
name: All-APKs-${{ github.run_number }}
path: composeApp/build/outputs/apk/**/*.apk
retention-days: 3
if-no-files-found: warn
# ─────────────────────────────────────────
# 10. BUILD SUMMARY
# ─────────────────────────────────────────
- name: Build Summary
if: always()
run: |
echo "## 📦 Build Summary" >> $GITHUB_STEP_SUMMARY
echo "- **Branch:** ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
echo "- **Commit:** ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
echo "- **Run:** #${{ github.run_number }}" >> $GITHUB_STEP_SUMMARY
if [ "${{ steps.apk_info.outputs.apk_found }}" == "true" ]; then
echo "- **Status:** ✅ APK Built Successfully" >> $GITHUB_STEP_SUMMARY
else
echo "- **Status:** ❌ Build Failed" >> $GITHUB_STEP_SUMMARY
fi
# ─────────────────────────────────────────
# 11. UPLOAD LOGS ON FAILURE
# ─────────────────────────────────────────
- name: Upload Build Logs on Failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: build-logs-${{ github.run_number }}
path: |
**/build/reports/
**/build/outputs/logs/
retention-days: 3
if-no-files-found: warn