Reverse-engineered ParkSmarter API client (TypeScript, live-verified) plus a de-Googled Expo/React Native app for GrapheneOS: MapLibre meter map with GPS, VisionCamera QR kiosk scanning with save/share, local session-expiry reminders, UnifiedPush wiring, and Gitea CI to publish signed APKs for Obtainium. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
62 lines
2.2 KiB
YAML
62 lines
2.2 KiB
YAML
# Build a signed release APK and publish it as a Gitea/Forgejo release.
|
|
# Obtainium then tracks this repo's releases and offers updates.
|
|
#
|
|
# Triggers on any tag like v0.1.0. Requires a self-hosted Actions runner that has
|
|
# (or a container image that provides) the Android SDK + JDK 17 + Node 20.
|
|
#
|
|
# Required repo secrets (Settings -> Actions -> Secrets):
|
|
# ANDROID_KEYSTORE_B64 base64 of your release keystore (keep this key forever —
|
|
# Obtainium/F-Droid pin the signer; a new key = users must reinstall)
|
|
# ANDROID_KEYSTORE_PASSWORD
|
|
# ANDROID_KEY_ALIAS
|
|
# ANDROID_KEY_PASSWORD
|
|
#
|
|
# Generate the keystore once, locally:
|
|
# keytool -genkeypair -v -keystore bigbrainparking.keystore \
|
|
# -alias bigbrainparking -keyalg RSA -keysize 2048 -validity 10000
|
|
# base64 -w0 bigbrainparking.keystore # -> ANDROID_KEYSTORE_B64
|
|
|
|
name: build-apk
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
# A container with Android SDK + Node preinstalled keeps the runner simple:
|
|
container:
|
|
image: reactnativecommunity/react-native-android:latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install dependencies
|
|
run: npm install
|
|
|
|
- name: Build the API client
|
|
run: npm run build --workspace parksmarter-client
|
|
|
|
- name: Restore signing keystore
|
|
run: |
|
|
echo "${{ secrets.ANDROID_KEYSTORE_B64 }}" | base64 -d > "$PWD/app/release.keystore"
|
|
|
|
- name: Expo prebuild (generate android/)
|
|
working-directory: app
|
|
run: npx expo prebuild --platform android --no-install
|
|
|
|
- name: Assemble signed release
|
|
working-directory: app/android
|
|
env:
|
|
BBP_UPLOAD_STORE_FILE: ../release.keystore
|
|
BBP_UPLOAD_STORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
|
|
BBP_UPLOAD_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
|
|
BBP_UPLOAD_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
|
|
run: ./gradlew assembleRelease --no-daemon
|
|
|
|
- name: Publish release with APK
|
|
uses: akkuman/gitea-release-action@v1
|
|
with:
|
|
files: app/android/app/build/outputs/apk/release/*.apk
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|