Skip to content

Commit a5854de

Browse files
authored
feat: build debug APK automatically on every PR (#144)
1 parent 930dbe2 commit a5854de

2 files changed

Lines changed: 98 additions & 30 deletions

File tree

.github/workflows/build-apk.yml

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
on:
2+
workflow_call:
3+
inputs:
4+
build-type:
5+
type: string
6+
required: true
7+
outputs:
8+
filename:
9+
description: "artifact file name"
10+
value: ${{ jobs.build-apk.outputs.filename }}
11+
secrets:
12+
key-alias:
13+
required: false
14+
keystore:
15+
required: false
16+
key-password:
17+
required: false
18+
19+
jobs:
20+
build-apk:
21+
runs-on: ubuntu-latest
22+
outputs:
23+
filename: ${{ steps.build_apk.outputs.upload_filename }}
24+
steps:
25+
- uses: actions/checkout@v3
26+
- name: Set up OpenJDK 17
27+
uses: actions/setup-java@v3
28+
with:
29+
distribution: "zulu"
30+
java-version: "17"
31+
- name: Setup Android SDK
32+
uses: android-actions/setup-android@v2
33+
- name: Install required platform
34+
run: sdkmanager "platforms;android-33" "build-tools;33.0.2"
35+
- name: Replace android.jar
36+
run: |
37+
curl -L https://github.com/Reginer/aosp-android-jar/raw/main/android-33/android.jar > /usr/local/lib/android/sdk/platforms/android-33/android.jar
38+
- name: Build APK
39+
id: build_apk
40+
run: |
41+
if [[ "${BUILD_TYPE}" = "release" ]]; then
42+
./gradlew assembleRelease
43+
echo "upload_filename=${RUN_ID}-APK" >> $GITHUB_OUTPUT
44+
echo "build_filename=app-release-unsigned.apk" >> $GITHUB_OUTPUT
45+
else
46+
./gradlew assemble
47+
echo "upload_filename=${RUN_ID}.debug.apk" >> $GITHUB_OUTPUT
48+
echo "build_filename=app-debug.apk" >> $GITHUB_OUTPUT
49+
fi
50+
env:
51+
BUILD_TYPE: ${{ inputs.build-type }}
52+
RUN_ID: ${{ github.run_id }}
53+
- name: align APK with zipalign
54+
run: $ANDROID_SDK_ROOT/build-tools/33.0.2/zipalign -v -p 4 app/build/outputs/apk/${BUILD_TYPE}/${FILENAME} app-unsigned-aligned.apk
55+
env:
56+
BUILD_TYPE: ${{ inputs.build-type }}
57+
FILENAME: ${{ steps.build_apk.outputs.build_filename }}
58+
- name: Save keystore as file
59+
if: ${{ inputs.build-type == 'release' }}
60+
run: echo "${KEYSTORE_B64}" | base64 -d > keystore.jks
61+
env:
62+
KEYSTORE_B64: ${{ secrets.keystore }}
63+
- name: Sign APK
64+
if: ${{ inputs.build-type == 'release' }}
65+
run: echo "${KEY_PASSWORD}" | $ANDROID_SDK_ROOT/build-tools/33.0.2/apksigner sign --ks keystore.jks --ks-key-alias "${KEY_ALIAS}" --key-pass "env:KEY_PASSWORD" --out dev.bluehouse.enablevolte.apk app-unsigned-aligned.apk
66+
env:
67+
KEY_ALIAS: ${{ secrets.key-alias }}
68+
KEY_PASSWORD: ${{ secrets.key-password }}
69+
BUILD_TYPE: ${{ inputs.build-type }}
70+
- name: Rename APK
71+
if: ${{ inputs.build-type != 'release' }}
72+
run: mv app-unsigned-aligned.apk dev.bluehouse.enablevolte.apk
73+
- name: Upload APK
74+
uses: actions/upload-artifact@v3
75+
with:
76+
name: ${{ steps.build_apk.outputs.upload_filename }}
77+
path: dev.bluehouse.enablevolte.apk
78+
retention-days: 3

.github/workflows/default.yml

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -20,43 +20,33 @@ jobs:
2020
with:
2121
report-path: build/*.xml # Support glob patterns by https://www.npmjs.com/package/@actions/glob
2222
continue-on-error: false # If annotations contain error of severity, action-ktlint exit 1.
23-
release:
23+
build-debug-apk:
24+
needs: [lint]
25+
if: github.event_name == 'pull_request'
26+
uses: ./.github/workflows/build-apk.yml
27+
with:
28+
build-type: debug
29+
build-release-apk:
2430
needs: [lint]
2531
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
32+
uses: ./.github/workflows/build-apk.yml
33+
with:
34+
build-type: release
35+
secrets:
36+
key-alias: ${{ secrets.KEY_ALIAS }}
37+
keystore: ${{ secrets.KEYSTORE_B64 }}
38+
key-password: ${{ secrets.KEY_PASSWORD }}
39+
release:
40+
needs: [build-release-apk]
2641
runs-on: ubuntu-latest
2742
permissions:
2843
contents: write
2944
steps:
30-
- uses: actions/checkout@v3
31-
- name: Set up OpenJDK 17
32-
uses: actions/setup-java@v3
45+
- name: Download APK
46+
id: download
47+
uses: actions/download-artifact@v3
3348
with:
34-
distribution: "zulu"
35-
java-version: "17"
36-
- name: Setup Android SDK
37-
uses: android-actions/setup-android@v2
38-
- name: Install required platform
39-
run: sdkmanager "platforms;android-33" "build-tools;33.0.2"
40-
- name: Replace android.jar
41-
run: |
42-
curl -L https://github.com/Reginer/aosp-android-jar/raw/main/android-33/android.jar > /usr/local/lib/android/sdk/platforms/android-33/android.jar
43-
- run: |
44-
ls $ANDROID_SDK_ROOT
45-
ls $ANDROID_SDK_ROOT/build-tools
46-
ls $ANDROID_SDK_ROOT/build-tools/33.0.2
47-
- name: Build release APK
48-
run: ./gradlew assembleRelease
49-
- name: Save keystore as file
50-
run: echo "${KEYSTORE_B64}" | base64 -d > keystore.jks
51-
env:
52-
KEYSTORE_B64: ${{ secrets.KEYSTORE_B64 }}
53-
- name: align APK with zipalign
54-
run: $ANDROID_SDK_ROOT/build-tools/33.0.2/zipalign -v -p 4 app/build/outputs/apk/release/app-release-unsigned.apk app-release-unsigned-aligned.apk
55-
- name: Sign APK
56-
run: echo "${KEY_PASSWORD}" | $ANDROID_SDK_ROOT/build-tools/33.0.2/apksigner sign --ks keystore.jks --ks-key-alias "${KEY_ALIAS}" --key-pass "env:KEY_PASSWORD" --out dev.bluehouse.enablevolte.apk app-release-unsigned-aligned.apk
57-
env:
58-
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
59-
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
49+
name: ${{ needs.build-release-apk.outputs.filename }}
6050
- name: Release to GitHub
6151
uses: softprops/action-gh-release@v1
6252
with:

0 commit comments

Comments
 (0)