Skip to content

Commit b366931

Browse files
committed
feat: add release workflow for building and uploading signed APKs
1 parent f49c8a8 commit b366931

1 file changed

Lines changed: 72 additions & 0 deletions

File tree

.github/workflows/android.yml

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,21 @@ on:
55
branches: [ "master" ]
66
pull_request:
77
branches: [ "master" ]
8+
release:
9+
types: [published]
10+
workflow_dispatch:
11+
inputs:
12+
release_tag:
13+
description: "Existing release tag to upload the APK to, for example v1.1.4"
14+
required: true
15+
type: string
16+
17+
permissions:
18+
contents: read
819

920
jobs:
1021
build:
22+
if: github.event_name == 'push' || github.event_name == 'pull_request'
1123
runs-on: ubuntu-latest
1224

1325
steps:
@@ -24,3 +36,63 @@ jobs:
2436

2537
- name: Build with Gradle
2638
run: ./gradlew assembleDebug
39+
40+
release-apk:
41+
if: github.event_name == 'release' || github.event_name == 'workflow_dispatch'
42+
runs-on: ubuntu-latest
43+
permissions:
44+
contents: write
45+
env:
46+
RELEASE_TAG: ${{ github.event.release.tag_name || inputs.release_tag }}
47+
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
48+
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
49+
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
50+
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
51+
52+
steps:
53+
- uses: actions/checkout@v4
54+
with:
55+
ref: ${{ github.event.release.tag_name || inputs.release_tag }}
56+
57+
- name: Set up JDK 17
58+
uses: actions/setup-java@v4
59+
with:
60+
java-version: '17'
61+
distribution: 'temurin'
62+
cache: gradle
63+
64+
- name: Validate signing secrets
65+
run: |
66+
missing=0
67+
for name in ANDROID_KEYSTORE_BASE64 ANDROID_KEYSTORE_PASSWORD ANDROID_KEY_ALIAS ANDROID_KEY_PASSWORD; do
68+
if [ -z "${!name}" ]; then
69+
echo "::error::Missing required repository secret: $name"
70+
missing=1
71+
fi
72+
done
73+
exit "$missing"
74+
75+
- name: Decode release keystore
76+
run: |
77+
echo "$ANDROID_KEYSTORE_BASE64" | base64 --decode > "$RUNNER_TEMP/release.keystore"
78+
79+
- name: Grant execute permission for gradlew
80+
run: chmod +x gradlew
81+
82+
- name: Build signed release APK
83+
run: |
84+
./gradlew assembleRelease \
85+
-Pandroid.injected.signing.store.file="$RUNNER_TEMP/release.keystore" \
86+
-Pandroid.injected.signing.store.password="$ANDROID_KEYSTORE_PASSWORD" \
87+
-Pandroid.injected.signing.key.alias="$ANDROID_KEY_ALIAS" \
88+
-Pandroid.injected.signing.key.password="$ANDROID_KEY_PASSWORD"
89+
90+
- name: Prepare release asset
91+
run: |
92+
mkdir -p release-assets
93+
cp app/build/outputs/apk/release/app-release.apk "release-assets/PicQuery-${RELEASE_TAG}.apk"
94+
95+
- name: Upload APK to GitHub Release
96+
env:
97+
GH_TOKEN: ${{ github.token }}
98+
run: gh release upload "$RELEASE_TAG" "release-assets/PicQuery-${RELEASE_TAG}.apk" --clobber

0 commit comments

Comments
 (0)