1- name : Android CI & Release Build
1+ name : Android CI Workflow
22
33on :
44 push :
5- branches : [ "main", "master" ]
5+ branches :
6+ - main
7+ - master
68 pull_request :
7- branches : [ "main", "master" ]
8- workflow_dispatch :
9+ branches :
10+ - main
11+ - master
12+
13+ permissions :
14+ contents : read
915
1016jobs :
1117 build :
@@ -18,71 +24,61 @@ jobs:
1824 - name : Set up JDK 17
1925 uses : actions/setup-java@v4
2026 with :
27+ distribution : temurin
2128 java-version : ' 17'
22- distribution : ' temurin '
29+ cache : gradle
2330
2431 - name : Setup Gradle
25- uses : gradle/actions/setup-gradle@v3
32+ uses : gradle/actions/setup-gradle@v4
33+ with :
34+ validate-wrappers : false
2635
27- - name : Create .env File
28- env :
29- GEMINI_API_KEY : ${{ secrets.GEMINI_API_KEY }}
36+ - name : Make Gradle Wrapper Executable & Ensure Valid Wrapper
3037 run : |
31- touch .env
32- if [ -n "$GEMINI_API_KEY" ]; then
33- echo "GEMINI_API_KEY=$GEMINI_API_KEY" >> .env
34- else
35- echo "GEMINI_API_KEY=placeholder_key" >> .env
38+ if ! java -jar gradle/wrapper/gradle-wrapper.jar --version > /dev/null 2>&1; then
39+ echo "Gradle wrapper JAR is corrupted or missing. Regenerating..."
40+ gradle wrapper --gradle-version 9.3.1
3641 fi
42+ chmod +x ./gradlew
3743
38- - name : Decode Keystore
44+ - name : Ensure Debug Keystore
45+ run : |
46+ if [ ! -f "debug.keystore" ]; then
47+ keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=Android Debug,O=Android,C=US"
48+ fi
49+
50+ - name : Decode Release Keystore
51+ shell : bash
3952 env :
4053 KEYSTORE_BASE64 : ${{ secrets.KEYSTORE_BASE64 }}
4154 run : |
4255 if [ -n "$KEYSTORE_BASE64" ]; then
43- echo "$KEYSTORE_BASE64" | base64 -d > release. keystore
56+ echo "$KEYSTORE_BASE64" | base64 --decode > app/ release- keystore.jks
4457 fi
4558
46- - name : Grant Execute Permissions
47- run : |
48- if [ -f "./gradlew" ]; then
49- chmod +x gradlew
50- fi
59+ - name : Build Debug APK
60+ run : ./gradlew assembleDebug --stacktrace
5161
52- - name : Build Debug & Release APKs
62+ - name : Build Release APK
5363 env :
54- KEYSTORE_PATH : ${{ github.workspace }} /release. keystore
55- STORE_PASSWORD : ${{ secrets.STORE_PASSWORD }}
64+ KEYSTORE_PATH : app /release- keystore.jks
65+ KEYSTORE_PASSWORD : ${{ secrets.KEYSTORE_PASSWORD }}
5666 KEY_ALIAS : ${{ secrets.KEY_ALIAS }}
5767 KEY_PASSWORD : ${{ secrets.KEY_PASSWORD }}
58- GEMINI_API_KEY : ${{ secrets.GEMINI_API_KEY }}
59- run : |
60- if [ -f "./gradlew" ]; then
61- ./gradlew assembleDebug assembleRelease --no-daemon
62- else
63- gradle assembleDebug assembleRelease --no-daemon
64- fi
65-
66- - name : Run Unit Tests
67- run : |
68- if [ -f "./gradlew" ]; then
69- ./gradlew testDebugUnitTest --no-daemon
70- else
71- gradle testDebugUnitTest --no-daemon
72- fi
68+ run : ./gradlew assembleRelease --stacktrace
7369
74- - name : Upload Debug APK Artifact
75- if : always()
70+ - name : Upload Debug APK
7671 uses : actions/upload-artifact@v4
7772 with :
78- name : app-debug-apk
73+ name : app-debug
7974 path : app/build/outputs/apk/debug/app-debug.apk
80- if-no-files-found : ignore
8175
82- - name : Upload Release APK Artifact
83- if : always()
76+ - name : Upload Release APK
8477 uses : actions/upload-artifact@v4
8578 with :
86- name : app-release-apk
87- path : app/build/outputs/apk/release/app-release.apk
88- if-no-files-found : ignore
79+ name : app-release
80+ path : app/build/outputs/apk/release/*.apk
81+
82+ - name : Clean Up
83+ if : always()
84+ run : rm -f app/release-keystore.jks
0 commit comments