Files
IdP/tauri_app/docker/patch-android-signing.sh
2026-07-02 16:40:04 +03:00

86 lines
3.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Подключает release-подпись APK через keystore.properties + Gradle script.
set -euo pipefail
ANDROID_GEN="${1:-/workspace/tauri_app/src-tauri/gen/android}"
SECRETS_DIR="${ANDROID_SECRETS_DIR:-/workspace/tauri_app/.secrets}"
KEYSTORE_FILE="${ANDROID_KEYSTORE_FILE:-${SECRETS_DIR}/lendry-id-release.keystore}"
APP_GRADLE="${ANDROID_GEN}/app/build.gradle.kts"
KEYSTORE_PROPS="${ANDROID_GEN}/keystore.properties"
SIGNING_SCRIPT="${ANDROID_GEN}/app/release-signing.gradle.kts"
PROPS_TEMPLATE="${SECRETS_DIR}/keystore.properties.template"
if [[ ! -d "${ANDROID_GEN}" ]]; then
echo "Android project not found: ${ANDROID_GEN}" >&2
exit 1
fi
if [[ ! -f "${KEYSTORE_FILE}" ]]; then
echo "Keystore не найден: ${KEYSTORE_FILE}. Запустите ensure-android-keystore.sh" >&2
exit 1
fi
if [[ -f "${PROPS_TEMPLATE}" ]]; then
cp "${PROPS_TEMPLATE}" "${KEYSTORE_PROPS}"
else
echo "keystore.properties.template не найден в ${SECRETS_DIR}" >&2
exit 1
fi
# Абсолютный путь надёжнее относительного при Gradle rootProject.file().
if grep -q '^storeFile=' "${KEYSTORE_PROPS}"; then
sed -i "s|^storeFile=.*|storeFile=${KEYSTORE_FILE}|" "${KEYSTORE_PROPS}"
else
printf '\nstoreFile=%s\n' "${KEYSTORE_FILE}" >> "${KEYSTORE_PROPS}"
fi
STORE_PASSWORD="$(grep -E '^storePassword=' "${KEYSTORE_PROPS}" | head -n1 | cut -d= -f2- || true)"
KEY_ALIAS_PROP="$(grep -E '^keyAlias=' "${KEYSTORE_PROPS}" | head -n1 | cut -d= -f2- || true)"
KEY_ALIAS_PROP="${KEY_ALIAS_PROP:-lendry-id}"
if [[ -z "${STORE_PASSWORD}" ]]; then
echo "storePassword не найден в ${KEYSTORE_PROPS}" >&2
exit 1
fi
if ! keytool -list -keystore "${KEYSTORE_FILE}" -storepass "${STORE_PASSWORD}" -alias "${KEY_ALIAS_PROP}" >/dev/null 2>&1; then
echo "Keystore не читается с паролями из ${KEYSTORE_PROPS}." >&2
echo "Удалите tauri_app/.secrets и пересоберите APK, либо задайте ANDROID_KEYSTORE_FORCE_REGENERATE=1." >&2
exit 1
fi
chmod 600 "${KEYSTORE_PROPS}" || true
cat > "${SIGNING_SCRIPT}" <<'EOF'
import com.android.build.api.dsl.ApplicationExtension
import java.io.File
import java.util.Properties
val keystoreProperties = Properties().apply {
rootProject.file("keystore.properties").inputStream().use { load(it) }
}
extensions.configure<ApplicationExtension>("android") {
signingConfigs {
create("release") {
val storePasswordValue = keystoreProperties.getProperty("storePassword")
keyAlias = keystoreProperties.getProperty("keyAlias")
keyPassword = keystoreProperties.getProperty("keyPassword")
storeFile = File(keystoreProperties.getProperty("storeFile"))
storePassword = storePasswordValue
}
}
buildTypes {
getByName("release") {
signingConfig = signingConfigs.getByName("release")
}
}
}
EOF
if ! grep -q 'release-signing.gradle.kts' "${APP_GRADLE}"; then
printf '\napply(from = "release-signing.gradle.kts")\n' >> "${APP_GRADLE}"
fi
echo "==> Android release signing patched (${KEYSTORE_PROPS})"