tane/docs/release.md

3.2 KiB

Releasing Tane (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 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 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):
    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):
    storeFile=/home/you/tane-release.jks
    storePassword=
    keyAlias=tane
    keyPassword=
    

Build the beta by hand

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; icon and splash are generated by flutter_launcher_icons / flutter_native_splash (see pubspec.yaml).

  • The privacy policy must be live at https://tane.comunes.org/legal/privacy (sources in legal/) — Play Console requires the URL.
  • Fill the Data Safety form and the UGC/content-rating questionnaires from the answer sheet in legal/internal/play-compliance.md.
  • The in-app requirements (community-rules acceptance on market entry, report and block) ship with the app; keep them working — Play's UGC policy review looks for them.

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