Skip to content

ViKey CI

ViKey CI #541

Workflow file for this run

name: ViKey CI
on:
workflow_dispatch:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: gradle/actions/wrapper-validation@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: 21
distribution: temurin
- name: Write release keystore
env:
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
run: |
if [ -n "$KEYSTORE_BASE64" ]; then
echo "$KEYSTORE_BASE64" | base64 -d > "${{ runner.temp }}/vikey-release.jks"
echo "Keystore written"
else
echo "No KEYSTORE_BASE64 secret; will use debug signing"
fi
- name: Build full version (with Qwen .so)
env:
KS_PASS: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASS: ${{ secrets.KEY_PASSWORD }}
run: |
KS="${{ runner.temp }}/vikey-release.jks"
EXTRA=""
if [ -f "$KS" ]; then
EXTRA="-PreleaseKeystore=$KS -PreleaseKeystorePassword=$KS_PASS -PreleaseKeyAlias=$KEY_ALIAS -PreleaseKeyPassword=$KEY_PASS"
fi
./gradlew clean assembleRelease $EXTRA -Pandroid.isReproducibleBuild=true
shell: bash
- name: Stash full APKs
run: |
mkdir -p /tmp/apks
for apk in app/build/outputs/apk/release/app-*-release.apk; do
base=$(basename "$apk")
abi=$(echo "$base" | sed 's/app-\(.*\)-release\.apk/\1/')
cp "$apk" "/tmp/apks/ViKey-${GITHUB_REF_NAME}-${abi}.apk"
done
- name: Strip Qwen .so for lite build
run: |
rm -rf app/src/main/jniLibs/
- name: Build lite version (without Qwen)
env:
KS_PASS: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASS: ${{ secrets.KEY_PASSWORD }}
run: |
KS="${{ runner.temp }}/vikey-release.jks"
EXTRA=""
if [ -f "$KS" ]; then
EXTRA="-PreleaseKeystore=$KS -PreleaseKeystorePassword=$KS_PASS -PreleaseKeyAlias=$KEY_ALIAS -PreleaseKeyPassword=$KEY_PASS"
fi
./gradlew assembleRelease $EXTRA -Pandroid.isReproducibleBuild=true
shell: bash
- name: Rename and stash lite APKs
run: |
for apk in app/build/outputs/apk/release/app-*-release.apk; do
base=$(basename "$apk")
abi=$(echo "$base" | sed 's/app-\(.*\)-release\.apk/\1/')
cp "$apk" "/tmp/apks/ViKey-${GITHUB_REF_NAME}-lite-${abi}.apk"
done
- name: Upload full APKs as artifact
uses: actions/upload-artifact@v4
with:
name: ViKey-${{ github.ref_name }}-full
path: /tmp/apks/ViKey-${{ github.ref_name }}-*.apk
- name: Upload lite APKs as artifact
uses: actions/upload-artifact@v4
with:
name: ViKey-${{ github.ref_name }}-lite
path: /tmp/apks/ViKey-${{ github.ref_name }}-lite-*.apk
- name: Create Release
if: startsWith(github.ref, 'refs/tags/')
env:
GH_TOKEN: ${{ github.token }}
run: |
VERSION="${GITHUB_REF_NAME#v}"
PRERELEASE=""
if echo "$GITHUB_REF_NAME" | grep -qi "beta\|alpha\|rc"; then PRERELEASE="--prerelease"; fi
gh release delete "$GITHUB_REF_NAME" --repo ${{ github.repository }} --yes 2>/dev/null || true
APKS=$(ls /tmp/apks/ViKey-*.apk 2>/dev/null || true)
if [ -n "$APKS" ]; then
gh release create "$GITHUB_REF_NAME" \
--repo ${{ github.repository }} \
--title "ViKey $GITHUB_REF_NAME" \
$PRERELEASE \
--notes "Full variants include Qwen .so for language model (user provides GGUF).\nLite variants exclude Qwen and fall back to frequency-based suggestions." \
$APKS
fi