Build: Android #197
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "Build: Android" | |
on: | |
workflow_dispatch: | |
workflow_call: | |
inputs: | |
semver: | |
required: true | |
type: string | |
secrets: | |
KEYSTORE: | |
required: true | |
KEY_ALIAS: | |
required: true | |
KEY_PASS: | |
required: true | |
KEY_STORE_PASS: | |
required: true | |
push: | |
branches: [ "main" ] | |
paths: [ "mobile", "frontend" ] | |
pull_request: | |
branches: [ "main" ] | |
paths: [ "mobile", "frontend" ] | |
jobs: | |
build-android: | |
permissions: write-all | |
runs-on: ubuntu-latest | |
steps: | |
- name: 'Checkout' | |
uses: actions/checkout@v4 | |
- name: 'Download Android Web.bundle Artifact (built frontend)' | |
if: inputs.semver == '' # Only if workflow fired from frontend-build.yml | |
uses: dawidd6/action-download-artifact@v7 | |
with: | |
workflow: frontend-build.yml | |
workflow_conclusion: success | |
name: mobile-web.bundle | |
path: mobile/html/Web.bundle | |
- name: 'Download main.js Artifact for a release' | |
if: inputs.semver != '' # Only if fired as job in release.yml | |
uses: actions/download-artifact@v4 | |
with: | |
name: mobile-web.bundle | |
path: mobile/html/Web.bundle | |
- name: 'Install npm Dependencies' | |
run: | | |
cd mobile | |
npm install | |
- name: 'Patch modules' # react-native-tor and react-native-encrypted-storage rely on deprecated jcenter repositories. We patch the modules temporarily | |
run: | | |
cd mobile | |
cp -r patch_modules/* node_modules/ | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: temurin | |
java-version: 11 | |
- name: Setup Gradle | |
uses: gradle/gradle-build-action@v3 | |
- name: Decode Keystore | |
id: decode_keystore | |
uses: timheuer/[email protected] | |
with: | |
fileName: 'keystore.jks' | |
fileDir: './' | |
encodedString: ${{ secrets.KEYSTORE }} | |
- name: 'Build Android Release' | |
run: | | |
cd mobile/android | |
./gradlew assembleRelease | |
env: | |
KEY_ALIAS: ${{ secrets.KEY_ALIAS }} | |
KEY_PASS: ${{ secrets.KEY_PASS }} | |
KEY_STORE_PASS: ${{ secrets.KEY_STORE_PASS }} | |
- name: 'Check for non-FOSS libraries' | |
run: | | |
wget https://github.com/iBotPeaches/Apktool/releases/download/v2.7.0/apktool_2.7.0.jar | |
wget https://github.com/iBotPeaches/Apktool/raw/master/scripts/linux/apktool | |
# clone the repo | |
git clone https://gitlab.com/IzzyOnDroid/repo.git | |
# create a directory for Apktool and move the apktool* files there | |
mkdir -p repo/lib/radar/tool | |
mv apktool* repo/lib/radar/tool | |
# create an alias for ease of use | |
chmod u+x repo/lib/radar/tool/apktool | |
mv repo/lib/radar/tool/apktool_2.7.0.jar repo/lib/radar/tool/apktool.jar | |
repo/bin/scanapk.php mobile/android/app/build/outputs/apk/release/app-universal-release.apk | |
- name: 'Get Commit Hash' | |
id: commit | |
uses: pr-mpt/actions-commit-hash@v3 | |
# Create artifacts (only for Release) | |
# Create app-universal-release APK artifact asset for Release | |
- name: 'Upload universal .apk Release Artifact (for Release)' | |
uses: actions/upload-artifact@v4 | |
if: inputs.semver != '' # If this workflow is called from release.yml | |
with: | |
name: robosats-${{ inputs.semver }}-universal.apk | |
path: mobile/android/app/build/outputs/apk/release/app-universal-release.apk | |
# Create app-arm64-v8a-release APK artifact asset for Release | |
- name: 'Upload arm64-v8a .apk Release Artifact (for Release)' | |
uses: actions/upload-artifact@v4 | |
if: inputs.semver != '' # If this workflow is called from release.yml | |
with: | |
name: robosats-${{ inputs.semver }}-arm64-v8a.apk | |
path: mobile/android/app/build/outputs/apk/release/app-arm64-v8a-release.apk | |
# Create app-armeabi-v7a-release APK artifact asset for Release | |
- name: 'Upload armeabi-v7a .apk Release Artifact (for Release)' | |
uses: actions/upload-artifact@v4 | |
if: inputs.semver != '' # If this workflow is called from release.yml | |
with: | |
name: robosats-${{ inputs.semver }}-armeabi-v7a.apk | |
path: mobile/android/app/build/outputs/apk/release/app-armeabi-v7a-release.apk | |
# Create app-x86_64-release APK artifact asset for Release | |
- name: 'Upload x86_64 .apk Release Artifact (for Release)' | |
uses: actions/upload-artifact@v4 | |
if: inputs.semver != '' # If this workflow is called from release.yml | |
with: | |
name: robosats-${{ inputs.semver }}-x86_64.apk | |
path: mobile/android/app/build/outputs/apk/release/app-x86_64-release.apk | |
- name: 'Create Pre-release' | |
id: create_release | |
if: inputs.semver == '' # only if this workflow is not called from a push to tag (a Release) | |
uses: ncipollo/[email protected] | |
with: | |
tag: android-${{ steps.commit.outputs.short }} | |
name: robosats-android-${{ steps.commit.outputs.short }} | |
prerelease: true | |
# Upload universal APK to pre-release | |
- name: 'Upload universal Pre-release APK Asset' | |
id: upload-release-universal-apk-asset | |
if: inputs.semver == '' # only if this workflow is not called from a push to tag (a Release) | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./mobile/android/app/build/outputs/apk/release/app-universal-release.apk | |
asset_name: robosats-${{ steps.commit.outputs.short }}-universal.apk | |
asset_content_type: application/apk | |
# Upload arm64-v8a APK to pre-release | |
- name: 'Upload arm64-v8a Pre-release APK Asset' | |
id: upload-release-arm64-v8a-apk-asset | |
if: inputs.semver == '' # only if this workflow is not called from a push to tag (a Release) | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./mobile/android/app/build/outputs/apk/release/app-arm64-v8a-release.apk | |
asset_name: robosats-${{ steps.commit.outputs.short }}-arm64-v8a.apk | |
asset_content_type: application/apk | |
# Upload armeabi-v7a APK to pre-release | |
- name: 'Upload armeabi-v7a Pre-release APK Asset' | |
id: upload-release-armeabi-v7a-apk-asset | |
if: inputs.semver == '' # only if this workflow is not called from a push to tag (a Release) | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./mobile/android/app/build/outputs/apk/release/app-armeabi-v7a-release.apk | |
asset_name: robosats-${{ steps.commit.outputs.short }}-armeabi-v7a.apk | |
asset_content_type: application/apk | |
# Upload x86_64 APK to pre-release | |
- name: 'Upload x86_64 Pre-release APK Asset' | |
id: upload-release-x86_64-apk-asset | |
if: inputs.semver == '' # only if this workflow is not called from a push to tag (a Release) | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./mobile/android/app/build/outputs/apk/release/app-x86_64-release.apk | |
asset_name: robosats-${{ steps.commit.outputs.short }}-x86_64.apk | |
asset_content_type: application/apk |