Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 144 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
name: Build and Release Android Apps

on:
push:
branches:
- main
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest
env:
KEYSTORE_FILE: release.keystore
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17

- name: Set up Gradle
uses: gradle/gradle-build-action@v3

- name: Set up CMake 4.0.2
uses: jwlawson/actions-setup-cmake@v2
with:
cmake-version: '4.0.2'

- name: Set up Android SDK
uses: android-actions/setup-android@v3

- name: Install NDK 29.0.14206865
run: sdkmanager "ndk;29.0.14206865"

- name: Configure NDK environment
run: |
echo "ANDROID_NDK_HOME=$ANDROID_HOME/ndk/29.0.14206865" >> $GITHUB_ENV
echo "ANDROID_NDK_ROOT=$ANDROID_HOME/ndk/29.0.14206865" >> $GITHUB_ENV
echo "PATH=$ANDROID_HOME/ndk/29.0.14206865:$PATH" >> $GITHUB_ENV

- name: Decode Keystore
run: |
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > release.keystore

# --- Build ---
- name: Build App
run: ./gradlew :app:assembleRelease :app:assembleDebug

- name: Build Wear
run: ./gradlew :wear:assembleRelease :wear:assembleDebug

# Upload Artifact
- name: Upload App Release Artifact
uses: actions/upload-artifact@v4
with:
name: app-release
path: app/build/outputs/apk/release/*.apk

- name: Upload Wear Release Artifact
uses: actions/upload-artifact@v4
with:
name: wear-release
path: wear/build/outputs/apk/release/*.apk

- name: Upload App Debug Artifact
uses: actions/upload-artifact@v4
with:
name: app-debug
path: app/build/outputs/apk/debug/*.apk

- name: Upload Wear Debug Artifact
uses: actions/upload-artifact@v4
with:
name: wear-debug
path: wear/build/outputs/apk/debug/*.apk

release:
runs-on: ubuntu-latest
needs: build

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Download App Release Artifact
uses: actions/download-artifact@v4
with:
name: app-release
path: artifacts/app/release

- name: Download Wear Release Artifact
uses: actions/download-artifact@v4
with:
name: wear-release
path: artifacts/wear/release

- name: Download App Debug Artifact
uses: actions/download-artifact@v4
with:
name: app-debug
path: artifacts/app/debug

- name: Download Wear Debug Artifact
uses: actions/download-artifact@v4
with:
name: wear-debug
path: artifacts/wear/debug

- name: Check if pre-release exists
id: check_prerelease
run: |
if gh release view pre-release >/dev/null 2>&1; then
echo "exists=true" >> $GITHUB_OUTPUT
else
echo "exists=false" >> $GITHUB_OUTPUT
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Delete old pre-release
if: steps.check_prerelease.outputs.exists == 'true'
run: gh release delete pre-release -y --cleanup-tag
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Create pre-release
uses: softprops/action-gh-release@v2
with:
tag_name: pre-release
prerelease: true
files: |
artifacts/app/release/*.apk
artifacts/wear/release/*.apk
artifacts/app/debug/*.apk
artifacts/wear/debug/*.apk
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
10 changes: 10 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,15 @@ android {
variant.resValue("string", "versionName", variant.versionName)
}

signingConfigs {
release {
storeFile rootProject.ext.keystoreFile
storePassword rootProject.ext.keystorePassword
keyAlias rootProject.ext.keyAlias
keyPassword rootProject.ext.keyPassword
}
}

buildTypes {
release {
postprocessing {
Expand All @@ -65,6 +74,7 @@ android {
'proguard-rules.pro'
}
}
signingConfig signingConfigs.release
debuggable = false
}
}
Expand Down
7 changes: 7 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,11 @@ plugins {
alias(libs.plugins.navigation.safeargs) apply false
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.compose.compiler) apply false
}

ext {
keystoreFile = file(System.getenv("KEYSTORE_FILE") ?: "release.keystore")
keystorePassword = System.getenv("KEYSTORE_PASSWORD") ?: ""
keyAlias = System.getenv("KEY_ALIAS") ?: ""
keyPassword = System.getenv("KEY_PASSWORD") ?: ""
}
10 changes: 10 additions & 0 deletions wear/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,23 @@ android {
)*/
}

signingConfigs {
create("release") {
storeFile = rootProject.extra["keystoreFile"] as File
storePassword = rootProject.extra["keystorePassword"] as String
keyAlias = rootProject.extra["keyAlias"] as String
keyPassword = rootProject.extra["keyPassword"] as String
}
}

buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
signingConfig = signingConfigs.getByName("release")
}
}
compileOptions {
Expand Down