arblant
railway-clean-ip-scanner-android / .github / workflows / build-apk.yml
build-apk.yml57 lines · 2.2 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
name: Build APK

on:
  workflow_dispatch:
  push:
    tags:
      - "v*"

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

      - uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: "17"

      - uses: gradle/actions/setup-gradle@v4
        with:
          gradle-version: "8.5"

      - name: Decode release keystore
        run: echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 -d > "$RUNNER_TEMP/release.p12"

      - name: Diagnose network
        run: |
          env | grep -i proxy || echo "no proxy env vars"
          echo "--- curl services.gradle.org:"; curl -sI --max-time 15 https://services.gradle.org/distributions/gradle-8.2.1-bin.zip | head -3 || true
          echo "--- curl dl.google.com plugin pom:"; curl -sI --max-time 15 https://dl.google.com/dl/android/maven2/com/android/application/com.android.application.gradle.plugin/8.2.2/com.android.application.gradle.plugin-8.2.2.pom | head -3 || true

      - name: Build release APK
        env:
          ANDROID_KEYSTORE_PATH: ${{ runner.temp }}/release.p12
          KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
          KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
          KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
        run: |
          PROXY="${https_proxy:-${HTTPS_PROXY:-}}"
          if [ -n "$PROXY" ]; then
            HOSTPORT=$(echo "$PROXY" | sed -E 's#^https?://([^@/]+@)?([^/]+)/?$#\2#')
            PHOST="${HOSTPORT%:*}"; PPORT="${HOSTPORT##*:}"
            export GRADLE_OPTS="-Dhttp.proxyHost=$PHOST -Dhttp.proxyPort=$PPORT -Dhttps.proxyHost=$PHOST -Dhttps.proxyPort=$PPORT -Dhttp.nonProxyHosts=localhost -Dhttps.nonProxyHosts=localhost"
            echo "Gradle proxy configured: $PHOST:$PPORT"
          else
            echo "No proxy env present; building direct"
          fi
          export GRADLE_OPTS="${GRADLE_OPTS:-} -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv6Addresses=false"
          gradle assembleRelease --no-daemon
          cp app/build/outputs/apk/release/app-release.apk RailwayCleanIPScanner-v1.0.0.apk

      - name: Upload APK artifact
        uses: actions/upload-artifact@v4
        with:
          name: RailwayCleanIPScanner-apk
          path: RailwayCleanIPScanner-v1.0.0.apk