@@ -10,28 +10,34 @@ concurrency:
10
10
cancel-in-progress : true
11
11
12
12
env :
13
- path : app/build/outputs/apk/release # Output Path
14
- output : app-release-unsigned.apk # Output File Name
15
- name : ${{ github.repository_owner }}.apk # Final APK Name
16
13
key_name : my-key
17
- key_file : release.keystore
18
- tools_path : /usr/local/lib/android/sdk/build-tools/36.0.0
19
- cmdline_tools : /usr/local/lib/android/sdk/cmdline-tools/latest/bin
14
+ package_name : com.djangofiles.djangofiles
20
15
21
16
jobs :
22
17
release :
23
18
name : " Release"
24
19
runs-on : ubuntu-latest
25
- timeout-minutes : 15
20
+ timeout-minutes : 20
26
21
permissions :
27
22
contents : write
23
+ env :
24
+ apk_file : app-release-unsigned.apk
25
+ apk_path : app/build/outputs/apk/release
26
+ aab_file : app-release.aab
27
+ aab_path : app/build/outputs/bundle/release
28
+ mapping_file : app/build/outputs/mapping/release/mapping.txt
29
+ debug_symbols : app/build/intermediates/merged_native_libs/release/mergeReleaseNativeLibs/out/lib
30
+ tools_path : /usr/local/lib/android/sdk/build-tools/36.0.0
31
+ cmdline_tools : /usr/local/lib/android/sdk/cmdline-tools/latest/bin
32
+ key_file : release.keystore
33
+ gradle_file : app/build.gradle.kts
34
+ signed_apk : app-release.apk
28
35
29
36
steps :
30
37
- name : " Checkout"
31
38
uses : actions/checkout@v4
32
39
33
40
- name : " Debug Event"
34
- if : ${{ !github.event.act }}
35
41
continue-on-error : true
36
42
run : |
37
43
echo "ref: ${{ github.ref }}"
@@ -43,13 +49,11 @@ jobs:
43
49
echo "::endgroup::"
44
50
45
51
- name : " Set Tools Path"
46
- if : ${{ !github.event.act }}
47
52
run : |
48
53
echo "${{ env.tools_path }}" >> "$GITHUB_PATH"
49
54
echo "${{ env.cmdline_tools }}" >> "$GITHUB_PATH"
50
55
51
56
- name : " Verify Tools"
52
- if : ${{ !github.event.act }}
53
57
run : |
54
58
which keytool
55
59
which zipalign
@@ -65,22 +69,34 @@ jobs:
65
69
66
70
- name : " Update Version"
67
71
72
+ id : version
68
73
with :
69
- gradlePath : app/build.gradle.kts
74
+ gradlePath : ${{ env.gradle_file }}
70
75
versionCode : ${{ github.run_number }}
71
76
versionName : ${{ github.ref_name }}
72
77
73
78
- name : " Debug Version"
74
- if : ${{ !github.event.act }}
75
79
continue-on-error : true
76
80
run : |
77
81
echo "versionCode: ${{ github.run_number }}"
78
82
echo "versionName: ${{ github.ref_name }}"
79
83
80
- echo "::group::cat app/build.gradle.kts "
81
- cat app/build.gradle.kts
84
+ echo "::group::cat ${{ env.gradle_file }} "
85
+ cat ${{ env.gradle_file }}
82
86
echo "::endgroup::"
83
87
88
+ - name : " Write Google Services File"
89
+ run : |
90
+ echo "${{ secrets.GOOGLE_SERVICES }}" | base64 --decode > app/google-services.json
91
+
92
+ stat app/google-services.json
93
+
94
+ - name : " Write Keystore File"
95
+ run : |
96
+ echo "${{ secrets.ANDROID_KEYSTORE }}" | base64 --decode > ${{ env.key_file }}
97
+
98
+ echo ${{ secrets.ANDROID_KEYSTORE_PASS }} | keytool -list -keystore ${{ env.key_file }}
99
+
84
100
- name : " Setup Node 22"
85
101
uses : actions/setup-node@v4
86
102
with :
@@ -91,10 +107,11 @@ jobs:
91
107
run : |
92
108
bash prepare.sh
93
109
94
- - name : " Google Services File "
95
- if : ${{ !github.event.act }}
110
+ - name : " Debug Prepare "
111
+ continue-on-error : true
96
112
run : |
97
- echo "${{ secrets.GOOGLE_SERVICES }}" | base64 --decode > app/google-services.json
113
+ ls .
114
+ ls -lAh app
98
115
99
116
- name : " Setup Java"
100
117
uses : actions/setup-java@v4
@@ -103,63 +120,108 @@ jobs:
103
120
java-version : " 17"
104
121
# cache: "gradle"
105
122
106
- - name : " Gradle Assemble"
123
+ - name : " Gradle Assemble APK "
107
124
run : |
108
125
chmod +x ./gradlew
109
126
./gradlew assembleRelease
110
127
111
- - name : " Verify Build "
128
+ - name : " Verify APK "
112
129
run : |
113
- apkanalyzer -h apk summary "${{ env.path }}/${{ env.output }}"
130
+ apkanalyzer -h apk summary "${{ env.apk_path }}/${{ env.apk_file }}"
114
131
115
- echo "::group::ls env.path "
116
- ls -lAh ${{ env.path }}
132
+ echo "::group::ls env.apk_path "
133
+ ls -lAh ${{ env.apk_path }}
117
134
echo "::endgroup::"
118
135
119
136
- name : " Align APK"
120
137
run : |
121
- zipalign -P 16 -f -v 4 "${{ env.path }}/${{ env.output }}" "${{ env.path }}/${{ env.name }}"
122
-
123
- - name : " Verify Alignment"
124
- run : |
125
- zipalign -c -P 16 -v 4 "${{ env.path }}/${{ env.name }}"
126
-
127
- - name : " Decode Keystore"
128
- run : |
129
- echo "${{ secrets.ANDROID_KEYSTORE }}" | base64 --decode > ${{ env.key_file }}
130
-
131
- - name : " Debug Keystore"
132
- continue-on-error : true
133
- run : |
134
- echo ${{ secrets.ANDROID_KEYSTORE_PASS }} | keytool -list -keystore ${{ env.key_file }}
138
+ mv "${{ env.apk_path }}/${{ env.apk_file }}" "${{ env.apk_path }}/source.apk"
139
+ zipalign -P 16 -f -v 4 \
140
+ "${{ env.apk_path }}/source.apk" \
141
+ "${{ env.apk_path }}/${{ env.apk_file }}"
142
+ zipalign -c -P 16 -v 4 "${{ env.apk_path }}/${{ env.apk_file }}"
143
+ rm -f "${{ env.apk_path }}/source.apk"
135
144
136
145
- name : " Sign APK"
137
146
run : |
138
147
apksigner sign --ks ${{ env.key_file }} \
139
148
--ks-pass pass:${{ secrets.ANDROID_KEYSTORE_PASS }} \
140
149
--ks-key-alias ${{ env.key_name }} \
141
- "${{ env.path }}/${{ env.name }}"
150
+ "${{ env.apk_path }}/${{ env.apk_file }}"
151
+ apksigner verify --verbose "${{ env.apk_path }}/${{ env.apk_file }}"
152
+ mv "${{ env.apk_path }}/${{ env.apk_file }}" "${{ env.apk_path }}/${{ env.signed_apk }}"
142
153
143
- - name : " Verify Signature"
144
- run : |
145
- apksigner verify --verbose "${{ env.path }}/${{ env.name }}"
146
-
147
- - name : " Upload Artifacts"
154
+ - name : " Upload APK to Artifacts"
148
155
if : ${{ !github.event.act }}
149
156
uses : actions/upload-artifact@v4
150
157
with :
151
- name : ${{ github.repository_owner }}- release
152
- path : ${{ env.path }}
158
+ name : release
159
+ path : ${{ env.apk_path }}
153
160
154
- - name : " Upload to Release"
161
+ - name : " Upload APK to Release"
155
162
if : ${{ github.event_name == 'release' }}
156
163
uses : svenstaro/upload-release-action@v2
157
164
with :
158
- file : ${{ env.path }}/${{ env.name }}
165
+ file : ${{ env.apk_path }}/${{ env.signed_apk }}
159
166
tag : ${{ github.ref }}
160
167
overwrite : true
161
168
file_glob : true
162
169
170
+ # - name: "Gradle Bundle AAB"
171
+ # if: ${{ !github.event.release.prerelease }}
172
+ # run: |
173
+ # chmod +x ./gradlew
174
+ # ./gradlew bundleRelease
175
+
176
+ # - name: "Debug Bundle"
177
+ # if: ${{ !github.event.release.prerelease }}
178
+ # continue-on-error: true
179
+ # run: |
180
+ # echo "env.aab_path: ${{ env.aab_path }}"
181
+ # ls -lAh ${{ env.aab_path }} ||:
182
+ # echo "env.debug_symbols: ${{ env.debug_symbols }}"
183
+ # ls -lAh ${{ env.debug_symbols }} ||:
184
+ # echo "env.mapping_file: ${{ env.mapping_file }}"
185
+ # ls -lAh $(dirname ${{ env.debug_symbols }}) ||:
186
+
187
+ # - name: "Sign Bundle"
188
+ # if: ${{ !github.event.release.prerelease }}
189
+ # run: |
190
+ # apksigner sign --ks ${{ env.key_file }} \
191
+ # --min-sdk-version 26 \
192
+ # --v1-signing-enabled true \
193
+ # --v2-signing-enabled true \
194
+ # --ks-pass pass:${{ secrets.ANDROID_KEYSTORE_PASS }} \
195
+ # --ks-key-alias ${{ env.key_name }} \
196
+ # "${{ env.aab_path }}/${{ env.aab_file }}"
197
+
198
+ # - name: "Upload Bundle to Artifacts"
199
+ # if: ${{ !github.event.release.prerelease }}
200
+ # uses: actions/upload-artifact@v4
201
+ # with:
202
+ # name: bundle
203
+ # path: ${{ env.aab_path }}
204
+
205
+ # - name: "Generate Whats New"
206
+ # if: ${{ !github.event.release.prerelease }}
207
+ # run: |
208
+ # mkdir -p whatsNew
209
+ # echo "GitHub Actions Build" > whatsNew/whatsnew-en-US
210
+ # cat whatsNew/whatsnew-en-US
211
+
212
+ # - name: "Upload Google Play"
213
+ # if: ${{ github.event_name == 'release' && !github.event.release.prerelease }}
214
+ # uses: r0adkll/upload-google-play@v1
215
+ # with:
216
+ # serviceAccountJsonPlainText: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_JSON }}
217
+ # packageName: ${{ env.package_name }}
218
+ # releaseFiles: ${{ env.aab_path }}/${{ env.aab_file }}
219
+ # debugSymbols: ${{ env.debug_symbols }}
220
+ # mappingFile: ${{ env.mapping_file }}
221
+ # whatsNewDirectory: whatsNew
222
+ # releaseName: "${{ github.run_number }} (${{ github.ref_name }})"
223
+ # track: internal
224
+
163
225
- name : " VirusTotal"
164
226
if : ${{ github.event_name == 'release' }}
165
227
uses : cssnr/virustotal-action@v1
@@ -180,15 +242,15 @@ jobs:
180
242
run : |
181
243
echo -e "## Android Release\n\n" >> $GITHUB_STEP_SUMMARY
182
244
183
- echo -e "Final APK: \`${{ env.name }}\`\n\n" >> $GITHUB_STEP_SUMMARY
245
+ echo -e "Final APK: \`${{ env.signed_apk }}\`\n\n" >> $GITHUB_STEP_SUMMARY
184
246
185
247
echo -e "<details><summary>Build Artifacts</summary>\n\n" >> $GITHUB_STEP_SUMMARY
186
- echo -e "\`\`\`text\n$(ls -lAh ${{ env.path }})\n\`\`\`\n\n" >> $GITHUB_STEP_SUMMARY
248
+ echo -e "\`\`\`text\n$(ls -lAh ${{ env.apk_path }})\n\`\`\`\n\n" >> $GITHUB_STEP_SUMMARY
187
249
echo -e "</details>\n\n" >> $GITHUB_STEP_SUMMARY
188
250
189
- if [ -f "${{ env.path }}/output-metadata.json" ];then
251
+ if [ -f "${{ env.apk_path }}/output-metadata.json" ];then
190
252
echo -e "<details><summary>File: output-metadata.json</summary>\n\n" >> $GITHUB_STEP_SUMMARY
191
- echo -e "\`\`\`json\n$(cat ${{ env.path }}/output-metadata.json)\n\`\`\`\n\n" >> $GITHUB_STEP_SUMMARY
253
+ echo -e "\`\`\`json\n$(cat ${{ env.apk_path }}/output-metadata.json)\n\`\`\`\n\n" >> $GITHUB_STEP_SUMMARY
192
254
echo -e "</details>\n\n" >> $GITHUB_STEP_SUMMARY
193
255
fi
194
256
0 commit comments