1
0
mirror of https://github.com/avinal/nikki.git synced 2026-07-03 21:40:09 +05:30

Add CI/CD workflows and release signing config

Build workflow: runs tests + assembles debug APK on pull requests.
Release workflow: builds signed APK and uploads to GitHub release.
Signing config reads keystore from env vars (set by CI secrets).
Keystore files excluded from git.

Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
Co-Authored-By: Claude Opus 4.6 (1M context)
This commit is contained in:
2026-05-22 19:05:40 +05:30
parent d02edde30e
commit d2be80bc7d
4 changed files with 87 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
name: Build & Test
on:
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- uses: gradle/actions/setup-gradle@v4
- name: Run tests
run: ./gradlew :composeApp:testDebugUnitTest
- name: Build debug APK
run: ./gradlew :androidApp:assembleDebug
- name: Upload debug APK
uses: actions/upload-artifact@v4
with:
name: debug-apk
path: androidApp/build/outputs/apk/debug/*.apk
+39
View File
@@ -0,0 +1,39 @@
name: Release
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- uses: gradle/actions/setup-gradle@v4
- name: Decode keystore
run: echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > ${{ runner.temp }}/keystore.jks
- name: Build signed release APK
env:
KEYSTORE_PATH: ${{ runner.temp }}/keystore.jks
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
run: ./gradlew :androidApp:assembleRelease
- name: Upload release APK
env:
GH_TOKEN: ${{ github.token }}
run: |
mv androidApp/build/outputs/apk/release/androidApp-release.apk nikki-${{ github.event.release.tag_name }}.apk
gh release upload ${{ github.event.release.tag_name }} nikki-${{ github.event.release.tag_name }}.apk
+4
View File
@@ -26,6 +26,10 @@ index.html
script.js script.js
styles.css styles.css
# Signing
*.jks
*.keystore
# Dev artifacts # Dev artifacts
PLAN.md PLAN.md
Screenshot_*.png Screenshot_*.png
+13
View File
@@ -16,6 +16,18 @@ android {
versionName = "1.0.0" versionName = "1.0.0"
} }
signingConfigs {
create("release") {
val path = System.getenv("KEYSTORE_PATH")
if (path != null) {
storeFile = file(path)
storePassword = System.getenv("KEYSTORE_PASSWORD")
keyAlias = System.getenv("KEY_ALIAS")
keyPassword = System.getenv("KEY_PASSWORD")
}
}
}
buildTypes { buildTypes {
release { release {
isMinifyEnabled = true isMinifyEnabled = true
@@ -23,6 +35,7 @@ android {
getDefaultProguardFile("proguard-android-optimize.txt"), getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro" "proguard-rules.pro"
) )
signingConfig = signingConfigs.getByName("release")
} }
} }