name: Build APK # Bouwt een getekende release-APK op elke versietag (v0.1.0, …) en op handmatige trigger. on: push: tags: - "v*" workflow_dispatch: jobs: build: # Dedicated x86_64 runner (LXC op Proxmox) — de globale ARM64-runners hebben deze # label niet, dus zij pikken deze job niet op. runs-on: paperscan # Laat het automatische Actions-token een release aanmaken + assets uploaden. permissions: contents: write # Image met Android SDK + JDK 17 + Gradle voorgeïnstalleerd. container: image: mingc/android-build-box:latest steps: - name: Checkout uses: actions/checkout@v4 - name: Herstel signing keystore uit secret run: | echo "$SIGNING_KEYSTORE_BASE64" | base64 -d > "$GITHUB_WORKSPACE/release.jks" env: SIGNING_KEYSTORE_BASE64: ${{ secrets.SIGNING_KEYSTORE_BASE64 }} - name: Genereer Gradle wrapper indien nodig run: | if [ ! -f gradle/wrapper/gradle-wrapper.jar ]; then gradle wrapper --gradle-version 8.11.1 fi - name: Build release APK run: | chmod +x ./gradlew ./gradlew --no-daemon assembleRelease env: SIGNING_STORE_FILE: ${{ github.workspace }}/release.jks SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }} SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }} SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} - name: Publiceer release met APK als download env: TOKEN: ${{ github.token }} TAG: ${{ github.ref_name }} API: ${{ github.api_url }}/repos/${{ github.repository }} run: | set -e APK=$(ls app/build/outputs/apk/release/*.apk | head -1) AUTH="Authorization: token $TOKEN" # Hergebruik een bestaande release voor deze tag, of maak 'm aan. REL_ID=$(curl -sS -H "$AUTH" "$API/releases/tags/$TAG" | grep -oP '"id":\s*\K[0-9]+' | head -1 || true) if [ -z "$REL_ID" ]; then REL_ID=$(curl -sS -X POST "$API/releases" -H "$AUTH" -H "Content-Type: application/json" \ -d "{\"tag_name\":\"$TAG\",\"name\":\"PaperScan $TAG\",\"body\":\"Automatische build van $TAG.\"}" \ | grep -oP '"id":\s*\K[0-9]+' | head -1) fi echo "Release id: $REL_ID" # Verwijder een eventueel bestaande asset met dezelfde naam (bij re-run/hertag). ASSET_NAME="paperscan-$TAG.apk" OLD=$(curl -sS -H "$AUTH" "$API/releases/$REL_ID/assets" \ | grep -oP "\"id\":\s*\K[0-9]+(?=[^}]*\"name\":\s*\"$ASSET_NAME\")" | head -1 || true) if [ -n "$OLD" ]; then curl -sS -X DELETE -H "$AUTH" "$API/releases/$REL_ID/assets/$OLD"; fi # Upload de getekende APK als download-asset. curl -sS -X POST "$API/releases/$REL_ID/assets?name=$ASSET_NAME" \ -H "$AUTH" -H "Content-Type: application/octet-stream" \ --data-binary @"$APK" | grep -oP '"browser_download_url":\s*"\K[^"]+' || true