- 13 tests UI instrumentés (uitest/) : navigation 5 onglets, dialog Nouveautés (épinglage du fix v1.3.2), sections Paramètres, version installée = BuildConfig (anti-bug #46). Déterministes : pm grant shell, markChangelogSeen, assertions via targetContext (FR/EN), zéro dépendance aux données Room. - Signature release conditionnelle : scripts/make-release-keystore.sh (shellcheck+shfmt) + keystore.properties gitignoré ; assembleRelease l'utilise s'il existe, sinon clé debug inchangée. Migration documentée §16.quater. - SettingsScreen découpé : 840 lignes -> orchestrateur 377 + 11 cartes dans ui/screens/settings/ (déplacement pur, commentaires conservés). ChartScreen volontairement entier (garde de source #54). - README.en.md complet + liens FR/EN croisés. Vérifié : 249 tests JVM + 13 UI verts, lint vert, smoke RELEASE émulateur (données réelles seedées : accueil, prochaines doses, suggestion creux, graphiques ESE+TFS superposés, 0 crash logcat — anti-#64).
69 lines
2.6 KiB
Bash
Executable File
69 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Génération du KEYSTORE de signature RELEASE + keystore.properties (v1.9.8).
|
|
#
|
|
# Les deux fichiers sont écrits à la RACINE du dépôt et sont GITIGNORÉS
|
|
# (.gitignore) : ne JAMAIS les committer — le keystore et ses mots de passe
|
|
# sont l'identité de l'app (une fuite = n'importe qui peut publier un APK qui
|
|
# se met à jour par-dessus le tien).
|
|
#
|
|
# Usage :
|
|
# scripts/make-release-keystore.sh
|
|
#
|
|
# Après génération, `./gradlew assembleRelease` signe automatiquement avec ce
|
|
# keystore (app/build.gradle.kts détecte keystore.properties).
|
|
#
|
|
# ⚠️ MIGRATION sur le téléphone (signature différente de la clé debug) :
|
|
# 1. Paramètres → Sauvegarde → Exporter (JSON) — OU auto-backup existant ;
|
|
# 2. désinstaller l'app (debug-signée) ;
|
|
# 3. installer l'APK release signé par le nouveau keystore ;
|
|
# 4. Paramètres → Sauvegarde → Importer.
|
|
# La base Room n'est PAS convertible entre signatures : seul le JSON voyage.
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
KEYSTORE_FILE="release.keystore"
|
|
PROPERTIES_FILE="keystore.properties"
|
|
|
|
if [[ -f "$PROPERTIES_FILE" || -f "$KEYSTORE_FILE" ]]; then
|
|
echo "ERREUR : $PROPERTIES_FILE et/ou $KEYSTORE_FILE existent déjà." >&2
|
|
echo "Supprime-les d'abord si tu veux vraiment les régénérer (une régénération" >&2
|
|
echo "= perte de la capacité de mettre à jour les installs existantes)." >&2
|
|
exit 1
|
|
fi
|
|
|
|
read -r -p "Mot de passe du keystore (>= 6 caractères) : " -s STORE_PASS
|
|
echo
|
|
read -r -p "Confirmation : " -s STORE_PASS_CONFIRM
|
|
echo
|
|
if [[ "$STORE_PASS" != "$STORE_PASS_CONFIRM" || ${#STORE_PASS} -lt 6 ]]; then
|
|
echo "ERREUR : les mots de passe ne correspondent pas ou font moins de 6 caractères." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# keyPassword = storePassword ici (un seul secret à retenir) ; keytool exige >= 6 car.
|
|
keytool -genkeypair \
|
|
-keystore "$KEYSTORE_FILE" \
|
|
-alias hormonetrack \
|
|
-keyalg RSA -keysize 4096 -validity 10000 \
|
|
-storepass "$STORE_PASS" \
|
|
-keypass "$STORE_PASS" \
|
|
-dname "CN=HormoneTrack, OU=HormoneTrack, O=HormoneTrack"
|
|
|
|
chmod 600 "$KEYSTORE_FILE"
|
|
|
|
cat >"$PROPERTIES_FILE" <<EOF
|
|
# Signature release de HormoneTrack — GITIGNORÉ, ne jamais committer.
|
|
storeFile=$KEYSTORE_FILE
|
|
storePassword=$STORE_PASS
|
|
keyAlias=hormonetrack
|
|
keyPassword=$STORE_PASS
|
|
EOF
|
|
chmod 600 "$PROPERTIES_FILE"
|
|
|
|
echo
|
|
echo "OK : $KEYSTORE_FILE + $PROPERTIES_FILE créés (gitignorés)."
|
|
echo "Prochaine build : ./gradlew assembleRelease (signée avec ce keystore)"
|
|
echo "⚠️ Sur le téléphone : exporter le JSON AVANT d'installer (signature changée)"
|
|
echo " → cf docs/DEVELOPPEMENT.md §16.quater pour la migration pas à pas."
|