Skip to content

fix: mobile app issues #112

fix: mobile app issues

fix: mobile app issues #112

Workflow file for this run

name: Capacitor
on:
pull_request:
paths:
# Native shell only wraps the web app; web/server-only changes do not alter the APK.
- ".github/workflows/capacitor.yml"
- "android/**"
- "ios/**"
- "native_www/**"
- "capacitor.config.ts"
- "scripts/prepare-native-web.mjs"
push:
branches:
- main
tags:
- "v*.*.*"
paths:
# Tags still run because GitHub does not evaluate path filters for tag pushes.
- ".github/workflows/capacitor.yml"
- "android/**"
- "ios/**"
- "native_www/**"
- "capacitor.config.ts"
- "scripts/prepare-native-web.mjs"
workflow_dispatch:
permissions:
contents: write
jobs:
android:
name: Build Android APK
runs-on: ubuntu-latest
env:
MISE_ENABLE_TOOLS: android-sdk,aube,java,node
steps:
- name: Check out repository
uses: actions/checkout@v5
- name: Set up mise tools
uses: jdx/mise-action@v4
with:
install: true
install_args: android-sdk aube java node
cache: true
- name: Install Android SDK packages
run: mise run setup:android-sdk
- name: Install JavaScript dependencies
run: mise exec -- aube install --frozen-lockfile
- name: Resolve app version
shell: bash
run: |
base_version=$(node -e "const fs = require('fs'); const source = fs.readFileSync('mix.exs', 'utf8'); const match = source.match(/version:\\s*\"([0-9]+\\.[0-9]+\\.[0-9]+(?:[-+][^\"]+)?)\"/); if (!match) process.exit(1); process.stdout.write(match[1]);")
artifact_version="${base_version}-${GITHUB_SHA::7}"
if [[ "${GITHUB_REF_TYPE}" == "tag" && "${GITHUB_REF_NAME}" == v* ]]; then
base_version="${GITHUB_REF_NAME#v}"
artifact_version="${base_version}"
fi
echo "MANAVAULT_VERSION=${base_version}" >> "$GITHUB_ENV"
echo "MANAVAULT_RELEASE_REPOSITORY=${GITHUB_REPOSITORY}" >> "$GITHUB_ENV"
echo "ARTIFACT_VERSION=${artifact_version}" >> "$GITHUB_ENV"
- name: Restore Android release keystore
if: github.ref_type == 'tag'
shell: bash
env:
MANAVAULT_ANDROID_KEYSTORE_BASE64: ${{ secrets.MANAVAULT_ANDROID_KEYSTORE_BASE64 }}
run: |
if [[ -z "${MANAVAULT_ANDROID_KEYSTORE_BASE64}" ]]; then
echo "Missing MANAVAULT_ANDROID_KEYSTORE_BASE64 secret. Run: mise exec -- aube run android:signing:setup" >&2
exit 1
fi
mkdir -p android/release
printf '%s' "${MANAVAULT_ANDROID_KEYSTORE_BASE64}" | base64 --decode > android/release/manavault-release.jks
echo "MANAVAULT_ANDROID_KEYSTORE=${GITHUB_WORKSPACE}/android/release/manavault-release.jks" >> "$GITHUB_ENV"
- name: Validate Android release keystore
if: github.ref_type == 'tag'
shell: bash
env:
MANAVAULT_ANDROID_KEYSTORE_PASSWORD: ${{ secrets.MANAVAULT_ANDROID_KEYSTORE_PASSWORD }}
MANAVAULT_ANDROID_KEY_ALIAS: ${{ secrets.MANAVAULT_ANDROID_KEY_ALIAS }}
run: |
keytool -list \
-keystore "${MANAVAULT_ANDROID_KEYSTORE}" \
-alias "${MANAVAULT_ANDROID_KEY_ALIAS}" \
-storepass "${MANAVAULT_ANDROID_KEYSTORE_PASSWORD}" \
-v
- name: Build release APK
if: github.ref_type == 'tag'
env:
MANAVAULT_ANDROID_KEYSTORE_PASSWORD: ${{ secrets.MANAVAULT_ANDROID_KEYSTORE_PASSWORD }}
MANAVAULT_ANDROID_KEY_ALIAS: ${{ secrets.MANAVAULT_ANDROID_KEY_ALIAS }}
MANAVAULT_ANDROID_KEY_PASSWORD: ${{ secrets.MANAVAULT_ANDROID_KEYSTORE_PASSWORD }}
run: mise exec -- aube run android:build:release
- name: Build debug APK
if: github.ref_type != 'tag'
run: mise exec -- aube run android:build:debug
- name: Stage APK
shell: bash
run: |
mkdir -p dist/native
if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then
cp android/app/build/outputs/apk/release/app-release.apk "dist/native/manavault-${ARTIFACT_VERSION}-release.apk"
else
cp android/app/build/outputs/apk/debug/app-debug.apk "dist/native/manavault-${ARTIFACT_VERSION}-debug.apk"
fi
- name: Upload APK artifact
uses: actions/upload-artifact@v6
with:
name: manavault-${{ env.ARTIFACT_VERSION }}-${{ github.ref_type == 'tag' && 'release' || 'debug' }}-apk
path: dist/native/*.apk
if-no-files-found: error
- name: Attach APK to GitHub release
if: github.ref_type == 'tag'
uses: softprops/action-gh-release@v3
with:
generate_release_notes: true
files: dist/native/*.apk