diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dc65fa5..17d9faa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,79 +1,67 @@ name: Build APK -on: - push: - branches: ["**"] - pull_request: - -permissions: - contents: read - -env: - JAVA_VERSION: 17 +on: [push] jobs: build: + name: Build and push runs-on: ubuntu-latest + steps: - - name: Checkout - uses: actions/checkout@v4 + - uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Setup Java uses: actions/setup-java@v4 with: - distribution: temurin - java-version: ${{ env.JAVA_VERSION }} - cache: gradle - - - name: Setup Android SDK - uses: android-actions/setup-android@v2 + distribution: "temurin" + java-version: "17" - name: Make Gradle executable run: chmod +x ./gradlew - - name: Optional Keystore (if provided) - env: - KEYSTORE: ${{ secrets.KEYSTORE }} + - name: Build APKs run: | - if [ -n "$KEYSTORE" ]; then - echo "$KEYSTORE" | base64 -d > signing-key.jks - ls -l signing-key.jks - else - echo "No keystore provided, skipping..." + # Retry the Gradle build up to 3 times to mitigate transient cache/service errors + ATTEMPT=0 + until [ $ATTEMPT -ge 3 ] + do + ./gradlew build --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: Assemble Debug and Release - env: - KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} - KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - GRADLE_OPTS: -Dorg.gradle.daemon=false - run: | - if [ -f signing-key.jks ]; then - ./gradlew assembleDebug assembleRelease \ - -Pandroid.injected.signing.store.file=$GITHUB_WORKSPACE/signing-key.jks \ - -Pandroid.injected.signing.store.password="$KEYSTORE_PASSWORD" \ - -Pandroid.injected.signing.key.alias="$KEY_ALIAS" \ - -Pandroid.injected.signing.key.password="$KEY_PASSWORD" - else - ./gradlew assembleDebug assembleRelease - fi + - name: Setup directories + run: + mkdir -p /tmp/ShiggyXposedbuild/apks + mkdir -p /tmp/ShiggyXposedbuild/tools - - name: Collect APKs - run: | - mkdir -p dist - cp app/build/outputs/apk/debug/*.apk dist/ || true - # Prefer signed release if produced - if ls app/build/outputs/apk/release/*-signed.apk >/dev/null 2>&1; then - cp app/build/outputs/apk/release/*-signed.apk dist/ - else - cp app/build/outputs/apk/release/*.apk dist/ - fi - ls -1 dist + - name: Move debug APK + run: mv ./app/build/outputs/apk/debug/app-debug.apk /tmp/ShiggyXposedbuild/apks + + - name: Download uber-apk-signer + run: wget -nv "https://github.com/patrickfav/uber-apk-signer/releases/download/v1.2.1/uber-apk-signer-1.2.1.jar" -O /tmp/ShiggyXposedbuild/tools/uber-apk-signer.jar + + - name: Sign release APK + run: java -jar /tmp/ShiggyXposedbuild/tools/uber-apk-signer.jar --apks ./app/build/outputs/apk/release/app-release-unsigned.apk --out /tmp/ShiggyXposedbuild/apks/ + + - name: Rename release APK + run: mv /tmp/ShiggyXposedbuild/apks/app-release-aligned-debugSigned.apk /tmp/ShiggyXposedbuild/apks/app-release.apk + + - name: Upload debug APK + uses: actions/upload-artifact@v4 + with: + name: app-debug + path: /tmp/ShiggyXposedbuild/apks/app-debug.apk - name: Upload All APKs uses: actions/upload-artifact@v4 with: - name: apks - path: dist/*.apk - if-no-files-found: error + name: app-release + path: /tmp/ShiggyXposedbuild/apks/app-release.apk \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 9477ef3..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,105 +0,0 @@ -name: Build Release - -on: - workflow_dispatch: - inputs: - versionName: - required: true - description: This release's version name - default: "1.0.0" - versionCode: - required: true - description: This release's version code - default: "1000" - -permissions: - contents: write - -env: - JAVA_VERSION: 17 - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup JDK - uses: actions/setup-java@v4 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: temurin - cache: gradle - - - name: Setup Android SDK - uses: android-actions/setup-android@v2 - - - 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: Commit Version Bump (if changed) - run: | - git config user.email "actions@github.com" - git config user.name "GitHub Actions" - git add app/build.gradle.kts - if git diff --cached --quiet; then - echo "No version change." - else - git commit -m "chore: bump version to ${{ github.event.inputs.versionName }} (${{ github.event.inputs.versionCode }})" - git push - fi - - - name: Prepare Keystore - run: | - echo "${{ secrets.KEYSTORE }}" | base64 -d > signing-key.jks - ls -l signing-key.jks - - - name: Build Universal APKs - env: - KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} - KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - GRADLE_OPTS: -Dorg.gradle.daemon=false - run: | - ./gradlew packageDebugUniversalApk packageReleaseUniversalApk \ - -Pandroid.injected.signing.store.file=$GITHUB_WORKSPACE/signing-key.jks \ - -Pandroid.injected.signing.store.password="$KEYSTORE_PASSWORD" \ - -Pandroid.injected.signing.key.alias="$KEY_ALIAS" \ - -Pandroid.injected.signing.key.password="$KEY_PASSWORD" - - - name: Collect APKs - run: | - mkdir dist - mv app/build/outputs/apk_from_bundle/debug/app-debug-universal.apk dist/app-debug.apk - mv app/build/outputs/apk_from_bundle/release/app-release-universal.apk dist/app-release.apk - ls -l dist - - - name: Upload APK Artifacts - uses: actions/upload-artifact@v4 - with: - name: release-apks - path: dist/*.apk - if-no-files-found: error - - - name: Create Tag and Release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - tag=${{ github.event.inputs.versionCode }} - if git rev-parse -q --verify "refs/tags/$tag" >/dev/null; then - echo "Tag $tag already exists, skipping creation." - else - git tag "$tag" - git push origin "$tag" - fi - gh release view "$tag" >/dev/null 2>&1 || gh release create "$tag" \ - --title "${{ github.event.inputs.versionName }}" \ - --generate-notes \ - dist/app-debug.apk dist/app-release.apk diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a2cc3d0..b86ee1e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -12,8 +12,8 @@ android { applicationId = "ShiggyXposed.xposed" minSdk = 24 targetSdk = 36 - versionCode = 1220 - versionName = "1.2.2" + versionCode = 1210 + versionName = "1.2.1" } buildTypes {