diff --git a/scripts/build-android.sh b/scripts/build-android.sh index 8d1e001..5c9d2df 100755 --- a/scripts/build-android.sh +++ b/scripts/build-android.sh @@ -44,6 +44,9 @@ bun run build # Step 2: Build Android APK if [ "$BUILD_TYPE" = "release" ]; then + # Configure release signing from .env (single source of truth). Must run + # after sync-android-sources.sh, since gen/android is (re)generated there. + ./scripts/write-keystore-properties.sh echo "📦 Building release APK..." bun run tauri android build --apk true else diff --git a/scripts/write-keystore-properties.sh b/scripts/write-keystore-properties.sh new file mode 100755 index 0000000..0152595 --- /dev/null +++ b/scripts/write-keystore-properties.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# Regenerate src-tauri/gen/android/keystore.properties from the gitignored .env. +# +# .env is the single source of truth for local release signing. `tauri android +# init` wipes/regenerates gen/android, so keystore.properties must be rewritten +# from .env before every release build (this is the local mirror of what the CI +# workflow does from Gitea secrets). +# +# Required .env vars: +# ANDROID_KEY_ALIAS, ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_PASSWORD, +# ANDROID_KEYSTORE_FILE (absolute path to the .jks) + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" +ENV_FILE="$PROJECT_ROOT/.env" +PROPS="$PROJECT_ROOT/src-tauri/gen/android/keystore.properties" + +if [ ! -f "$ENV_FILE" ]; then + echo "❌ $ENV_FILE not found — cannot configure release signing." >&2 + echo " Create it with ANDROID_KEY_ALIAS / ANDROID_KEYSTORE_PASSWORD /" >&2 + echo " ANDROID_KEY_PASSWORD / ANDROID_KEYSTORE_FILE." >&2 + exit 1 +fi + +# Load .env without leaking it into the caller's environment beyond what we need. +set -a +# shellcheck disable=SC1090 +. "$ENV_FILE" +set +a + +: "${ANDROID_KEY_ALIAS:?ANDROID_KEY_ALIAS missing from .env}" +: "${ANDROID_KEYSTORE_PASSWORD:?ANDROID_KEYSTORE_PASSWORD missing from .env}" +: "${ANDROID_KEY_PASSWORD:?ANDROID_KEY_PASSWORD missing from .env}" +: "${ANDROID_KEYSTORE_FILE:?ANDROID_KEYSTORE_FILE missing from .env}" + +if [ ! -f "$ANDROID_KEYSTORE_FILE" ]; then + echo "❌ Keystore not found at ANDROID_KEYSTORE_FILE=$ANDROID_KEYSTORE_FILE" >&2 + exit 1 +fi + +mkdir -p "$(dirname "$PROPS")" +umask 077 +cat > "$PROPS" <