feat(release): automate store publishing (fastlane supply + GitLab CI) and F-Droid recipe
- fastlane: Appfile/Fastfile/Gemfile with deploy_play lane (AAB -> Play internal track) - CI: tag-gated build:android (signed AAB/APK from CI secrets) + deploy:play jobs - F-Droid: fdroiddata build recipe at docs/fdroid/org.comunes.tane.yml - Play compliance: Data Safety / content-rating answer sheet (docs/legal/internal) - docs/release.md: automated tag-triggered flow, dedicated tane-upload keystore - pubspec: description now mentions the market, not just the inventory
This commit is contained in:
parent
dc0d18562f
commit
fd6b9d5f0d
9 changed files with 361 additions and 28 deletions
84
docs/legal/internal/play-compliance.md
Normal file
84
docs/legal/internal/play-compliance.md
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
# Google Play compliance answer sheet (internal)
|
||||
|
||||
Draft answers for the Play Console questionnaires. Transcribe into the console;
|
||||
this file is the single source of truth so the answers stay consistent across
|
||||
releases. Grounded in [`../privacy-policy.md`](../privacy-policy.md) and
|
||||
[`../../design/security-privacy.md`](../../design/security-privacy.md).
|
||||
|
||||
Package: `org.comunes.tane` · Publisher: Asociación Comunes · Contact: info@comunes.org
|
||||
Privacy policy URL: https://tane.comunes.org/legal/privacy
|
||||
|
||||
---
|
||||
|
||||
## 1. Data Safety form
|
||||
|
||||
**Core principle:** Tane has **no accounts and no Tane server**. Anything a user
|
||||
records stays on-device, encrypted (SQLCipher). Data only leaves the device by an
|
||||
explicit user action (publishing an offer, filling a public profile, sending a
|
||||
message, or syncing to the user's own second device), and then it travels through
|
||||
community-run relays, not through us. So under Play's definitions we *collect*
|
||||
nothing for ourselves; we *share* only the specific things the user chooses to
|
||||
publish, all for **App functionality** — never for analytics, ads, or sale.
|
||||
|
||||
### Does your app collect or share any user data? → **Yes**
|
||||
(Because user-initiated publishing sends data to third-party relays.)
|
||||
|
||||
### Data types — declare as **Shared**, purpose **App functionality**, **optional** (user-initiated)
|
||||
|
||||
| Play data type | Declare? | Notes |
|
||||
|---|---|---|
|
||||
| Location → Approximate location | Shared | Only a coarse ~2–80 km area, only if the user sets a sharing zone for an offer. Never precise. Never collected for us. |
|
||||
| Personal info → Name | Shared | Only the display name the user chooses to put in a public profile. Optional. |
|
||||
| Personal info → Other info (bio) | Shared | Optional public profile bio. |
|
||||
| Photos and videos → Photos | Shared | Only photos the user attaches to a public offer or profile. |
|
||||
| Messages → Other in-app messages | Shared | Direct messages, **end-to-end encrypted**; relays carry only encrypted envelopes. Declare as shared for transparency; mark encrypted in transit. |
|
||||
| App activity / App info & performance | No | No analytics, no crash reporting, no diagnostics sent anywhere. |
|
||||
| Financial, Health, Contacts (device), Calendar, Browsing history, Files, Device IDs | No | Not accessed or transmitted. |
|
||||
|
||||
Note on "Collected vs Shared": Play defines *collection* as leaving the device to
|
||||
the developer. We receive nothing, so nothing is "Collected by us." The items above
|
||||
are *Shared* (to third-party relays / other users). If the console forces a
|
||||
"Collected" tick for a shared type, pair it with the encryption + optional answers below.
|
||||
|
||||
### Security practices
|
||||
- **Is all user data encrypted in transit?** → **Yes.** Relay connections use TLS;
|
||||
direct messages are additionally end-to-end encrypted; device-to-device sync is encrypted.
|
||||
- **Data stored on device** is encrypted at rest (SQLCipher) — mention in the listing, though Play's form focuses on transit.
|
||||
- **Can users request data deletion?** → **Yes.** Everything local can be deleted in-app
|
||||
instantly; published offers can be withdrawn, which asks relays to delete. Relays we
|
||||
don't operate may retain copies (stated honestly in the privacy policy).
|
||||
- **Data is NOT sold.** **Data is NOT used for advertising or marketing.**
|
||||
- **Independent security review?** → No (self-declared; source is public/AGPL and auditable).
|
||||
|
||||
---
|
||||
|
||||
## 2. Content rating (IARC questionnaire)
|
||||
|
||||
- Category: **Utility / Reference / Productivity** (not a game).
|
||||
- Violence, sexual content, gambling, drugs: **None.**
|
||||
- **User-generated content / communication:** **Yes** — the market has public offers,
|
||||
user profiles, and direct messaging. Declare in-app UGC and user-to-user communication.
|
||||
- Expected outcome: **Everyone / PEGI 3–style**, with the UGC/communication flags set.
|
||||
|
||||
## 3. Target audience & content
|
||||
|
||||
- Target age: **not directed at children.** Age band spans adults; the phrase "10–99"
|
||||
is a usability aim (simple enough for a 10-year-old, legible for a 99-year-old), **not**
|
||||
a claim of child audience. In the console pick the **adult / 18+** or "not for children"
|
||||
target so Families policy does not apply to the market/messaging features.
|
||||
- The seed **inventory** alone is harmless for any age, but the **market and messaging**
|
||||
are social features and are declared not directed at children (see privacy policy §8).
|
||||
|
||||
## 4. UGC policy (Play's user-generated content requirements)
|
||||
|
||||
The market ships the mitigations Play looks for; keep them working:
|
||||
- **Community rules acceptance** gate on entering the market.
|
||||
- **Report** content/users and **block** users, in-app.
|
||||
- A stated content policy: [`../community-rules.md`](../community-rules.md).
|
||||
|
||||
## 5. Ads & privacy
|
||||
|
||||
- **Contains ads?** → **No.**
|
||||
- **Data deletion URL / contact:** info@comunes.org (and in-app deletion).
|
||||
- **Government app?** → No. **Financial features?** → No (optional Ğ1 price is a plain
|
||||
number shown in a listing, no in-app payments, no Play Billing).
|
||||
Loading…
Add table
Add a link
Reference in a new issue