arblant
FoxyVPN-MultiAcc / .github / workflows / android-ci.yml
android-ci.yml108 lines · 3.0 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
name: Android CI

on:
  push:
    tags: ["v*.*.*"]
  pull_request:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: "17"

      - name: Setup Android SDK
        uses: android-actions/setup-android@v3
        with:
          packages: "platform-tools"

      - name: Install NDK
        run: sdkmanager --install "ndk;26.1.10909125"

      - name: Setup Gradle
        uses: gradle/actions/setup-gradle@v4

      - name: Grant execute permission for gradlew
        run: chmod +x gradlew || true

      - name: Generate Gradle wrapper (if missing)
        run: gradle wrapper --gradle-version 8.10.2 || true

      - name: Assemble debug APK
        run: ./gradlew assembleDebug --no-daemon

      - name: Upload debug APK
        uses: actions/upload-artifact@v4
        with:
          name: foxyvpn-debug-apk
          path: app/build/outputs/apk/debug/*.apk

  release:
    needs: build
    if: startsWith(github.ref, 'refs/tags/v')
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v4

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: "17"

      - name: Setup Android SDK
        uses: android-actions/setup-android@v3
        with:
          packages: "platform-tools"

      - name: Install NDK
        run: sdkmanager --install "ndk;26.1.10909125"

      - name: Setup Gradle
        uses: gradle/actions/setup-gradle@v4

      - name: Grant execute permission for gradlew
        run: chmod +x gradlew || true

      - name: Generate Gradle wrapper (if missing)
        run: gradle wrapper --gradle-version 8.10.2 || true

      - name: Decode signing keystore
        id: signing
        env:
          SIGNING_KEYSTORE_BASE64: ${{ secrets.SIGNING_KEYSTORE_BASE64 }}
        run: |
          if [ -n "$SIGNING_KEYSTORE_BASE64" ]; then
            printf '%s' "$SIGNING_KEYSTORE_BASE64" | base64 -d > release-keystore.jks
            echo "signed=true" >> "$GITHUB_OUTPUT"
            echo "Signing keystore decoded; the release APK will be signed."
          else
            echo "signed=false" >> "$GITHUB_OUTPUT"
            echo "No SIGNING_KEYSTORE_BASE64 secret; the release APK will be unsigned."
          fi

      - name: Assemble release APK
        env:
          SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
          SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
          SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}
        run: ./gradlew assembleRelease --no-daemon

      - name: Remove the decoded keystore
        if: always()
        run: rm -f release-keystore.jks

      - name: Create GitHub Release
        uses: softprops/action-gh-release@v2
        with:
          files: app/build/outputs/apk/release/*.apk
          generate_release_notes: true