BuildAndroidRelease in ci/main.go intentionally builds the AAB without setting up the keystore — the unsigned AAB is later stamped with StampAndroidVersionCode and re-signed by SignAndroidBundle via jarsigner.
The old signingConfigs.create("release") block in android/app/build.gradle.kts called error("ANDROID_KEYSTORE_PATH is not set") at Gradle configuration time, which fired even when the keystore wasn't needed for the build step.
Fix: guard the signingConfigs block and the signingConfig assignment in the release build type behind a null-check on ANDROID_KEYSTORE_PATH. When the env var is absent (unsigned build path), Gradle skips the signing config entirely; when it is present (e.g. BuildAndroidApk via setupKeystore), the config is created and applied as before.
Test plan
Trigger deploy.yml via workflow_dispatch and verify the Build & Deploy to Play Store job no longer fails at step 4 with "ANDROID_KEYSTORE_PATH is not set"
Verify BuildAndroidApk (which calls setupKeystore) still produces a correctly signed APK
## Summary
- `BuildAndroidRelease` in `ci/main.go` intentionally builds the AAB without setting up the keystore — the unsigned AAB is later stamped with `StampAndroidVersionCode` and re-signed by `SignAndroidBundle` via jarsigner.
- The old `signingConfigs.create("release")` block in `android/app/build.gradle.kts` called `error("ANDROID_KEYSTORE_PATH is not set")` at Gradle _configuration_ time, which fired even when the keystore wasn't needed for the build step.
- Fix: guard the `signingConfigs` block and the `signingConfig` assignment in the release build type behind a null-check on `ANDROID_KEYSTORE_PATH`. When the env var is absent (unsigned build path), Gradle skips the signing config entirely; when it is present (e.g. `BuildAndroidApk` via `setupKeystore`), the config is created and applied as before.
## Test plan
- Trigger `deploy.yml` via `workflow_dispatch` and verify the `Build & Deploy to Play Store` job no longer fails at step 4 with "ANDROID_KEYSTORE_PATH is not set"
- Verify `BuildAndroidApk` (which calls `setupKeystore`) still produces a correctly signed APK
Closes #439
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
BuildAndroidReleaseinci/main.gointentionally builds the AAB without setting up the keystore — the unsigned AAB is later stamped withStampAndroidVersionCodeand re-signed bySignAndroidBundlevia jarsigner.signingConfigs.create("release")block inandroid/app/build.gradle.ktscallederror("ANDROID_KEYSTORE_PATH is not set")at Gradle configuration time, which fired even when the keystore wasn't needed for the build step.signingConfigsblock and thesigningConfigassignment in the release build type behind a null-check onANDROID_KEYSTORE_PATH. When the env var is absent (unsigned build path), Gradle skips the signing config entirely; when it is present (e.g.BuildAndroidApkviasetupKeystore), the config is created and applied as before.Test plan
deploy.ymlviaworkflow_dispatchand verify theBuild & Deploy to Play Storejob no longer fails at step 4 with "ANDROID_KEYSTORE_PATH is not set"BuildAndroidApk(which callssetupKeystore) still produces a correctly signed APKCloses #439
🤖 Generated with Claude Code