From 28df7ebe117c9e89cd406fa4f86c59df01260e21 Mon Sep 17 00:00:00 2001 From: alexpolo1 Date: Sat, 28 Feb 2026 23:36:10 +0100 Subject: [PATCH] Commit keystore to repo for consistent APK signing across all CI builds Simplifies signing: the keystore is stored in the repo so every release workflow run uses the same certificate. This fixes "App not installed" when updating via GitHub releases. Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/release.yml | 14 +------------- .gitignore | 1 - app/build.gradle.kts | 8 +------- pixel10.keystore | Bin 0 -> 2730 bytes 4 files changed, 2 insertions(+), 21 deletions(-) create mode 100644 pixel10.keystore diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f820537..8b372f1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,19 +30,7 @@ jobs: key: gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: gradle- - - name: Decode signing keystore - env: - KEYSTORE_B64: ${{ secrets.KEYSTORE_BASE64 }} - run: | - printf '%s' "$KEYSTORE_B64" | base64 --ignore-garbage -d > "$RUNNER_TEMP/pixel10.keystore" - echo "Keystore decoded: $(wc -c < $RUNNER_TEMP/pixel10.keystore) bytes" - - - name: Build signed debug APK - env: - KEYSTORE_PATH: ${{ runner.temp }}/pixel10.keystore - KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} - KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + - name: Build signed APK run: ./gradlew assembleDebug --no-daemon - name: Rename APK with version tag diff --git a/.gitignore b/.gitignore index 6493a8f..dc81b83 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,3 @@ local.properties *.bin *.task *.tflite -pixel10.keystore diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6cfc920..cbd6085 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -16,16 +16,10 @@ android { } val keystoreFile = rootProject.file("pixel10.keystore") - val keystoreEnv = System.getenv("KEYSTORE_PATH") signingConfigs { create("release") { - if (keystoreEnv != null) { - storeFile = file(keystoreEnv) - storePassword = System.getenv("KEYSTORE_PASSWORD") - keyAlias = System.getenv("KEY_ALIAS") - keyPassword = System.getenv("KEY_PASSWORD") - } else if (keystoreFile.exists()) { + if (keystoreFile.exists()) { storeFile = keystoreFile storePassword = "pixel10ai" keyAlias = "pixel10" diff --git a/pixel10.keystore b/pixel10.keystore new file mode 100644 index 0000000000000000000000000000000000000000..44aea1bbcda90793147ba4b7e00d7ab7f076121c GIT binary patch literal 2730 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 N^GV|=TiKt;`8N;k+|&R7 literal 0 HcmV?d00001