name: "Build: Android" on: workflow_dispatch: workflow_call: inputs: semver: required: true type: string 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@v3 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@v3 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@v2 - name: 'Build Android Release' run: | cd mobile/android ./gradlew assembleRelease - 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@v3 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@v3 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@v3 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@v3 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 # Create app-x86-release APK artifact asset for Release - name: 'Upload x86 .apk Release Artifact (for Release)' uses: actions/upload-artifact@v3 if: inputs.semver != '' # If this workflow is called from release.yml with: name: robosats-${{ inputs.semver }}-x86.apk path: mobile/android/app/build/outputs/apk/release/app-x86-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/release-action@v1.13.0 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 # Upload x86 APK to pre-release - name: 'Upload x86 Pre-release APK Asset' id: upload-release-x86-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-release.apk asset_name: robosats-${{ steps.commit.outputs.short }}-x86.apk asset_content_type: application/apk