Also un-ignores docs/ directory so project documentation (specs, plans) is tracked in git. Individual research files remain gitignored.
3.9 KiB
Release build & Forgejo publishing — design
Datum: 2026-07-30
Context: Android app (AtomRelay) heeft nog geen ondertekende release build. Doel: signing keystore aanmaken, release APK + AAB bouwen, en publiceren als release op Forgejo (git.eddydevink.nl/eddy/Project_SylDa). Vooruitkijkend op multi-store publishing (Amazon, Samsung, F-Droid, later Google Play).
Scope
- Keystore genereren en veilig opslaan (Obsidian vault + gitignored workspace copy)
- Signing configuratie in
build.gradlevia externsigning.properties - Release script
scripts/release.shdat APK, AAB en firmware binaries bundelt - Upload naar Forgejo als git-tagged release met attachments
- Buiten scope: daadwerkelijk uploaden naar app stores, Forgejo Actions/CI
Huidige situatie
versionCode 1,versionName "1.0"- Geen keystore, geen signing config
gradle.propertiesis tracked (geen secrets)- APK/AAB bestanden al in
.gitignore - Forgejo repo
eddy/Project_SylDa, API ophttp://localhost:3000/api/v1, 0 releases, 0 tags - Firmware binaries in
android/app/src/main/assets/firmware/ - Root project:
AtomRelay, Gradle 8.14, AGP 8.5.2, Kotlin 2.0.21
Ontwerp
1. Keystore & signing config
| Bestand | Pad | Git |
|---|---|---|
| Keystore | android/keystore/sylda-release.jks |
.gitignore |
| Wachtwoorden | android/signing.properties |
.gitignore |
| Signing block | android/app/build.gradle (aanpassing) |
tracked |
signing.properties inhoud:
KEYSTORE_PATH=keystore/sylda-release.jks
KEYSTORE_PASSWORD=<wachtwoord>
KEY_ALIAS=sylda
KEY_PASSWORD=<wachtwoord>
build.gradle aanpassing: onder android {} block wordt signing block toegevoegd dat signing.properties inleest. Alleen actief als het bestand bestaat → debug builds blijven werken zonder keystore.
Keystore generatie:
keytool -genkey -v -keystore android/keystore/sylda-release.jks \
-alias sylda -keyalg RSA -keysize 2048 -validity 10000
Opslag: kopie van .jks + wachtwoorden naar Obsidian vault. Gitignored kopie blijft in workspace voor Gradle.
2. .gitignore
Toevoegen:
android/keystore/
android/signing.properties
3. Release script (scripts/release.sh)
Flow:
- Controleert dat
signing.propertiesbestaat ./gradlew clean./gradlew bundleRelease assembleRelease- Verzamelt artefacten in
release/v{version}/:app-release.apkapp-release.aabbootloader.bin,partitions.bin,boot_app0.bin,firmware.binchecksums.txt(SHA256 van alle bestanden)
git tag v{version} && git push origin v{version}- Maakt Forgejo release aan via API
- Uploadt alle artefacten als attachments
Forgejo token: opgeslagen in ~/.config/sylda/forgejo-token (niet in repo). Moet handmatig aangemaakt worden in Forgejo web UI (Settings > Applications > Generate Token, scope write:repository).
Versie-detectie: script leest versionName uit build.gradle via grep, géén handmatige argumenten nodig.
4. F-Droid compatibiliteit
- Geen timestamp in APK/AAB build (huidige
BUILD_NUMBERbuildConfigField wordt alleen voor debug gebruikt en zit niet in release builds — check) - Vaste Gradle wrapper versie (8.14)
- Check:
buildConfigFieldmet timestamp staat indefaultConfig, niet in release buildType. Dit is OK voor F-Droid want F-Droid bouwt reproduceerbare builds met eigen tooling.
5. Multi-store vooruitblik
| Platform | Artefact | Extra nodig |
|---|---|---|
| Forgejo release | APK + AAB + firmware | Deze release |
| Google Play | AAB | Google Play developer account |
| Amazon Appstore | APK | Amazon developer account |
| Samsung Galaxy Store | APK | Samsung developer account |
| F-Droid | Source | F-Droid metadata + merge request |
Beslissingen
- Keystore in Obsidian vault (conform AGENTS.md credentials policy)
- Huidig versienummer behouden (1/1.0) — eerste release
- Aanpak A: release script, handmatig (geen CI voor nu)