git.iko.soy/opencode-android
on master help sign in
Add GitHub Action to build signed release APK and upload as artifact
commit110d01c3df85c5890fb849baa9c61e406cd286c9 authoriko <mail@iko.soy> dateWed 8 Jul 2026, 06:04 (3 months ago) parentdbb988d
2 files changed+64
.github/workflows/release-build.yml+54 app/build.gradle.kts+10
.github/workflows/release-build.ymlnew file+54
@@ -0,0 +1,54 @@
1+name: Release Build
2+
3+on:
4+ push:
5+ branches: [master]
6+ pull_request:
7+ workflow_dispatch:
8+
9+concurrency:
10+ group: ${{ github.workflow }}-${{ github.ref }}
11+ cancel-in-progress: true
12+
13+jobs:
14+ release-build:
15+ runs-on: ubuntu-latest
16+
17+ steps:
18+ - uses: actions/checkout@v4
19+
20+ - uses: actions/setup-java@v4
21+ with:
22+ distribution: temurin
23+ java-version: 17
24+
25+ - uses: android-actions/setup-android@v3
26+
27+ - uses: gradle/actions/setup-gradle@v4
28+
29+ # The keystore ships as base64 in a secret so it never touches the repo.
30+ # When the secret isn't configured the Gradle build falls back to an
31+ # unsigned APK, so this workflow is green even before signing is wired up.
32+ - name: Decode signing keystore
33+ if: env.OPENCODE_STORE_BASE64 != ''
34+ env:
35+ OPENCODE_STORE_BASE64: ${{ secrets.OPENCODE_STORE_BASE64 }}
36+ run: |
37+ STORE_FILE="$RUNNER_TEMP/release.keystore"
38+ printf '%s' "$OPENCODE_STORE_BASE64" | base64 -d > "$STORE_FILE"
39+ echo "OPENCODE_STORE_FILE=$STORE_FILE" >> "$GITHUB_ENV"
40+
41+ - name: Build release APK
42+ env:
43+ OPENCODE_STORE_FILE: ${{ env.OPENCODE_STORE_FILE }}
44+ OPENCODE_STORE_PASSWORD: ${{ secrets.OPENCODE_STORE_PASSWORD }}
45+ OPENCODE_KEY_ALIAS: ${{ secrets.OPENCODE_KEY_ALIAS }}
46+ OPENCODE_KEY_PASSWORD: ${{ secrets.OPENCODE_KEY_PASSWORD }}
47+ run: ./gradlew assembleRelease --no-daemon
48+
49+ - name: Upload release APK
50+ uses: actions/upload-artifact@v4
51+ with:
52+ name: release-apk
53+ path: app/build/outputs/apk/**/*.apk
54+ if-no-files-found: error
app/build.gradle.kts+10
@@ -21,9 +21,19 @@ android {
2121 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2222 }
2323
24+ signingConfigs {
25+ create("release") {
26+ storeFile = System.getenv("OPENCODE_STORE_FILE")?.let { file(it) }
27+ storePassword = System.getenv("OPENCODE_STORE_PASSWORD")
28+ keyAlias = System.getenv("OPENCODE_KEY_ALIAS")
29+ keyPassword = System.getenv("OPENCODE_KEY_PASSWORD")
30+ }
31+ }
32+
2433 buildTypes {
2534 release {
2635 isMinifyEnabled = false
36+ signingConfig = signingConfigs.getByName("release")
2737 proguardFiles(
2838 getDefaultProguardFile("proguard-android-optimize.txt"),
2939 "proguard-rules.pro",