Build & Sign Android APK #227
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build & Sign Android APK | |
| on: | |
| push: | |
| branches: [ main ] | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Source | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| - name: Install Dependencies | |
| run: npm ci | |
| - name: Fetch OCR Binaries (Global Version Only) | |
| run: | | |
| mkdir -p public/tesseract | |
| curl -Lo public/tesseract/tesseract-core.wasm https://unpkg.com/[email protected]/tesseract-core.wasm | |
| curl -Lo public/tesseract/tesseract-core-simd.wasm https://unpkg.com/[email protected]/tesseract-core-simd.wasm | |
| curl -Lo public/tesseract/tesseract-core-lstm.wasm https://unpkg.com/[email protected]/tesseract-core-lstm.wasm | |
| curl -Lo public/tesseract/tesseract-core.wasm.js https://unpkg.com/[email protected]/tesseract-core.wasm.js | |
| curl -Lo public/tesseract/worker.min.js https://unpkg.com/[email protected]/dist/worker.min.js | |
| curl -Lo public/tesseract/eng.traineddata.gz https://raw.githubusercontent.com/naptha/tessdata/gh-pages/4.0.0/eng.traineddata.gz | |
| gunzip public/tesseract/eng.traineddata.gz | |
| - name: Build Web Assets (Global) | |
| run: npm run build | |
| - name: Setup Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'zulu' | |
| java-version: '21' | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v3 | |
| with: | |
| gradle-version: wrapper | |
| cache-disabled: true | |
| - name: Sync Capacitor | |
| run: npx cap sync android | |
| - name: Build Global APK | |
| run: | | |
| cd android | |
| chmod +x gradlew | |
| ./gradlew assembleRelease | |
| mv app/build/outputs/apk/release/app-release-unsigned.apk ../paperknife-global-unsigned.apk | |
| - name: Build F-Droid Lite APK (No OCR) | |
| run: | | |
| # Clean assets | |
| rm -rf public/tesseract/ | |
| # Rebuild without OCR using environment variable | |
| export VITE_DISABLE_OCR=true | |
| npm run build | |
| npx cap sync android | |
| cd android | |
| ./gradlew assembleRelease | |
| mv app/build/outputs/apk/release/app-release-unsigned.apk ../paperknife-fdroid-unsigned.apk | |
| - name: Sign Both APKs | |
| id: sign_app | |
| uses: ilharp/sign-android-release@v2 | |
| with: | |
| releaseDir: . | |
| signingKey: ${{ secrets.ANDROID_SIGNING_KEY }} | |
| keyAlias: ${{ secrets.ANDROID_ALIAS }} | |
| keyStorePassword: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} | |
| keyPassword: ${{ secrets.ANDROID_KEY_PASSWORD }} | |
| buildToolsVersion: "34.0.0" | |
| - name: Rename & Prepare Artifacts | |
| run: | | |
| VERSION=$(node -p "require('./package.json').version") | |
| cp paperknife-global-unsigned-signed.apk "paperknife-v${VERSION}.apk" | |
| cp paperknife-fdroid-unsigned-signed.apk "paperknife-lite-v${VERSION}.apk" | |
| echo "APP_VERSION=${VERSION}" >> $GITHUB_ENV | |
| - name: Upload Artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: PaperKnife-v${{ env.APP_VERSION }} | |
| path: | | |
| paperknife-v${{ env.APP_VERSION }}.apk | |
| paperknife-lite-v${{ env.APP_VERSION }}.apk | |
| if-no-files-found: error |