From ed4422ef933822b5805e0624d22cc4bf3200d008 Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Sun, 12 Jul 2026 19:29:40 +0200 Subject: [PATCH] refactor: appiattisce docker/build/ in docker/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Con la rimozione di docker/dev/ non serve più distinguere due container: Dockerfile e build.sh salgono di un livello, con i path relativi (PROJECT_ROOT, keystore) aggiornati di conseguenza. Co-Authored-By: Claude Sonnet 5 --- docker/Dockerfile | 36 ++++++++++++++++++++++ docker/build.sh | 78 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 docker/Dockerfile create mode 100755 docker/build.sh diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..88b7c33 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,36 @@ +FROM ubuntu:22.04 + +ARG FLUTTER_VERSION=3.41.9 +ARG ANDROID_SDK_BUILD=11076708 + +ENV DEBIAN_FRONTEND=noninteractive \ + FLUTTER_HOME=/opt/flutter \ + ANDROID_SDK_ROOT=/opt/android-sdk \ + JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 \ + PATH="/opt/flutter/bin:/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:/opt/android-sdk/build-tools/34.0.0:${PATH}" + +RUN apt-get update && apt-get install -y --no-install-recommends \ + curl wget git unzip xz-utils ca-certificates \ + openjdk-17-jdk \ + && rm -rf /var/lib/apt/lists/* + +RUN git clone --depth 1 --branch ${FLUTTER_VERSION} \ + https://github.com/flutter/flutter.git ${FLUTTER_HOME} && \ + flutter config --no-analytics && \ + flutter precache --android + +RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools && \ + wget -q "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_BUILD}_latest.zip" \ + -O /tmp/cmdtools.zip && \ + unzip -q /tmp/cmdtools.zip -d ${ANDROID_SDK_ROOT}/cmdline-tools && \ + mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools \ + ${ANDROID_SDK_ROOT}/cmdline-tools/latest && \ + rm /tmp/cmdtools.zip + +RUN yes | sdkmanager --licenses && \ + sdkmanager \ + "platform-tools" \ + "platforms;android-34" \ + "build-tools;34.0.0" + +WORKDIR /workspace diff --git a/docker/build.sh b/docker/build.sh new file mode 100755 index 0000000..35d2e16 --- /dev/null +++ b/docker/build.sh @@ -0,0 +1,78 @@ +#!/bin/bash +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" +RELEASE=false + +for arg in "$@"; do + [[ "$arg" == "--release" ]] && RELEASE=true +done + +echo "→ Build immagine biteplan-build..." +docker build -t biteplan-build "${SCRIPT_DIR}" + +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" + echo "Generalo con:" + echo " keytool -genkey -v -keystore docker/biteplan.jks -alias biteplan -keyalg RSA -keysize 2048 -validity 10000" + exit 1 + fi + + echo "→ Building release APK..." + docker run --rm \ + -v "${PROJECT_ROOT}:/workspace" \ + -v "gradle-cache:/root/.gradle" \ + biteplan-build \ + 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 \ + bash -c "zipalign -v -p 4 \ + /workspace/build/app/outputs/flutter-apk/app-release.apk \ + /workspace/dist/biteplan-aligned.apk" + + echo "→ Firma APK..." + 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 && \ + apksigner verify --verbose /workspace/dist/biteplan-release.apk" + + echo "" + echo "✓ Release APK: dist/biteplan-release.apk" + +else + echo "→ Building debug APK..." + docker run --rm \ + -v "${PROJECT_ROOT}:/workspace" \ + -v "gradle-cache:/root/.gradle" \ + biteplan-build \ + 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" + + echo "" + echo "✓ Debug APK: dist/biteplan-debug.apk" +fi