All checks were successful
Build APK / build (push) Successful in 5m41s
Add contents:write permission and replace upload-artifact with an API call that creates/reuses the release for the tag and attaches the signed APK as a downloadable asset. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
76 lines
3.0 KiB
YAML
76 lines
3.0 KiB
YAML
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
|