diff --git a/docker/README.md b/docker/README.md index 714d633..4e4c77f 100644 --- a/docker/README.md +++ b/docker/README.md @@ -62,7 +62,16 @@ keytool -genkey -v \ > `docker/biteplan.jks` è in `.gitignore` e non verrà mai committato. > Conservalo in un posto sicuro: senza di esso non puoi pubblicare aggiornamenti. -**2. Esegui la build release** +**2. Esporta la password del keystore** + +```bash +export BITEPLAN_KEYSTORE_PASS=tuapassword +``` + +La variabile è richiesta ad ogni sessione di terminale. Per non doverla riscrivere ogni volta, +aggiungila a `~/.bashrc` o `~/.zshrc`. + +**3. Esegui la build release** ```bash bash docker/build/build.sh --release @@ -72,6 +81,10 @@ bash docker/build/build.sh --release Il keystore viene montato nel container come volume read-only e non viene mai copiato nell'immagine Docker. +> Se la build fallisce con `Output file '…/biteplan-aligned.apk' exists`, esegui +> `rm dist/biteplan-aligned.apk` e rilancia. Lo script rimuove il file automaticamente +> nelle versioni aggiornate, ma eventuali run interrotte possono lasciarlo indietro. + > Prima esecuzione: scarica Flutter SDK + Android SDK (~1-2 GB), richiede 10-15 minuti. ### Installazione sul dispositivo diff --git a/docker/build/build.sh b/docker/build/build.sh index 1c34e9b..e4b4020 100755 --- a/docker/build/build.sh +++ b/docker/build/build.sh @@ -29,6 +29,12 @@ fi mkdir -p "${PROJECT_ROOT}/dist" if [[ "$RELEASE" == "true" ]]; then + if [[ -z "${BITEPLAN_KEYSTORE_PASS}" ]]; then + echo "ERRORE: variabile BITEPLAN_KEYSTORE_PASS non impostata" + echo "Usa: export BITEPLAN_KEYSTORE_PASS=tuapassword" + exit 1 + fi + KEYSTORE="${SCRIPT_DIR}/../biteplan.jks" if [[ ! -f "$KEYSTORE" ]]; then echo "ERRORE: keystore non trovato in docker/biteplan.jks" @@ -40,11 +46,12 @@ if [[ "$RELEASE" == "true" ]]; then echo "→ Building release APK..." docker run --rm \ -v "${PROJECT_ROOT}:/workspace" \ - -v "${HOME}/.gradle:/root/.gradle" \ + -v "gradle-cache:/root/.gradle" \ biteplan-build \ - bash -c "cd /workspace && flutter pub get && flutter pub run flutter_launcher_icons && flutter build apk --release" + bash -c "cd /workspace && flutter pub get --enforce-lockfile && flutter pub run flutter_launcher_icons && flutter build apk --release" echo "→ Zipalign..." + rm -f "${PROJECT_ROOT}/dist/biteplan-aligned.apk" docker run --rm \ -v "${PROJECT_ROOT}:/workspace" \ biteplan-build \ @@ -56,9 +63,11 @@ if [[ "$RELEASE" == "true" ]]; then docker run --rm \ -v "${PROJECT_ROOT}:/workspace" \ -v "$(realpath "${KEYSTORE%/*}"):/keystore:ro" \ + -e BITEPLAN_KEYSTORE_PASS \ biteplan-build \ bash -c "apksigner sign \ --ks /keystore/biteplan.jks \ + --ks-pass \"pass:\${BITEPLAN_KEYSTORE_PASS}\" \ --out /workspace/dist/biteplan-release.apk \ /workspace/dist/biteplan-aligned.apk && \ rm -f /workspace/dist/biteplan-aligned.apk && \ @@ -71,9 +80,9 @@ else echo "→ Building debug APK..." docker run --rm \ -v "${PROJECT_ROOT}:/workspace" \ - -v "${HOME}/.gradle:/root/.gradle" \ + -v "gradle-cache:/root/.gradle" \ biteplan-build \ - bash -c "cd /workspace && flutter pub get && flutter pub run flutter_launcher_icons && flutter build apk --debug" + bash -c "cd /workspace && flutter pub get --enforce-lockfile && flutter pub run flutter_launcher_icons && flutter build apk --debug" cp "${PROJECT_ROOT}/build/app/outputs/flutter-apk/app-debug.apk" \ "${PROJECT_ROOT}/dist/biteplan-debug.apk"