diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3551da5..dc65fa5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,69 +1,79 @@ name: Build APK -on: + +on: push: - tags: - - 'V*' - workflow_dispatch: + branches: ["**"] + pull_request: + +permissions: + contents: read + +env: + JAVA_VERSION: 17 jobs: build: - name: Build and push runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Java uses: actions/setup-java@v4 with: - distribution: "temurin" - java-version: "17" + distribution: temurin + java-version: ${{ env.JAVA_VERSION }} + cache: gradle + + - name: Setup Android SDK + uses: android-actions/setup-android@v2 + - name: Make Gradle executable run: chmod +x ./gradlew - - name: Build APKs - run: | - 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: Setup directories - run: - mkdir -p /tmp/ShiggyXposedbuild/apks - mkdir -p /tmp/ShiggyXposedbuild/tools - - 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/goonxposed.apk - - name: Upload debug APK - uses: actions/upload-artifact@v4 - with: - name: app-debug - path: /tmp/ShiggyXposedbuild/apks/app-debug.apk - - name: Upload release APK - uses: actions/upload-artifact@v4 - with: - name: app-release - path: /tmp/ShiggyXposedbuild/apks/goonxposed.apk - - # NEW: Create GitHub Release - - name: Create Release - if: startsWith(github.ref, 'refs/tags/') - uses: softprops/action-gh-release@v1 - with: - files: /tmp/ShiggyXposedbuild/apks/goonxposed.apk - draft: false - prerelease: false + + - name: Optional Keystore (if provided) env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + KEYSTORE: ${{ secrets.KEYSTORE }} + run: | + if [ -n "$KEYSTORE" ]; then + echo "$KEYSTORE" | base64 -d > signing-key.jks + ls -l signing-key.jks + else + echo "No keystore provided, skipping..." + 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: 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: Upload All APKs + uses: actions/upload-artifact@v4 + with: + name: apks + path: dist/*.apk + if-no-files-found: error