Also un-ignores docs/ directory so project documentation (specs, plans) is tracked in git. Individual research files remain gitignored.
99 lines
3.9 KiB
Markdown
99 lines
3.9 KiB
Markdown
# 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.gradle` via extern `signing.properties`
|
|
- Release script `scripts/release.sh` dat 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.properties` is tracked (geen secrets)
|
|
- APK/AAB bestanden al in `.gitignore`
|
|
- Forgejo repo `eddy/Project_SylDa`, API op `http://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:
|
|
```properties
|
|
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:**
|
|
```bash
|
|
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:
|
|
1. Controleert dat `signing.properties` bestaat
|
|
2. `./gradlew clean`
|
|
3. `./gradlew bundleRelease assembleRelease`
|
|
4. Verzamelt artefacten in `release/v{version}/`:
|
|
- `app-release.apk`
|
|
- `app-release.aab`
|
|
- `bootloader.bin`, `partitions.bin`, `boot_app0.bin`, `firmware.bin`
|
|
- `checksums.txt` (SHA256 van alle bestanden)
|
|
5. `git tag v{version} && git push origin v{version}`
|
|
6. Maakt Forgejo release aan via API
|
|
7. 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_NUMBER` buildConfigField wordt alleen voor debug gebruikt en zit niet in release builds — check)
|
|
- Vaste Gradle wrapper versie (8.14)
|
|
- Check: `buildConfigField` met timestamp staat in `defaultConfig`, 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)
|