name: Build Release on: workflow_dispatch: inputs: versionName: required: true description: This releases version name default: "1.0.0" versionCode: required: true description: This releases version code default: "1000" permissions: contents: write jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup JDK 17 uses: actions/setup-java@v3 with: distribution: "temurin" java-version: 17 - name: Setup Android SDK uses: android-actions/setup-android@v2.0.10 - name: Set Version uses: chkfung/android-version-actions@v1.1 with: gradlePath: app/build.gradle.kts versionCode: ${{github.event.inputs.versionCode}} versionName: ${{github.event.inputs.versionName}} - name: Bump Version continue-on-error: true run: | git config --local user.email "actions@github.com" git config --local user.name "GitHub Actions" git add app/build.gradle.kts if ! git diff --quiet app/build.gradle.kts; then git commit -m "chore: Bump version to ${{github.event.inputs.versionName}} (${{github.event.inputs.versionCode}})" git push else echo "No changes to version file, skipping commit" fi - name: Build Signed APK run: | # Ensure keystore secret is present if [ -z "${{ secrets.keystore }}" ]; then echo "Keystore secret missing, aborting" exit 1 fi echo "${{ secrets.keystore }}" | base64 -d > $GITHUB_WORKSPACE/signing-key.jks chmod +x ./gradlew # Retry gradle up to 3 times to mitigate transient network/cache service issues ATTEMPT=0 until [ $ATTEMPT -ge 3 ] do ./gradlew packageReleaseUniversalApk \ -Pandroid.injected.signing.store.file=$GITHUB_WORKSPACE/signing-key.jks \ -Pandroid.injected.signing.store.password=${{ secrets.keystore_password }} \ -Pandroid.injected.signing.key.alias=${{ secrets.key_alias }} \ -Pandroid.injected.signing.key.password=${{ secrets.key_password }} --no-daemon --stacktrace && break ATTEMPT=$((ATTEMPT+1)) echo "Gradle build failed, retrying ($ATTEMPT/3)..." sleep 5 done if [ $ATTEMPT -ge 3 ]; then echo "Gradle build failed after 3 attempts" exit 1 fi - name: Release run: | mv app/build/outputs/apk_from_bundle/release/app-release-universal.apk ./app-release.apk git config --local user.email "actions@github.com" git config --local user.name "GitHub Actions" tag="${{ github.event.inputs.versionCode }}" git tag "$tag" git push origin "$tag" gh release create "$tag" \ --title "${{ github.event.inputs.versionName }}" \ --generate-notes \ ./*.apk env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}