diff --git a/.github/workflows/cake_wallet.yaml b/.github/workflows/cake_wallet.yaml new file mode 100644 index 00000000..a7169c75 --- /dev/null +++ b/.github/workflows/cake_wallet.yaml @@ -0,0 +1,250 @@ +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@v6 + 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) \ No newline at end of file diff --git a/.github/workflows/compat.yaml b/.github/workflows/compat.yaml index 0f163994..7f27a05b 100644 --- a/.github/workflows/compat.yaml +++ b/.github/workflows/compat.yaml @@ -1,5 +1,8 @@ name: compatibility check on: [push] +permissions: + issues: write + pull-requests: write jobs: mingw: strategy: @@ -33,7 +36,6 @@ jobs: with: path: | ${{ matrix.coin }}/contrib/depends/built/* - ${{ matrix.coin }}/contrib/depends/sources/* key: depends-${{ github.job }}-${{ matrix.coin }}-${{ hashFiles('*/contrib/depends/packages/*.mk') }} - name: ${{ matrix.coin }}/x86_64-w64-mingw32 run: ./build_single.sh ${{ matrix.coin }} x86_64-w64-mingw32 -j$(nproc) @@ -100,7 +102,6 @@ jobs: with: path: | ${{ matrix.coin }}/contrib/depends/built/* - ${{ matrix.coin }}/contrib/depends/sources/* key: depends-${{ github.job }}-${{ matrix.coin }}-${{ hashFiles('*/contrib/depends/packages/*.mk') }} - name: ${{ matrix.coin }}/x86_64-linux-android run: ./build_single.sh ${{ matrix.coin }} x86_64-linux-android -j$(nproc) @@ -162,7 +163,6 @@ jobs: with: path: | ${{ matrix.coin }}/contrib/depends/built/* - ${{ matrix.coin }}/contrib/depends/sources/* key: depends-${{ github.job }}-${{ matrix.coin }}-${{ hashFiles('*/contrib/depends/packages/*.mk') }} - name: ${{ matrix.coin }}/x86_64-linux-gnu run: ./build_single.sh ${{ matrix.coin }} x86_64-linux-gnu -j$(nproc) @@ -192,7 +192,7 @@ jobs: strategy: matrix: coin: [monero, wownero] - runs-on: buildjet-4vcpu-ubuntu-2204-arm + runs-on: buildjet-2vcpu-ubuntu-2204-arm steps: - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -221,7 +221,6 @@ jobs: with: path: | ${{ matrix.coin }}/contrib/depends/built/* - ${{ matrix.coin }}/contrib/depends/sources/* key: depends-${{ github.job }}-${{ matrix.coin }}-${{ hashFiles('*/contrib/depends/packages/*.mk') }} - name: ${{ matrix.coin }}/aarch64-meego-linux-gnu run: | @@ -270,7 +269,6 @@ jobs: with: path: | ${{ matrix.coin }}/contrib/depends/built/* - ${{ matrix.coin }}/contrib/depends/sources/* key: depends-${{ github.job }}-${{ matrix.coin }}-${{ hashFiles('*/contrib/depends/packages/*.mk') }} - name: ${{ matrix.coin }}/aarch64-meego-linux-gnu run: | @@ -326,7 +324,6 @@ jobs: with: path: | ${{ matrix.coin }}/contrib/depends/built/* - ${{ matrix.coin }}/contrib/depends/sources/* key: depends-${{ github.job }}-${{ matrix.coin }}-${{ hashFiles('*/contrib/depends/packages/*.mk') }} - name: ${{ matrix.coin }}/x86_64-apple-darwin11 run: ./build_single.sh ${{ matrix.coin }} x86_64-apple-darwin11 -j$(nproc) @@ -391,7 +388,6 @@ jobs: with: path: | ${{ matrix.coin }}/contrib/depends/built/* - ${{ matrix.coin }}/contrib/depends/sources/* key: depends-${{ github.job }}-${{ matrix.coin }}-${{ hashFiles('*/contrib/depends/packages/*.mk') }} - name: build run: | @@ -449,7 +445,6 @@ jobs: with: path: | ${{ matrix.coin }}/contrib/depends/built/* - ${{ matrix.coin }}/contrib/depends/sources/* key: depends-${{ github.job }}-${{ matrix.coin }}-${{ hashFiles('*/contrib/depends/packages/*.mk') }} - name: build run: | @@ -471,4 +466,56 @@ jobs: uses: actions/upload-artifact@v4 with: name: ios ${{ matrix.coin }} - path: release/${{ matrix.coin }} \ No newline at end of file + path: release/${{ matrix.coin }} + comment_pr: + name: comment on pr + runs-on: ubuntu-latest + needs: [ + mingw, android, linux, sailfishos_aarch64, sailfishos_i486, darwin, macos, ios + ] + steps: + - uses: actions/github-script@v6 + 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 libraries + - name: 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 libraries #${{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 libraries #${{github.run_id}}](https://nightly.link/MrCyjaneK/monero_c/actions/runs/${{github.run_id}}) (this comment will update whenever you push) \ No newline at end of file diff --git a/.github/workflows/xmruw.yaml b/.github/workflows/xmruw.yaml index bb862116..5823405e 100644 --- a/.github/workflows/xmruw.yaml +++ b/.github/workflows/xmruw.yaml @@ -1,6 +1,11 @@ name: Build xmruw run-name: Building xmruw for supported targets -on: [push] +on: + pull_request: + types: [opened, reopened, synchronize] +permissions: + issues: write + pull-requests: write jobs: android: strategy: @@ -54,4 +59,50 @@ jobs: uses: actions/upload-artifact@v4 with: name: ${{ matrix.coin }} xmruw apk - path: unnamed_monero_wallet/build/app/outputs/flutter-apk/*.apk \ No newline at end of file + path: unnamed_monero_wallet/build/app/outputs/flutter-apk/*.apk + - uses: actions/github-script@v6 + 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 xmruw + + - name: 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 xmruw #${{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 xmruw #${{github.run_id}}](https://nightly.link/MrCyjaneK/monero_c/actions/runs/${{github.run_id}}) (this link will update whenever you push) \ No newline at end of file