77 branches : [main]
88
99jobs :
10- build-web :
11- name : Build React
12- runs-on : ubuntu-latest
13- steps :
14- - name : Checkout code
15- uses : actions/checkout@v4
16-
17- - name : Setup Node.js
18- uses : actions/setup-node@v4
19- with :
20- node-version : ' 20'
21- cache : ' npm'
22- cache-dependency-path : web/package-lock.json
23-
24- - name : Install dependencies
25- working-directory : ./web
26- run : npm ci
27-
28- - name : Build React
29- working-directory : ./web
30- run : npm run build
31-
32- - name : Upload web assets
33- uses : actions/upload-artifact@v4
34- with :
35- name : web-assets
36- path : app/src/main/assets/www
37- retention-days : 1
38-
3910 build-android :
40- name : Build Android
41- needs : build-web
11+ name : Lint, Test, and Build Debug APK
4212 runs-on : ubuntu-latest
4313 permissions :
4414 contents : read
15+
4516 steps :
4617 - name : Checkout code
47- uses : actions/checkout@v4
48-
49- - name : Download web assets
50- uses : actions/download-artifact@v4
51- with :
52- name : web-assets
53- path : app/src/main/assets/www
18+ uses : actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
5419
5520 - name : Setup JDK 17
56- uses : actions/setup-java@v4
21+ uses : actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9
5722 with :
5823 java-version : ' 17'
5924 distribution : ' temurin'
@@ -62,51 +27,19 @@ jobs:
6227 - name : Grant execute permission for gradlew
6328 run : chmod +x gradlew
6429
65- # 1. Debug Build
66- - name : Build Debug APK
30+ - name : Run lint
31+ run : ./gradlew lintDebug --no-daemon
32+
33+ - name : Run unit tests
34+ run : ./gradlew testDebugUnitTest --no-daemon
35+
36+ - name : Build debug APK
6737 run : ./gradlew assembleDebug --no-daemon
6838
69- - name : Upload Debug APK
70- uses : actions/upload-artifact@v4
39+ - name : Upload debug APK
40+ uses : actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
7141 with :
7242 name : AppControlX-debug
7343 path : app/build/outputs/apk/debug/*.apk
74- retention-days : 7
75-
76- # 2. Release Build (Logic to handle both Real Sign and Generated Sign)
77- - name : Configure Keystore
78- id : sign_config
79- run : |
80- if [ -n "${{ secrets.KEYSTORE_BASE64 }}" ]; then
81- echo "Found secrets. Setting up Real Signing..."
82- echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > release.keystore
83- echo "KEYSTORE_FILE=$(pwd)/release.keystore" >> $GITHUB_ENV
84- echo "KEYSTORE_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}" >> $GITHUB_ENV
85- echo "KEY_ALIAS=${{ secrets.KEY_ALIAS }}" >> $GITHUB_ENV
86- echo "KEY_PASSWORD=${{ secrets.KEY_PASSWORD }}" >> $GITHUB_ENV
87- echo "build_type=real-signed" >> $GITHUB_OUTPUT
88- else
89- echo "No secrets found. Setting up Generated Signing..."
90- keytool -genkey -v -keystore release.keystore -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000 -storepass android -keypass android -dname "CN=Android Debug,O=Android,C=US"
91- echo "KEYSTORE_FILE=$(pwd)/release.keystore" >> $GITHUB_ENV
92- echo "KEYSTORE_PASSWORD=android" >> $GITHUB_ENV
93- echo "KEY_ALIAS=androiddebugkey" >> $GITHUB_ENV
94- echo "KEY_PASSWORD=android" >> $GITHUB_ENV
95- echo "build_type=generated-signed" >> $GITHUB_OUTPUT
96- fi
97-
98- - name : Build Release APK
99- run : ./gradlew assembleRelease --no-daemon
100-
101- - name : Rename Release APK
102- run : |
103- cd app/build/outputs/apk/release/
104- # Find the release apk (it might include version number)
105- find . -name "*release.apk" -exec mv {} AppControlX-release-${{ steps.sign_config.outputs.build_type }}.apk \;
106-
107- - name : Upload Release APK
108- uses : actions/upload-artifact@v4
109- with :
110- name : AppControlX-release-${{ steps.sign_config.outputs.build_type }}
111- path : app/build/outputs/apk/release/*.apk
44+ if-no-files-found : error
11245 retention-days : 7
0 commit comments