name: Build cake_wallet for android on: pull_request: types: [opened, reopened, synchronize] permissions: issues: write pull-requests: write jobs: cake_wallet: runs-on: ubuntu-20.04 env: STORE_PASS: test@cake_wallet KEY_PASS: test@cake_wallet PR_NUMBER: ${{ github.ref_name }} steps: - name: set branch name run: echo "BRANCH_NAME=${{ github.ref_name }}" >> $GITHUB_ENV - uses: actions/checkout@v4 with: repository: MrCyjaneK/monero_c fetch-depth: 0 submodules: recursive - name: Patch sources run: | git config --global --add safe.directory '*' git config --global user.email "ci@mrcyjanek.net" git config --global user.name "CI mrcyjanek.net" ./apply_patches.sh monero ./apply_patches.sh wownero - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: ${{ github.job }}-monero - name: Cache built if: ${{ !startsWith(github.ref, 'refs/tags/v') }} uses: actions/cache@v4 with: path: | */contrib/depends/built/* key: depends-${{ github.job }}-monero-${{ hashFiles('*/contrib/depends/packages/*.mk') }} - name: build monero_c run: | ./build_single.sh monero aarch64-linux-android -j$(nproc) ./build_single.sh wownero aarch64-linux-android -j$(nproc) unxz -f -k release/*/*.xz mv release /opt/monero_c_release - name: Free Disk Space (Ubuntu) uses: insightsengineering/disk-space-reclaimer@v1 with: tools-cache: true android: false dotnet: true haskell: true large-packages: true swap-storage: true docker-images: true - uses: actions/setup-java@v1 with: java-version: "11.x" - name: Configure placeholder git details run: | git config --global user.email "CI@cakewallet.com" git config --global user.name "Cake Github Actions" - name: Flutter action uses: subosito/flutter-action@v1 with: flutter-version: "3.19.6" channel: stable - name: Install package dependencies run: sudo apt-get install -y curl unzip automake build-essential file pkg-config git python libtool libtinfo5 cmake clang - name: Execute Build and Setup Commands run: | sudo mkdir -p /opt/android sudo chown $USER /opt/android cd /opt/android -y curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh cargo install cargo-ndk git clone https://github.com/cake-tech/cake_wallet.git --branch main --depth=1 cd cake_wallet/scripts/android/ ./install_ndk.sh source ./app_env.sh cakewallet chmod +x pubspec_gen.sh ./app_config.sh mkdir -p /opt/android/cake_wallet/scripts/monero_c mv /opt/monero_c_release /opt/android/cake_wallet/scripts/monero_c/release - name: Install Flutter dependencies run: | cd /opt/android/cake_wallet flutter pub get - name: Generate KeyStore run: | cd /opt/android/cake_wallet/android/app keytool -genkey -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias testKey -noprompt -dname "CN=CakeWallet, OU=CakeWallet, O=CakeWallet, L=Florida, S=America, C=USA" -storepass $STORE_PASS -keypass $KEY_PASS - name: Generate key properties run: | cd /opt/android/cake_wallet flutter packages pub run tool/generate_android_key_properties.dart keyAlias=testKey storeFile=key.jks storePassword=$STORE_PASS keyPassword=$KEY_PASS - name: Generate localization run: | cd /opt/android/cake_wallet flutter packages pub run tool/generate_localization.dart - name: Build generated code run: | cd /opt/android/cake_wallet ./model_generator.sh - name: Add secrets run: | cd /opt/android/cake_wallet touch lib/.secrets.g.dart touch cw_evm/lib/.secrets.g.dart touch cw_solana/lib/.secrets.g.dart touch cw_core/lib/.secrets.g.dart touch cw_nano/lib/.secrets.g.dart touch cw_tron/lib/.secrets.g.dart echo "const salt = 'd551f8841584b0ce37edf6fd59177d35';" > lib/.secrets.g.dart echo "const keychainSalt = '34c626b6a4f8cb6789897c09';" >> lib/.secrets.g.dart echo "const key = 'd8ab7230137ebadeb1c4e429395eced1';" >> lib/.secrets.g.dart echo "const walletSalt = 'a9a49562';" >> lib/.secrets.g.dart echo "const shortKey = 'c1b21c5050527842350dc8f5';" >> lib/.secrets.g.dart echo "const backupSalt = 'b3e42404f90ca8e8';" >> lib/.secrets.g.dart echo "const backupKeychainSalt = '9e0f3c4d347bc99509695a86';" >> lib/.secrets.g.dart echo "const changeNowApiKey = '';" >> lib/.secrets.g.dart echo "const changeNowApiKeyDesktop = '';" >> lib/.secrets.g.dart echo "const wyreSecretKey = '';" >> lib/.secrets.g.dart echo "const wyreApiKey = '';" >> lib/.secrets.g.dart echo "const wyreAccountId = '';" >> lib/.secrets.g.dart echo "const moonPayApiKey = '';" >> lib/.secrets.g.dart echo "const moonPaySecretKey = '';" >> lib/.secrets.g.dart echo "const sideShiftAffiliateId = '';" >> lib/.secrets.g.dart echo "const simpleSwapApiKey = '';" >> lib/.secrets.g.dart echo "const simpleSwapApiKeyDesktop = '';" >> lib/.secrets.g.dart echo "const onramperApiKey = '';" >> lib/.secrets.g.dart echo "const anypayToken = '';" >> lib/.secrets.g.dart echo "const ioniaClientId = '';" >> lib/.secrets.g.dart echo "const twitterBearerToken = '';" >> lib/.secrets.g.dart echo "const trocadorApiKey = '';" >> lib/.secrets.g.dart echo "const trocadorExchangeMarkup = '';" >> lib/.secrets.g.dart echo "const anonPayReferralCode = '';" >> lib/.secrets.g.dart echo "const fiatApiKey = '';" >> lib/.secrets.g.dart echo "const payfuraApiKey = '';" >> lib/.secrets.g.dart echo "const ankrApiKey = '';" >> lib/.secrets.g.dart echo "const etherScanApiKey = '';" >> cw_evm/lib/.secrets.g.dart echo "const moralisApiKey = '';" >> cw_evm/lib/.secrets.g.dart echo "const chatwootWebsiteToken = '';" >> lib/.secrets.g.dart echo "const exolixApiKey = '';" >> lib/.secrets.g.dart echo "const robinhoodApplicationId = '';" >> lib/.secrets.g.dart echo "const exchangeHelperApiKey = '';" >> lib/.secrets.g.dart echo "const walletConnectProjectId = '';" >> lib/.secrets.g.dart echo "const moralisApiKey = '';" >> lib/.secrets.g.dart echo "const polygonScanApiKey = '';" >> cw_evm/lib/.secrets.g.dart echo "const ankrApiKey = '';" >> cw_solana/lib/.secrets.g.dart echo "const testCakePayApiKey = '';" >> lib/.secrets.g.dart echo "const cakePayApiKey = '';" >> lib/.secrets.g.dart echo "const authorization = '';" >> lib/.secrets.g.dart echo "const CSRFToken = '';" >> lib/.secrets.g.dart echo "const quantexExchangeMarkup = '';" >> lib/.secrets.g.dart echo "const nano2ApiKey = '';" >> cw_nano/lib/.secrets.g.dart echo "const nanoNowNodesApiKey = '';" >> cw_nano/lib/.secrets.g.dart echo "const tronGridApiKey = '';" >> cw_tron/lib/.secrets.g.dart echo "const tronNowNodesApiKey = '';" >> cw_tron/lib/.secrets.g.dart - name: Rename app run: | echo -e "id=com.cakewallet.moneroc_${{ env.PR_NUMBER }}\nname=${{ github.ref_name }}" | tr '/-' '_' > /opt/android/cake_wallet/android/app.properties - name: Build run: | cd /opt/android/cake_wallet flutter build apk --release --split-per-abi - name: Rename apk file run: | cd /opt/android/cake_wallet/build/app/outputs/flutter-apk mkdir test-apk cp app-arm64-v8a-release.apk "test-apk/$(echo ${{ github.ref_name }} | tr '/-' '_').apk" - name: Upload Artifact uses: kittaakos/upload-artifact-as-is@v0 with: path: /opt/android/cake_wallet/build/app/outputs/flutter-apk/test-apk/ - name: remove android_ndk run: | rm -rf monero/contrib/depends/built/*/android_ndk rm -rf monero/contrib/depends/sources/android-ndk-r26d-linux.zip rm -rf wownero/contrib/depends/built/*/android_ndk rm -rf wownero/contrib/depends/sources/android-ndk-r26d-linux.zip - uses: actions/github-script@v7 continue-on-error: true id: get_issue_number with: script: | if (context.issue.number) { // Return issue number if present return context.issue.number; } else { // Otherwise return issue number from commit return ( await github.rest.repos.listPullRequestsAssociatedWithCommit({ commit_sha: context.sha, owner: context.repo.owner, repo: context.repo.repo, }) ).data[0].number; } result-encoding: string - name: Find Comment continue-on-error: true uses: peter-evans/find-comment@v3 id: fc with: issue-number: ${{steps.get_issue_number.outputs.result}} comment-author: 'github-actions[bot]' body-includes: download cake_wallet - name: Create or update comment continue-on-error: true if: steps.fc.outcome == 'success' uses: peter-evans/create-or-update-comment@v4 with: comment-id: ${{ steps.fc.outputs.comment-id }} issue-number: ${{steps.get_issue_number.outputs.result}} body: | [download cake_wallet #${{github.run_id}}](https://nightly.link/MrCyjaneK/monero_c/actions/runs/${{github.run_id}}) edit-mode: replace - name: Create comment continue-on-error: true if: steps.fc.outcome == 'failure' uses: peter-evans/create-or-update-comment@v4 with: issue-number: ${{steps.get_issue_number.outputs.result}} body: | [download cake_wallet #${{github.run_id}}](https://nightly.link/MrCyjaneK/monero_c/actions/runs/${{github.run_id}}) (this comment will update whenever you push)