Skip to content

Commit c9bff26

Browse files
runningcodeclaude
andauthored
Add Android beta build workflow (#622)
## Summary - Add beta build type - Builds beta build type signed AAB on every push to main. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 39fbeac commit c9bff26

File tree

4 files changed

+68
-22
lines changed

4 files changed

+68
-22
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: Android Beta Build
2+
3+
on:
4+
push:
5+
branches: [main]
6+
7+
jobs:
8+
build:
9+
runs-on: ubuntu-latest
10+
11+
defaults:
12+
run:
13+
working-directory: ./android
14+
15+
steps:
16+
- name: Checkout
17+
uses: actions/checkout@v5
18+
19+
- name: Set up JDK
20+
uses: actions/setup-java@v5
21+
with:
22+
java-version: "17"
23+
distribution: "adopt"
24+
25+
- name: Setup Gradle build action
26+
uses: gradle/actions/setup-gradle@v5
27+
28+
- name: Decode Keystore
29+
env:
30+
ENCODED_KEYSTORE: ${{ secrets.ANDROID_RELEASE_KEYSTORE_BASE64 }}
31+
run: |
32+
echo $ENCODED_KEYSTORE > keystore_base64.txt
33+
base64 -d keystore_base64.txt > ${{ runner.temp }}/keystore.jks
34+
35+
- name: Build Beta APK
36+
env:
37+
DECODED_KEYSTORE_PATH: ${{ runner.temp }}/keystore.jks
38+
RELEASE_KEY_ALIAS: ${{ secrets.ANDROID_RELEASE_KEY_ALIAS }}
39+
RELEASE_KEY_PASSWORD: ${{ secrets.ANDROID_RELEASE_KEY_PASSWORD }}
40+
RELEASE_STORE_PASSWORD: ${{ secrets.ANDROID_RELEASE_STORE_PASSWORD }}
41+
EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }}
42+
REAPER_API_KEY: ${{ secrets.REAPER_API_KEY }}
43+
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
44+
run: ./gradlew :app:assembleBeta
45+
46+
- name: Upload APK
47+
uses: actions/upload-artifact@v4
48+
with:
49+
path: ./android/app/build/outputs/apk/beta/app-beta.apk
50+
name: hackernews-beta-${{github.sha}}.apk
51+
if-no-files-found: error

.github/workflows/android_emerge_upload.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ jobs:
2828
run: ./gradlew :app:bundleRelease :app:emergeUploadReleaseAab
2929
env:
3030
EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }}
31-
ANDROID_DISTRIBUTION_API_KEY: ${{ secrets.ANDROID_DISTRIBUTION_API_KEY}}
3231
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
3332
GITHUB_BASE_SHA: ${{ github.event.pull_request.base.sha }}
3433
SENTRY_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}

.github/workflows/android_release_build.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,20 @@ jobs:
3838
3939
- name: Build AAB
4040
env:
41-
RUNNING_ENV: release_workflow
4241
DECODED_KEYSTORE_PATH: ${{ runner.temp }}/keystore.jks
4342
RELEASE_KEY_ALIAS: ${{ secrets.ANDROID_RELEASE_KEY_ALIAS }}
4443
RELEASE_KEY_PASSWORD: ${{ secrets.ANDROID_RELEASE_KEY_PASSWORD }}
4544
RELEASE_STORE_PASSWORD: ${{ secrets.ANDROID_RELEASE_STORE_PASSWORD }}
4645
EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }}
4746
REAPER_API_KEY: ${{ secrets.REAPER_API_KEY }}
48-
ANDROID_DISTRIBUTION_API_KEY: ${{ secrets.ANDROID_DISTRIBUTION_API_KEY }}
4947
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_SENTRY_AUTH_TOKEN }}
50-
run: ./gradlew :app:bundleRelease
48+
run: ./gradlew :app:bundlePlayStoreRelease
5149

5250
- name: Convert AAB to APK
5351
run: |
5452
java -jar /usr/local/bin/bundletool.jar build-apks \
5553
--mode=universal \
56-
--bundle=./app/build/outputs/bundle/release/app-release.aab \
54+
--bundle=./app/build/outputs/bundle/playStoreRelease/app-playStoreRelease.aab \
5755
--output=${{ runner.temp }}/app-release.apks \
5856
--ks=${{ runner.temp }}/keystore.jks \
5957
--ks-pass=pass:${{ secrets.ANDROID_RELEASE_STORE_PASSWORD }} \
@@ -91,4 +89,4 @@ jobs:
9189
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
9290
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
9391
run: |
94-
aws s3 cp app/build/outputs/bundle/release/app-release.aab s3://hn-artifacts/app-release-${{ env.VERSION_NAME }}.aab
92+
aws s3 cp app/build/outputs/bundle/playStoreRelease/app-playStoreRelease.aab s3://hn-artifacts/app-release-${{ env.VERSION_NAME }}.aab

android/app/build.gradle.kts

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ plugins {
1010
alias(libs.plugins.androidx.room)
1111
}
1212

13-
val runningEnv: String? = System.getenv("RUNNING_ENV")
14-
1513
android {
1614
namespace = "com.emergetools.hackernews"
1715
compileSdk = 36
@@ -33,9 +31,10 @@ android {
3331
}
3432

3533
signingConfigs {
36-
if (runningEnv == "release_workflow") {
34+
val keystorePath = System.getenv("DECODED_KEYSTORE_PATH")
35+
if (keystorePath != null) {
3736
create("release") {
38-
storeFile = file(System.getenv("DECODED_KEYSTORE_PATH"))
37+
storeFile = file(keystorePath)
3938
keyAlias = System.getenv("RELEASE_KEY_ALIAS")
4039
keyPassword = System.getenv("RELEASE_KEY_PASSWORD")
4140
storePassword = System.getenv("RELEASE_STORE_PASSWORD")
@@ -55,14 +54,16 @@ android {
5554
proguardFiles(
5655
getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
5756
)
58-
if (runningEnv == "release_workflow") {
59-
manifestPlaceholders["emerge.distribution.apiKey"] = ""
60-
manifestPlaceholders["emerge.distribution.tag"] = "release"
61-
signingConfig = signingConfigs.getByName("release")
62-
} else {
63-
manifestPlaceholders["emerge.distribution.apiKey"] = System.getenv("ANDROID_DISTRIBUTION_API_KEY") ?: ""
64-
signingConfig = signingConfigs.getByName("debug")
65-
}
57+
signingConfig = signingConfigs.getByName("debug")
58+
}
59+
create("playStoreRelease") {
60+
initWith(getByName("release"))
61+
signingConfig = signingConfigs.findByName("release")
62+
}
63+
create("beta") {
64+
initWith(getByName("release"))
65+
applicationIdSuffix = ".beta"
66+
signingConfig = signingConfigs.findByName("release")
6667
}
6768
}
6869
buildFeatures {
@@ -100,10 +101,7 @@ emerge {
100101
}
101102

102103
reaper {
103-
// Only enable reaper on release workflow
104-
if (runningEnv == "release_workflow") {
105-
enabledVariants.set(listOf("release"))
106-
}
104+
enabledVariants.set(listOf("playStoreRelease"))
107105
publishableApiKey.set(System.getenv("REAPER_API_KEY"))
108106
}
109107

0 commit comments

Comments
 (0)