name: Build & Release APK on: push: tags: - 'v*' permissions: contents: write jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 # services.gradle.org intermittently returns 504s / times out while the # wrapper fetches the distribution. Retry just the download (./gradlew # --version does nothing else) with backoff so a flaky CDN doesn't fail # the release. Once fetched it's cached for the real build step. - name: Warm Gradle wrapper (tolerate flaky CDN) run: | for i in 1 2 3 4 5; do ./gradlew --version && exit 0 echo "Gradle download attempt $i failed; retrying in $((i*20))s..." sleep $((i*20)) done echo "Gradle distribution still unreachable after retries." >&2 exit 1 - name: Decode keystore run: | mkdir -p keystore echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > keystore/ledga-release.jks - name: Build release APK env: KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} KEY_ALIAS: ${{ secrets.KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} run: ./gradlew assembleRelease - name: Rename APK run: | VERSION=${GITHUB_REF_NAME#v} mv app/build/outputs/apk/release/app-release.apk app/build/outputs/apk/release/ledga-v${VERSION}.apk - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: files: app/build/outputs/apk/release/ledga-*.apk generate_release_notes: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 - name: Warm Gradle wrapper (tolerate flaky CDN) run: | for i in 1 2 3 4 5; do ./gradlew --version && exit 0 echo "Gradle download attempt $i failed; retrying in $((i*20))s..." sleep $((i*20)) done echo "Gradle distribution still unreachable after retries." >&2 exit 1 - name: Run tests run: ./gradlew testDebugUnitTest