# 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).
