@@ -40,51 +40,58 @@ jobs:
4040 restore-keys : |
4141 gradle-${{ runner.os }}-
4242
43- - name : Decode keystore from secret
43+ - name : Decode keystore (if provided)
4444 run : |
45- mkdir -p android/app
46- echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > android/app/keystore.jks
47- ls -l android/app/keystore.jks
48- shell : bash
49-
50- - name : Build release APK (signed via injected signing props)
45+ if [ -z "${{ secrets.KEYSTORE_BASE64 }}" ]; then
46+ echo "KEYSTORE_BASE64 not set — skipping keystore decode (build will be unsigned)"
47+ exit 0
48+ fi
49+ # create runner temp directory path and decode keystore there
50+ echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > "$RUNNER_TEMP/keystore.jks"
51+ echo "Keystore decoded to $RUNNER_TEMP/keystore.jks"
52+ - name : Build release APK and AAB
5153 env :
52- KEYSTORE_PASSWORD : ${{ secrets.KEYSTORE_PASSWORD }}
53- KEY_ALIAS : ${{ secrets.KEY_ALIAS }}
54- KEY_PASSWORD : ${{ secrets.KEY_PASSWORD }}
54+ ANDROID_KEYSTORE_PASSWORD : ${{ secrets.KEYSTORE_PASSWORD }}
55+ ANDROID_KEY_ALIAS : ${{ secrets.KEY_ALIAS }}
56+ ANDROID_KEY_PASSWORD : ${{ secrets.KEY_PASSWORD }}
5557 run : |
56- # Adjust path if your module is not "app" or if project root differs (React Native android/ vs native)
57- ./gradlew assembleRelease \
58- -Pandroid.injected.signing.store.file=android/app/keystore.jks \
59- -Pandroid.injected.signing.store.password="$KEYSTORE_PASSWORD" \
60- -Pandroid.injected.signing.key.alias="$KEY_ALIAS" \
61- -Pandroid.injected.signing.key.password="$KEY_PASSWORD"
62- shell : bash
63-
64- - name : Gather release APK(s)
58+ # If keystore was decoded, RUNNER_TEMP/keystore.jks exists. Use injected signing props so no keystore info is committed.
59+ STORE_FILE="$RUNNER_TEMP/keystore.jks"
60+ STORE_ARG=""
61+ if [ -f "$STORE_FILE" ]; then
62+ STORE_ARG="-Pandroid.injected.signing.store.file=$STORE_FILE -Pandroid.injected.signing.store.password=$ANDROID_KEYSTORE_PASSWORD -Pandroid.injected.signing.key.alias=$ANDROID_KEY_ALIAS -Pandroid.injected.signing.key.password=$ANDROID_KEY_PASSWORD"
63+ echo "Signing with keystore at $STORE_FILE"
64+ else
65+ echo "No keystore found at $STORE_FILE; building unsigned artifacts"
66+ fi
67+ # Force Gradle to use the setup-java JDK on the runner in case project has local overrides
68+ ./gradlew assembleRelease bundleRelease -Dorg.gradle.java.home="$JAVA_HOME" $STORE_ARG
69+ - name : Remove keystore file if present
70+ if : always()
6571 run : |
66- mkdir -p $SIGNED_APK_DIR
67- APK_PATH=$(find . -type f -path "*/app/build/outputs/apk/release/*release*.apk " | head -n 1)
68- if [ -z "$APK_PATH" ]; then
69- echo "ERROR: release APK not found"
70- exit 1
72+ if [ -f "$RUNNER_TEMP/keystore.jks" ]; then
73+ shred -u "$RUNNER_TEMP/keystore.jks " || rm -f "$RUNNER_TEMP/keystore.jks"
74+ echo "Keystore removed"
75+ else
76+ echo "No keystore to remove"
7177 fi
72- BASENAME="app-release-${GITHUB_SHA::7}.apk"
73- cp "$APK_PATH" "$SIGNED_APK_DIR/$BASENAME"
74- echo "Signed APK copied to $SIGNED_APK_DIR/$BASENAME"
75- shell : bash
7678
77- - name : Remove keystore file securely
78- run : |
79- shred -u android/app/keystore.jks || rm -f android/app/keystore.jks
80- shell : bash
79+ - name : Upload APK artifact
80+ uses : actions/upload-artifact@v4
81+ with :
82+ name : simple-data-entry-apk
83+ path : app/build/outputs/apk/release/*.apk
84+
85+ - name : Upload AAB artifact
86+ uses : actions/upload-artifact@v4
87+ with :
88+ name : simple-data-entry-aab
89+ path : app/build/outputs/bundle/release/*.aab
8190
82- - name : Create GitHub Release and upload APK(s)
83- uses : ncipollo/release-action@v1
91+ - name : Create GitHub Release
92+ if : ${{ startsWith(github.ref, 'refs/tags/') }}
93+ uses : softprops/action-gh-release@v2
8494 with :
85- tag : ${{ env.RELEASE_TAG }}
86- name : Signed APK - ${{ github.sha }}
87- body : |
88- Signed APK built for commit ${{ github.sha }} on branch ${{ github.ref_name }}.
89- This release was generated automatically by the CI workflow.
90- files : ${{ env.SIGNED_APK_DIR }}/*.apk
95+ files : |
96+ app/build/outputs/apk/release/*.apk
97+ app/build/outputs/bundle/release/*.aab
0 commit comments