diff --git a/.github/workflows/debug.yml b/.github/workflows/debug.yml index 7da49921..043d22ea 100644 --- a/.github/workflows/debug.yml +++ b/.github/workflows/debug.yml @@ -28,6 +28,30 @@ jobs: run: npm install typescript -g - name: Add Android targets for Rust run: rustup target add armv7-linux-androideabi aarch64-linux-android + - name: Prepare release keystore for Gradle signing + env: + SIGNING_KEY_BASE64: ${{ secrets.PS_BASE_64 }} + SIGNING_KEY_ALIAS: ${{ secrets.PS_RELEASE_KEY_ALIAS }} + SIGNING_KEY_PASSWORD: ${{ secrets.PS_RELEASE_KEY_PASSWORD }} + SIGNING_STORE_PASSWORD: ${{ secrets.PS_RELEASE_STORE_PASSWORD }} + run: | + set -euo pipefail + if [ -z "${SIGNING_KEY_BASE64}" ] || [ -z "${SIGNING_KEY_ALIAS}" ] || [ -z "${SIGNING_STORE_PASSWORD}" ] || [ -z "${SIGNING_KEY_PASSWORD}" ]; then + echo "Signing secrets are missing. Ensure PS_BASE_64, PS_RELEASE_KEY_ALIAS, PS_RELEASE_STORE_PASSWORD, PS_RELEASE_KEY_PASSWORD are set." >&2 + exit 1 + fi + mkdir -p "${HOME}/.android" + printf '%s' "${SIGNING_KEY_BASE64}" | base64 --decode > "${HOME}/.android/purrfectsnap-release.keystore" + if [ ! -s "${HOME}/.android/purrfectsnap-release.keystore" ]; then + echo "Decoded keystore is empty or invalid." >&2 + exit 1 + fi + mkdir -p "${HOME}/.gradle" + { + echo "PS_RELEASE_STORE_PASSWORD=${SIGNING_STORE_PASSWORD}" + echo "PS_RELEASE_KEY_ALIAS=${SIGNING_KEY_ALIAS}" + echo "PS_RELEASE_KEY_PASSWORD=${SIGNING_KEY_PASSWORD}" + } >> "${HOME}/.gradle/gradle.properties" - name: Build run: ./gradlew --configuration-cache assembleArmv8Debug - name: Determine the latest Build Tools version installed @@ -102,6 +126,30 @@ jobs: run: npm install typescript -g - name: Add Android targets for Rust run: rustup target add armv7-linux-androideabi aarch64-linux-android + - name: Prepare release keystore for Gradle signing + env: + SIGNING_KEY_BASE64: ${{ secrets.PS_BASE_64 }} + SIGNING_KEY_ALIAS: ${{ secrets.PS_RELEASE_KEY_ALIAS }} + SIGNING_KEY_PASSWORD: ${{ secrets.PS_RELEASE_KEY_PASSWORD }} + SIGNING_STORE_PASSWORD: ${{ secrets.PS_RELEASE_STORE_PASSWORD }} + run: | + set -euo pipefail + if [ -z "${SIGNING_KEY_BASE64}" ] || [ -z "${SIGNING_KEY_ALIAS}" ] || [ -z "${SIGNING_STORE_PASSWORD}" ] || [ -z "${SIGNING_KEY_PASSWORD}" ]; then + echo "Signing secrets are missing. Ensure PS_BASE_64, PS_RELEASE_KEY_ALIAS, PS_RELEASE_STORE_PASSWORD, PS_RELEASE_KEY_PASSWORD are set." >&2 + exit 1 + fi + mkdir -p "${HOME}/.android" + printf '%s' "${SIGNING_KEY_BASE64}" | base64 --decode > "${HOME}/.android/purrfectsnap-release.keystore" + if [ ! -s "${HOME}/.android/purrfectsnap-release.keystore" ]; then + echo "Decoded keystore is empty or invalid." >&2 + exit 1 + fi + mkdir -p "${HOME}/.gradle" + { + echo "PS_RELEASE_STORE_PASSWORD=${SIGNING_STORE_PASSWORD}" + echo "PS_RELEASE_KEY_ALIAS=${SIGNING_KEY_ALIAS}" + echo "PS_RELEASE_KEY_PASSWORD=${SIGNING_KEY_PASSWORD}" + } >> "${HOME}/.gradle/gradle.properties" - name: Build run: ./gradlew --configuration-cache assembleArmv7Debug - name: Determine the latest Build Tools version installed diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e89343af..0fca529f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -28,6 +28,30 @@ jobs: run: npm install typescript -g - name: Add Android targets for Rust run: rustup target add armv7-linux-androideabi aarch64-linux-android + - name: Prepare release keystore for Gradle signing + env: + SIGNING_KEY_BASE64: ${{ secrets.PS_BASE_64 }} + SIGNING_KEY_ALIAS: ${{ secrets.PS_RELEASE_KEY_ALIAS }} + SIGNING_KEY_PASSWORD: ${{ secrets.PS_RELEASE_KEY_PASSWORD }} + SIGNING_STORE_PASSWORD: ${{ secrets.PS_RELEASE_STORE_PASSWORD }} + run: | + set -euo pipefail + if [ -z "${SIGNING_KEY_BASE64}" ] || [ -z "${SIGNING_KEY_ALIAS}" ] || [ -z "${SIGNING_STORE_PASSWORD}" ] || [ -z "${SIGNING_KEY_PASSWORD}" ]; then + echo "Signing secrets are missing. Ensure PS_BASE_64, PS_RELEASE_KEY_ALIAS, PS_RELEASE_STORE_PASSWORD, PS_RELEASE_KEY_PASSWORD are set." >&2 + exit 1 + fi + mkdir -p "${HOME}/.android" + printf '%s' "${SIGNING_KEY_BASE64}" | base64 --decode > "${HOME}/.android/purrfectsnap-release.keystore" + if [ ! -s "${HOME}/.android/purrfectsnap-release.keystore" ]; then + echo "Decoded keystore is empty or invalid." >&2 + exit 1 + fi + mkdir -p "${HOME}/.gradle" + { + echo "PS_RELEASE_STORE_PASSWORD=${SIGNING_STORE_PASSWORD}" + echo "PS_RELEASE_KEY_ALIAS=${SIGNING_KEY_ALIAS}" + echo "PS_RELEASE_KEY_PASSWORD=${SIGNING_KEY_PASSWORD}" + } >> "${HOME}/.gradle/gradle.properties" - name: Build run: ./gradlew --configuration-cache assembleArmv8Release - name: Determine the latest Build Tools version installed @@ -102,6 +126,30 @@ jobs: run: npm install typescript -g - name: Add Android targets for Rust run: rustup target add armv7-linux-androideabi aarch64-linux-android + - name: Prepare release keystore for Gradle signing + env: + SIGNING_KEY_BASE64: ${{ secrets.PS_BASE_64 }} + SIGNING_KEY_ALIAS: ${{ secrets.PS_RELEASE_KEY_ALIAS }} + SIGNING_KEY_PASSWORD: ${{ secrets.PS_RELEASE_KEY_PASSWORD }} + SIGNING_STORE_PASSWORD: ${{ secrets.PS_RELEASE_STORE_PASSWORD }} + run: | + set -euo pipefail + if [ -z "${SIGNING_KEY_BASE64}" ] || [ -z "${SIGNING_KEY_ALIAS}" ] || [ -z "${SIGNING_STORE_PASSWORD}" ] || [ -z "${SIGNING_KEY_PASSWORD}" ]; then + echo "Signing secrets are missing. Ensure PS_BASE_64, PS_RELEASE_KEY_ALIAS, PS_RELEASE_STORE_PASSWORD, PS_RELEASE_KEY_PASSWORD are set." >&2 + exit 1 + fi + mkdir -p "${HOME}/.android" + printf '%s' "${SIGNING_KEY_BASE64}" | base64 --decode > "${HOME}/.android/purrfectsnap-release.keystore" + if [ ! -s "${HOME}/.android/purrfectsnap-release.keystore" ]; then + echo "Decoded keystore is empty or invalid." >&2 + exit 1 + fi + mkdir -p "${HOME}/.gradle" + { + echo "PS_RELEASE_STORE_PASSWORD=${SIGNING_STORE_PASSWORD}" + echo "PS_RELEASE_KEY_ALIAS=${SIGNING_KEY_ALIAS}" + echo "PS_RELEASE_KEY_PASSWORD=${SIGNING_KEY_PASSWORD}" + } >> "${HOME}/.gradle/gradle.properties" - name: Build run: ./gradlew --configuration-cache assembleArmv7Release - name: Determine the latest Build Tools version installed diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3bccdf17..6cb2d76e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -157,7 +157,12 @@ android { release { isMinifyEnabled = true proguardFiles += file("proguard-rules.pro") - signingConfig = signingConfigs.getByName("release") + val releaseStore = File(System.getProperty("user.home"), ".android/purrfectsnap-release.keystore") + val releaseStorePass = providers.gradleProperty("PS_RELEASE_STORE_PASSWORD").orNull + val releaseKeyAlias = providers.gradleProperty("PS_RELEASE_KEY_ALIAS").orNull + if (releaseStore.exists() && !releaseStorePass.isNullOrBlank() && !releaseKeyAlias.isNullOrBlank()) { + signingConfig = signingConfigs.getByName("release") + } } debug { (properties["debug_flavor"] == null).also { diff --git a/app/src/main/kotlin/me/eternal/purrfectsnap/bridge/BiometricPromptActivity.kt b/app/src/main/kotlin/me/eternal/purrfectsnap/bridge/BiometricPromptActivity.kt index c6f3f46e..158d7a11 100644 --- a/app/src/main/kotlin/me/eternal/purrfectsnap/bridge/BiometricPromptActivity.kt +++ b/app/src/main/kotlin/me/eternal/purrfectsnap/bridge/BiometricPromptActivity.kt @@ -1,3 +1,5 @@ +@file:Suppress("DEPRECATION") + package me.eternal.purrfectsnap.bridge import android.content.Intent