chore(release): beta packaging — signing, changelog, store metadata, scale test
- Android release signing reads a gitignored key.properties, falling back to debug keys so contributors can still build --release. - CHANGELOG.md (human, newest-first) + Fastlane/F-Droid metadata (en/es) with descriptions derived from docs/intro.md. - docs/release.md: the by-hand build + manual smoke checklist (no CI yet). - inventory_scale_test guards the list query against N+1 at 3000 varieties.
This commit is contained in:
parent
5d2b41a110
commit
4acf227e30
12 changed files with 260 additions and 4 deletions
71
docs/release.md
Normal file
71
docs/release.md
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
# Releasing Tanemaki (manual, no CI yet)
|
||||
|
||||
Block 1 ships as a self-contained Android app (desktop builds also work). There
|
||||
is no release pipeline yet — this page is the by-hand checklist.
|
||||
|
||||
## Versioning
|
||||
|
||||
- Semantic version in [`apps/app_seeds/pubspec.yaml`](../apps/app_seeds/pubspec.yaml)
|
||||
as `MAJOR.MINOR.PATCH+BUILD` (e.g. `0.1.0+1`). Flutter maps `+BUILD` to
|
||||
Android `versionCode` and the rest to `versionName`.
|
||||
- Record every user-visible change in [`../CHANGELOG.md`](../CHANGELOG.md) and
|
||||
add a matching per-locale note under
|
||||
`apps/app_seeds/fastlane/metadata/android/<locale>/changelogs/<versionCode>.txt`.
|
||||
|
||||
## Android signing (one-time)
|
||||
|
||||
Release builds sign with your own keystore when a **gitignored**
|
||||
`apps/app_seeds/android/key.properties` exists; without it they fall back to
|
||||
debug keys (so contributors can still `flutter run --release`).
|
||||
|
||||
1. Create a keystore (keep it and its passwords safe — losing it means you can
|
||||
never update the app under the same identity):
|
||||
```bash
|
||||
keytool -genkey -v -keystore ~/tane-release.jks \
|
||||
-keyalg RSA -keysize 4096 -validity 10000 -alias tane
|
||||
```
|
||||
2. Create `apps/app_seeds/android/key.properties` (never commit it):
|
||||
```properties
|
||||
storeFile=/home/you/tane-release.jks
|
||||
storePassword=…
|
||||
keyAlias=tane
|
||||
keyPassword=…
|
||||
```
|
||||
|
||||
## Build the beta by hand
|
||||
|
||||
```bash
|
||||
cd apps/app_seeds
|
||||
dart run slang # i18n (if strings changed)
|
||||
dart run build_runner build --delete-conflicting-outputs # Drift (if schema changed)
|
||||
flutter test # must be green
|
||||
flutter build apk --release # or: flutter build appbundle --release
|
||||
```
|
||||
|
||||
The APK lands at
|
||||
`apps/app_seeds/build/app/outputs/flutter-apk/app-release.apk`.
|
||||
|
||||
## Store metadata
|
||||
|
||||
F-Droid / Fastlane-style metadata lives under
|
||||
`apps/app_seeds/fastlane/metadata/android/`. Descriptions are derived from
|
||||
[`intro.md`](intro.md); icon and splash are generated by
|
||||
`flutter_launcher_icons` / `flutter_native_splash` (see `pubspec.yaml`).
|
||||
|
||||
## Manual smoke test before shipping
|
||||
|
||||
Automated tests cover behaviour; a release build still gets a human pass on a
|
||||
real device (the one place we allow manual testing — it validates the packaged
|
||||
artifact, it does not replace tests):
|
||||
|
||||
1. Cold start → intro carousel → home.
|
||||
2. Quick-add a seed with a photo; it appears in the list.
|
||||
3. Mark a lot to share; the "I share" filter and printable catalog appear.
|
||||
4. Save a backup, then restore it (and test the recovery sheet + code on a
|
||||
second install).
|
||||
5. Switch language (es / en / pt); check an RTL locale if the device offers one.
|
||||
|
||||
## Not in this release
|
||||
|
||||
CI, Play Store automation, web builds (SQLCipher is unavailable on web), and
|
||||
the whole social layer (Block 2).
|
||||
Loading…
Add table
Add a link
Reference in a new issue