Update automated_integration_test.yml

Omar Hatem committed Dec 17, 2024 at 01:10 UTC e4deb8455adb9d9cd24ccd0485b7b0cdbfb6305a
1 file changed +298 -298
.github/workflows/automated_integration_test.yml
+298 -298
@@ -1,298 +1,298 @@
1 -#name: Automated Integration Tests
2 -#
3 -#on:
4 -# pull_request:
5 -# branches: [main, CW-659-Transaction-History-Automated-Tests]
6 -# workflow_dispatch:
7 -# inputs:
8 -# branch:
9 -# description: "Branch name to build"
10 -# required: true
11 -# default: "main"
12 -#
13 -#jobs:
14 -# Automated_integration_test:
15 -# runs-on: ubuntu-20.04
16 -# strategy:
17 -# fail-fast: false
18 -# matrix:
19 -# api-level: [29]
20 -# # arch: [x86, x86_64]
21 -# env:
22 -# STORE_PASS: test@cake_wallet
23 -# KEY_PASS: test@cake_wallet
24 -# PR_NUMBER: ${{ github.event.number }}
25 -#
26 -# steps:
27 -# - name: is pr
28 -# if: github.event_name == 'pull_request'
29 -# run: echo "BRANCH_NAME=${GITHUB_HEAD_REF}" >> $GITHUB_ENV
30 -#
31 -# - name: is not pr
32 -# if: github.event_name != 'pull_request'
33 -# run: echo "BRANCH_NAME=${{ github.event.inputs.branch }}" >> $GITHUB_ENV
34 -#
35 -# - name: Free Disk Space (Ubuntu)
36 -# uses: insightsengineering/disk-space-reclaimer@v1
37 -# with:
38 -# tools-cache: true
39 -# android: false
40 -# dotnet: true
41 -# haskell: true
42 -# large-packages: true
43 -# swap-storage: true
44 -# docker-images: true
45 -#
46 -# - uses: actions/checkout@v2
47 -# - uses: actions/setup-java@v2
48 -# with:
49 -# distribution: "temurin"
50 -# java-version: "17"
51 -# - name: Configure placeholder git details
52 -# run: |
53 -# git config --global user.email "CI@cakewallet.com"
54 -# git config --global user.name "Cake Github Actions"
55 -# - name: Flutter action
56 -# uses: subosito/flutter-action@v1
57 -# with:
58 -# flutter-version: "3.24.0"
59 -# channel: stable
60 -#
61 -# - name: Install package dependencies
62 -# run: |
63 -# sudo apt update
64 -# sudo apt-get install -y curl unzip automake build-essential file pkg-config git python libtool libtinfo5 cmake clang
65 -#
66 -# - name: Execute Build and Setup Commands
67 -# run: |
68 -# sudo mkdir -p /opt/android
69 -# sudo chown $USER /opt/android
70 -# cd /opt/android
71 -# -y curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
72 -# cargo install cargo-ndk
73 -# git clone https://github.com/cake-tech/cake_wallet.git --branch ${{ env.BRANCH_NAME }}
74 -# cd cake_wallet/scripts/android/
75 -# ./install_ndk.sh
76 -# source ./app_env.sh cakewallet
77 -# chmod +x pubspec_gen.sh
78 -# ./app_config.sh
79 -#
80 -# - name: Cache Externals
81 -# id: cache-externals
82 -# uses: actions/cache@v3
83 -# with:
84 -# path: |
85 -# /opt/android/cake_wallet/cw_haven/android/.cxx
86 -# /opt/android/cake_wallet/scripts/monero_c/release
87 -# key: ${{ hashFiles('**/prepare_moneroc.sh' ,'**/build_monero_all.sh' ,'**/cache_dependencies.yml') }}
88 -#
89 -# - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }}
90 -# name: Generate Externals
91 -# run: |
92 -# cd /opt/android/cake_wallet/scripts/android/
93 -# source ./app_env.sh cakewallet
94 -# ./build_monero_all.sh
95 -#
96 -# - name: Install Flutter dependencies
97 -# run: |
98 -# cd /opt/android/cake_wallet
99 -# flutter pub get
100 -#
101 -#
102 -# - name: Install go and gomobile
103 -# run: |
104 -# # install go > 1.23:
105 -# wget https://go.dev/dl/go1.23.1.linux-amd64.tar.gz
106 -# sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.1.linux-amd64.tar.gz
107 -# export PATH=$PATH:/usr/local/go/bin
108 -# export PATH=$PATH:~/go/bin
109 -# go install golang.org/x/mobile/cmd/gomobile@latest
110 -# gomobile init
111 -#
112 -# - name: Build mwebd
113 -# run: |
114 -# # paths are reset after each step, so we need to set them again:
115 -# export PATH=$PATH:/usr/local/go/bin
116 -# export PATH=$PATH:~/go/bin
117 -# cd /opt/android/cake_wallet/scripts/android/
118 -# ./build_mwebd.sh --dont-install
119 -#
120 -# - name: Generate KeyStore
121 -# run: |
122 -# cd /opt/android/cake_wallet/android/app
123 -# 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
124 -#
125 -# - name: Generate key properties
126 -# run: |
127 -# cd /opt/android/cake_wallet
128 -# flutter packages pub run tool/generate_android_key_properties.dart keyAlias=testKey storeFile=key.jks storePassword=$STORE_PASS keyPassword=$KEY_PASS
129 -#
130 -# - name: Generate localization
131 -# run: |
132 -# cd /opt/android/cake_wallet
133 -# flutter packages pub run tool/generate_localization.dart
134 -#
135 -# - name: Build generated code
136 -# run: |
137 -# cd /opt/android/cake_wallet
138 -# ./model_generator.sh
139 -#
140 -# - name: Add secrets
141 -# run: |
142 -# cd /opt/android/cake_wallet
143 -# touch lib/.secrets.g.dart
144 -# touch cw_evm/lib/.secrets.g.dart
145 -# touch cw_solana/lib/.secrets.g.dart
146 -# touch cw_core/lib/.secrets.g.dart
147 -# touch cw_nano/lib/.secrets.g.dart
148 -# touch cw_tron/lib/.secrets.g.dart
149 -# echo "const salt = '${{ secrets.SALT }}';" > lib/.secrets.g.dart
150 -# echo "const keychainSalt = '${{ secrets.KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
151 -# echo "const key = '${{ secrets.KEY }}';" >> lib/.secrets.g.dart
152 -# echo "const walletSalt = '${{ secrets.WALLET_SALT }}';" >> lib/.secrets.g.dart
153 -# echo "const shortKey = '${{ secrets.SHORT_KEY }}';" >> lib/.secrets.g.dart
154 -# echo "const backupSalt = '${{ secrets.BACKUP_SALT }}';" >> lib/.secrets.g.dart
155 -# echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
156 -# echo "const changeNowApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
157 -# echo "const changeNowApiKeyDesktop = '${{ secrets.CHANGE_NOW_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
158 -# echo "const wyreSecretKey = '${{ secrets.WYRE_SECRET_KEY }}';" >> lib/.secrets.g.dart
159 -# echo "const wyreApiKey = '${{ secrets.WYRE_API_KEY }}';" >> lib/.secrets.g.dart
160 -# echo "const wyreAccountId = '${{ secrets.WYRE_ACCOUNT_ID }}';" >> lib/.secrets.g.dart
161 -# echo "const moonPayApiKey = '${{ secrets.MOON_PAY_API_KEY }}';" >> lib/.secrets.g.dart
162 -# echo "const moonPaySecretKey = '${{ secrets.MOON_PAY_SECRET_KEY }}';" >> lib/.secrets.g.dart
163 -# echo "const sideShiftAffiliateId = '${{ secrets.SIDE_SHIFT_AFFILIATE_ID }}';" >> lib/.secrets.g.dart
164 -# echo "const simpleSwapApiKey = '${{ secrets.SIMPLE_SWAP_API_KEY }}';" >> lib/.secrets.g.dart
165 -# echo "const simpleSwapApiKeyDesktop = '${{ secrets.SIMPLE_SWAP_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
166 -# echo "const onramperApiKey = '${{ secrets.ONRAMPER_API_KEY }}';" >> lib/.secrets.g.dart
167 -# echo "const anypayToken = '${{ secrets.ANY_PAY_TOKEN }}';" >> lib/.secrets.g.dart
168 -# echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart
169 -# echo "const twitterBearerToken = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
170 -# echo "const trocadorApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
171 -# echo "const trocadorExchangeMarkup = '${{ secrets.TROCADOR_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
172 -# echo "const anonPayReferralCode = '${{ secrets.ANON_PAY_REFERRAL_CODE }}';" >> lib/.secrets.g.dart
173 -# echo "const fiatApiKey = '${{ secrets.FIAT_API_KEY }}';" >> lib/.secrets.g.dart
174 -# echo "const payfuraApiKey = '${{ secrets.PAYFURA_API_KEY }}';" >> lib/.secrets.g.dart
175 -# echo "const ankrApiKey = '${{ secrets.ANKR_API_KEY }}';" >> lib/.secrets.g.dart
176 -# echo "const etherScanApiKey = '${{ secrets.ETHER_SCAN_API_KEY }}';" >> lib/.secrets.g.dart
177 -# echo "const polygonScanApiKey = '${{ secrets.POLYGON_SCAN_API_KEY }}';" >> lib/.secrets.g.dart
178 -# echo "const etherScanApiKey = '${{ secrets.ETHER_SCAN_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
179 -# echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
180 -# echo "const chatwootWebsiteToken = '${{ secrets.CHATWOOT_WEBSITE_TOKEN }}';" >> lib/.secrets.g.dart
181 -# echo "const exolixApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
182 -# echo "const robinhoodApplicationId = '${{ secrets.ROBINHOOD_APPLICATION_ID }}';" >> lib/.secrets.g.dart
183 -# echo "const exchangeHelperApiKey = '${{ secrets.ROBINHOOD_CID_CLIENT_SECRET }}';" >> lib/.secrets.g.dart
184 -# echo "const walletConnectProjectId = '${{ secrets.WALLET_CONNECT_PROJECT_ID }}';" >> lib/.secrets.g.dart
185 -# echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> lib/.secrets.g.dart
186 -# echo "const polygonScanApiKey = '${{ secrets.POLYGON_SCAN_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
187 -# echo "const ankrApiKey = '${{ secrets.ANKR_API_KEY }}';" >> cw_solana/lib/.secrets.g.dart
188 -# echo "const testCakePayApiKey = '${{ secrets.TEST_CAKE_PAY_API_KEY }}';" >> lib/.secrets.g.dart
189 -# echo "const cakePayApiKey = '${{ secrets.CAKE_PAY_API_KEY }}';" >> lib/.secrets.g.dart
190 -# echo "const authorization = '${{ secrets.CAKE_PAY_AUTHORIZATION }}';" >> lib/.secrets.g.dart
191 -# echo "const CSRFToken = '${{ secrets.CSRF_TOKEN }}';" >> lib/.secrets.g.dart
192 -# echo "const quantexExchangeMarkup = '${{ secrets.QUANTEX_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
193 -# echo "const nano2ApiKey = '${{ secrets.NANO2_API_KEY }}';" >> cw_nano/lib/.secrets.g.dart
194 -# echo "const nanoNowNodesApiKey = '${{ secrets.NANO_NOW_NODES_API_KEY }}';" >> cw_nano/lib/.secrets.g.dart
195 -# echo "const tronGridApiKey = '${{ secrets.TRON_GRID_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart
196 -# echo "const tronNowNodesApiKey = '${{ secrets.TRON_NOW_NODES_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart
197 -# echo "const meldTestApiKey = '${{ secrets.MELD_TEST_API_KEY }}';" >> lib/.secrets.g.dart
198 -# echo "const meldTestPublicKey = '${{ secrets.MELD_TEST_PUBLIC_KEY}}';" >> lib/.secrets.g.dart
199 -# echo "const letsExchangeBearerToken = '${{ secrets.LETS_EXCHANGE_TOKEN }}';" >> lib/.secrets.g.dart
200 -# echo "const letsExchangeAffiliateId = '${{ secrets.LETS_EXCHANGE_AFFILIATE_ID }}';" >> lib/.secrets.g.dart
201 -# echo "const stealthExBearerToken = '${{ secrets.STEALTH_EX_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
202 -# echo "const stealthExAdditionalFeePercent = '${{ secrets.STEALTH_EX_ADDITIONAL_FEE_PERCENT }}';" >> lib/.secrets.g.dart
203 -# echo "const moneroTestWalletSeeds ='${{ secrets.MONERO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
204 -# echo "const moneroLegacyTestWalletSeeds = '${{ secrets.MONERO_LEGACY_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
205 -# echo "const bitcoinTestWalletSeeds = '${{ secrets.BITCOIN_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
206 -# echo "const ethereumTestWalletSeeds = '${{ secrets.ETHEREUM_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
207 -# echo "const litecoinTestWalletSeeds = '${{ secrets.LITECOIN_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
208 -# echo "const bitcoinCashTestWalletSeeds = '${{ secrets.BITCOIN_CASH_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
209 -# echo "const polygonTestWalletSeeds = '${{ secrets.POLYGON_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
210 -# echo "const solanaTestWalletSeeds = '${{ secrets.SOLANA_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
211 -# echo "const tronTestWalletSeeds = '${{ secrets.TRON_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
212 -# echo "const nanoTestWalletSeeds = '${{ secrets.NANO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
213 -# echo "const wowneroTestWalletSeeds = '${{ secrets.WOWNERO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
214 -# echo "const moneroTestWalletReceiveAddress = '${{ secrets.MONERO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
215 -# echo "const bitcoinTestWalletReceiveAddress = '${{ secrets.BITCOIN_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
216 -# echo "const ethereumTestWalletReceiveAddress = '${{ secrets.ETHEREUM_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
217 -# echo "const litecoinTestWalletReceiveAddress = '${{ secrets.LITECOIN_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
218 -# echo "const bitcoinCashTestWalletReceiveAddress = '${{ secrets.BITCOIN_CASH_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
219 -# echo "const polygonTestWalletReceiveAddress = '${{ secrets.POLYGON_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
220 -# echo "const solanaTestWalletReceiveAddress = '${{ secrets.SOLANA_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
221 -# echo "const tronTestWalletReceiveAddress = '${{ secrets.TRON_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
222 -# echo "const nanoTestWalletReceiveAddress = '${{ secrets.NANO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
223 -# echo "const wowneroTestWalletReceiveAddress = '${{ secrets.WOWNERO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
224 -# echo "const moneroTestWalletBlockHeight = '${{ secrets.MONERO_TEST_WALLET_BLOCK_HEIGHT }}';" >> lib/.secrets.g.dart
225 -#
226 -# - name: Rename app
227 -# run: |
228 -# echo -e "id=com.cakewallet.test_${{ env.PR_NUMBER }}\nname=${{ env.BRANCH_NAME }}" > /opt/android/cake_wallet/android/app.properties
229 -#
230 -# - name: Build
231 -# run: |
232 -# cd /opt/android/cake_wallet
233 -# flutter build apk --release --split-per-abi
234 -#
235 -# # - name: Rename apk file
236 -# # run: |
237 -# # cd /opt/android/cake_wallet/build/app/outputs/flutter-apk
238 -# # mkdir test-apk
239 -# # cp app-arm64-v8a-release.apk test-apk/${{env.BRANCH_NAME}}.apk
240 -# # cp app-x86_64-release.apk test-apk/${{env.BRANCH_NAME}}_x86.apk
241 -#
242 -# # - name: Upload Artifact
243 -# # uses: kittaakos/upload-artifact-as-is@v0
244 -# # with:
245 -# # path: /opt/android/cake_wallet/build/app/outputs/flutter-apk/test-apk/
246 -#
247 -# # - name: Send Test APK
248 -# # continue-on-error: true
249 -# # uses: adrey/slack-file-upload-action@1.0.5
250 -# # with:
251 -# # token: ${{ secrets.SLACK_APP_TOKEN }}
252 -# # path: /opt/android/cake_wallet/build/app/outputs/flutter-apk/test-apk/${{env.BRANCH_NAME}}.apk
253 -# # channel: ${{ secrets.SLACK_APK_CHANNEL }}
254 -# # title: "${{ env.BRANCH_NAME }}.apk"
255 -# # filename: ${{ env.BRANCH_NAME }}.apk
256 -# # initial_comment: ${{ github.event.head_commit.message }}
257 -#
258 -# - name: 🦾 Enable KVM
259 -# run: |
260 -# echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
261 -# sudo udevadm control --reload-rules
262 -# sudo udevadm trigger --name-match=kvm
263 -#
264 -# - name: 🦾 Cache gradle
265 -# uses: gradle/actions/setup-gradle@v3
266 -#
267 -# - name: 🦾 Cache AVD
268 -# uses: actions/cache@v4
269 -# id: avd-cache
270 -# with:
271 -# path: |
272 -# ~/.android/avd/*
273 -# ~/.android/adb*
274 -# key: avd-${{ matrix.api-level }}
275 -#
276 -# - name: 🦾 Create AVD and generate snapshot for caching
277 -# if: steps.avd-cache.outputs.cache-hit != 'true'
278 -# uses: reactivecircus/android-emulator-runner@v2
279 -# with:
280 -# api-level: ${{ matrix.api-level }}
281 -# force-avd-creation: false
282 -# # arch: ${{ matrix.arch }}
283 -# emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
284 -# working-directory: /opt/android/cake_wallet
285 -# disable-animations: false
286 -# script: echo "Generated AVD snapshot for caching."
287 -#
288 -# - name: 🚀 Integration tests on Android Emulator
289 -# uses: reactivecircus/android-emulator-runner@v2
290 -# with:
291 -# api-level: ${{ matrix.api-level }}
292 -# force-avd-creation: false
293 -# emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
294 -# disable-animations: true
295 -# working-directory: /opt/android/cake_wallet
296 -# script: |
297 -# chmod a+rx integration_test_runner.sh
298 -# ./integration_test_runner.sh
\ No newline at end of file
1 +name: Automated Integration Tests
2 +
3 +on:
4 + # pull_request:
5 + # branches: [main, CW-659-Transaction-History-Automated-Tests]
6 + workflow_dispatch:
7 + inputs:
8 + branch:
9 + description: "Branch name to build"
10 + required: true
11 + default: "main"
12 +
13 +jobs:
14 + Automated_integration_test:
15 + runs-on: ubuntu-20.04
16 + strategy:
17 + fail-fast: false
18 + matrix:
19 + api-level: [29]
20 + # arch: [x86, x86_64]
21 + env:
22 + STORE_PASS: test@cake_wallet
23 + KEY_PASS: test@cake_wallet
24 + PR_NUMBER: ${{ github.event.number }}
25 +
26 + steps:
27 + - name: is pr
28 + if: github.event_name == 'pull_request'
29 + run: echo "BRANCH_NAME=${GITHUB_HEAD_REF}" >> $GITHUB_ENV
30 +
31 + - name: is not pr
32 + if: github.event_name != 'pull_request'
33 + run: echo "BRANCH_NAME=${{ github.event.inputs.branch }}" >> $GITHUB_ENV
34 +
35 + - name: Free Disk Space (Ubuntu)
36 + uses: insightsengineering/disk-space-reclaimer@v1
37 + with:
38 + tools-cache: true
39 + android: false
40 + dotnet: true
41 + haskell: true
42 + large-packages: true
43 + swap-storage: true
44 + docker-images: true
45 +
46 + - uses: actions/checkout@v2
47 + - uses: actions/setup-java@v2
48 + with:
49 + distribution: "temurin"
50 + java-version: "17"
51 + - name: Configure placeholder git details
52 + run: |
53 + git config --global user.email "CI@cakewallet.com"
54 + git config --global user.name "Cake Github Actions"
55 + - name: Flutter action
56 + uses: subosito/flutter-action@v1
57 + with:
58 + flutter-version: "3.24.0"
59 + channel: stable
60 +
61 + - name: Install package dependencies
62 + run: |
63 + sudo apt update
64 + sudo apt-get install -y curl unzip automake build-essential file pkg-config git python libtool libtinfo5 cmake clang
65 +
66 + - name: Execute Build and Setup Commands
67 + run: |
68 + sudo mkdir -p /opt/android
69 + sudo chown $USER /opt/android
70 + cd /opt/android
71 + -y curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
72 + cargo install cargo-ndk
73 + git clone https://github.com/cake-tech/cake_wallet.git --branch ${{ env.BRANCH_NAME }}
74 + cd cake_wallet/scripts/android/
75 + ./install_ndk.sh
76 + source ./app_env.sh cakewallet
77 + chmod +x pubspec_gen.sh
78 + ./app_config.sh
79 +
80 + - name: Cache Externals
81 + id: cache-externals
82 + uses: actions/cache@v3
83 + with:
84 + path: |
85 + /opt/android/cake_wallet/cw_haven/android/.cxx
86 + /opt/android/cake_wallet/scripts/monero_c/release
87 + key: ${{ hashFiles('**/prepare_moneroc.sh' ,'**/build_monero_all.sh' ,'**/cache_dependencies.yml') }}
88 +
89 + - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }}
90 + name: Generate Externals
91 + run: |
92 + cd /opt/android/cake_wallet/scripts/android/
93 + source ./app_env.sh cakewallet
94 + ./build_monero_all.sh
95 +
96 + - name: Install Flutter dependencies
97 + run: |
98 + cd /opt/android/cake_wallet
99 + flutter pub get
100 +
101 +
102 + - name: Install go and gomobile
103 + run: |
104 + # install go > 1.23:
105 + wget https://go.dev/dl/go1.23.1.linux-amd64.tar.gz
106 + sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.1.linux-amd64.tar.gz
107 + export PATH=$PATH:/usr/local/go/bin
108 + export PATH=$PATH:~/go/bin
109 + go install golang.org/x/mobile/cmd/gomobile@latest
110 + gomobile init
111 +
112 + - name: Build mwebd
113 + run: |
114 + # paths are reset after each step, so we need to set them again:
115 + export PATH=$PATH:/usr/local/go/bin
116 + export PATH=$PATH:~/go/bin
117 + cd /opt/android/cake_wallet/scripts/android/
118 + ./build_mwebd.sh --dont-install
119 +
120 + - name: Generate KeyStore
121 + run: |
122 + cd /opt/android/cake_wallet/android/app
123 + 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
124 +
125 + - name: Generate key properties
126 + run: |
127 + cd /opt/android/cake_wallet
128 + flutter packages pub run tool/generate_android_key_properties.dart keyAlias=testKey storeFile=key.jks storePassword=$STORE_PASS keyPassword=$KEY_PASS
129 +
130 + - name: Generate localization
131 + run: |
132 + cd /opt/android/cake_wallet
133 + flutter packages pub run tool/generate_localization.dart
134 +
135 + - name: Build generated code
136 + run: |
137 + cd /opt/android/cake_wallet
138 + ./model_generator.sh
139 +
140 + - name: Add secrets
141 + run: |
142 + cd /opt/android/cake_wallet
143 + touch lib/.secrets.g.dart
144 + touch cw_evm/lib/.secrets.g.dart
145 + touch cw_solana/lib/.secrets.g.dart
146 + touch cw_core/lib/.secrets.g.dart
147 + touch cw_nano/lib/.secrets.g.dart
148 + touch cw_tron/lib/.secrets.g.dart
149 + echo "const salt = '${{ secrets.SALT }}';" > lib/.secrets.g.dart
150 + echo "const keychainSalt = '${{ secrets.KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
151 + echo "const key = '${{ secrets.KEY }}';" >> lib/.secrets.g.dart
152 + echo "const walletSalt = '${{ secrets.WALLET_SALT }}';" >> lib/.secrets.g.dart
153 + echo "const shortKey = '${{ secrets.SHORT_KEY }}';" >> lib/.secrets.g.dart
154 + echo "const backupSalt = '${{ secrets.BACKUP_SALT }}';" >> lib/.secrets.g.dart
155 + echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
156 + echo "const changeNowApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
157 + echo "const changeNowApiKeyDesktop = '${{ secrets.CHANGE_NOW_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
158 + echo "const wyreSecretKey = '${{ secrets.WYRE_SECRET_KEY }}';" >> lib/.secrets.g.dart
159 + echo "const wyreApiKey = '${{ secrets.WYRE_API_KEY }}';" >> lib/.secrets.g.dart
160 + echo "const wyreAccountId = '${{ secrets.WYRE_ACCOUNT_ID }}';" >> lib/.secrets.g.dart
161 + echo "const moonPayApiKey = '${{ secrets.MOON_PAY_API_KEY }}';" >> lib/.secrets.g.dart
162 + echo "const moonPaySecretKey = '${{ secrets.MOON_PAY_SECRET_KEY }}';" >> lib/.secrets.g.dart
163 + echo "const sideShiftAffiliateId = '${{ secrets.SIDE_SHIFT_AFFILIATE_ID }}';" >> lib/.secrets.g.dart
164 + echo "const simpleSwapApiKey = '${{ secrets.SIMPLE_SWAP_API_KEY }}';" >> lib/.secrets.g.dart
165 + echo "const simpleSwapApiKeyDesktop = '${{ secrets.SIMPLE_SWAP_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
166 + echo "const onramperApiKey = '${{ secrets.ONRAMPER_API_KEY }}';" >> lib/.secrets.g.dart
167 + echo "const anypayToken = '${{ secrets.ANY_PAY_TOKEN }}';" >> lib/.secrets.g.dart
168 + echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart
169 + echo "const twitterBearerToken = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
170 + echo "const trocadorApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
171 + echo "const trocadorExchangeMarkup = '${{ secrets.TROCADOR_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
172 + echo "const anonPayReferralCode = '${{ secrets.ANON_PAY_REFERRAL_CODE }}';" >> lib/.secrets.g.dart
173 + echo "const fiatApiKey = '${{ secrets.FIAT_API_KEY }}';" >> lib/.secrets.g.dart
174 + echo "const payfuraApiKey = '${{ secrets.PAYFURA_API_KEY }}';" >> lib/.secrets.g.dart
175 + echo "const ankrApiKey = '${{ secrets.ANKR_API_KEY }}';" >> lib/.secrets.g.dart
176 + echo "const etherScanApiKey = '${{ secrets.ETHER_SCAN_API_KEY }}';" >> lib/.secrets.g.dart
177 + echo "const polygonScanApiKey = '${{ secrets.POLYGON_SCAN_API_KEY }}';" >> lib/.secrets.g.dart
178 + echo "const etherScanApiKey = '${{ secrets.ETHER_SCAN_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
179 + echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
180 + echo "const chatwootWebsiteToken = '${{ secrets.CHATWOOT_WEBSITE_TOKEN }}';" >> lib/.secrets.g.dart
181 + echo "const exolixApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
182 + echo "const robinhoodApplicationId = '${{ secrets.ROBINHOOD_APPLICATION_ID }}';" >> lib/.secrets.g.dart
183 + echo "const exchangeHelperApiKey = '${{ secrets.ROBINHOOD_CID_CLIENT_SECRET }}';" >> lib/.secrets.g.dart
184 + echo "const walletConnectProjectId = '${{ secrets.WALLET_CONNECT_PROJECT_ID }}';" >> lib/.secrets.g.dart
185 + echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> lib/.secrets.g.dart
186 + echo "const polygonScanApiKey = '${{ secrets.POLYGON_SCAN_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
187 + echo "const ankrApiKey = '${{ secrets.ANKR_API_KEY }}';" >> cw_solana/lib/.secrets.g.dart
188 + echo "const testCakePayApiKey = '${{ secrets.TEST_CAKE_PAY_API_KEY }}';" >> lib/.secrets.g.dart
189 + echo "const cakePayApiKey = '${{ secrets.CAKE_PAY_API_KEY }}';" >> lib/.secrets.g.dart
190 + echo "const authorization = '${{ secrets.CAKE_PAY_AUTHORIZATION }}';" >> lib/.secrets.g.dart
191 + echo "const CSRFToken = '${{ secrets.CSRF_TOKEN }}';" >> lib/.secrets.g.dart
192 + echo "const quantexExchangeMarkup = '${{ secrets.QUANTEX_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
193 + echo "const nano2ApiKey = '${{ secrets.NANO2_API_KEY }}';" >> cw_nano/lib/.secrets.g.dart
194 + echo "const nanoNowNodesApiKey = '${{ secrets.NANO_NOW_NODES_API_KEY }}';" >> cw_nano/lib/.secrets.g.dart
195 + echo "const tronGridApiKey = '${{ secrets.TRON_GRID_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart
196 + echo "const tronNowNodesApiKey = '${{ secrets.TRON_NOW_NODES_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart
197 + echo "const meldTestApiKey = '${{ secrets.MELD_TEST_API_KEY }}';" >> lib/.secrets.g.dart
198 + echo "const meldTestPublicKey = '${{ secrets.MELD_TEST_PUBLIC_KEY}}';" >> lib/.secrets.g.dart
199 + echo "const letsExchangeBearerToken = '${{ secrets.LETS_EXCHANGE_TOKEN }}';" >> lib/.secrets.g.dart
200 + echo "const letsExchangeAffiliateId = '${{ secrets.LETS_EXCHANGE_AFFILIATE_ID }}';" >> lib/.secrets.g.dart
201 + echo "const stealthExBearerToken = '${{ secrets.STEALTH_EX_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
202 + echo "const stealthExAdditionalFeePercent = '${{ secrets.STEALTH_EX_ADDITIONAL_FEE_PERCENT }}';" >> lib/.secrets.g.dart
203 + echo "const moneroTestWalletSeeds ='${{ secrets.MONERO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
204 + echo "const moneroLegacyTestWalletSeeds = '${{ secrets.MONERO_LEGACY_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
205 + echo "const bitcoinTestWalletSeeds = '${{ secrets.BITCOIN_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
206 + echo "const ethereumTestWalletSeeds = '${{ secrets.ETHEREUM_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
207 + echo "const litecoinTestWalletSeeds = '${{ secrets.LITECOIN_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
208 + echo "const bitcoinCashTestWalletSeeds = '${{ secrets.BITCOIN_CASH_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
209 + echo "const polygonTestWalletSeeds = '${{ secrets.POLYGON_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
210 + echo "const solanaTestWalletSeeds = '${{ secrets.SOLANA_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
211 + echo "const tronTestWalletSeeds = '${{ secrets.TRON_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
212 + echo "const nanoTestWalletSeeds = '${{ secrets.NANO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
213 + echo "const wowneroTestWalletSeeds = '${{ secrets.WOWNERO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
214 + echo "const moneroTestWalletReceiveAddress = '${{ secrets.MONERO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
215 + echo "const bitcoinTestWalletReceiveAddress = '${{ secrets.BITCOIN_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
216 + echo "const ethereumTestWalletReceiveAddress = '${{ secrets.ETHEREUM_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
217 + echo "const litecoinTestWalletReceiveAddress = '${{ secrets.LITECOIN_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
218 + echo "const bitcoinCashTestWalletReceiveAddress = '${{ secrets.BITCOIN_CASH_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
219 + echo "const polygonTestWalletReceiveAddress = '${{ secrets.POLYGON_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
220 + echo "const solanaTestWalletReceiveAddress = '${{ secrets.SOLANA_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
221 + echo "const tronTestWalletReceiveAddress = '${{ secrets.TRON_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
222 + echo "const nanoTestWalletReceiveAddress = '${{ secrets.NANO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
223 + echo "const wowneroTestWalletReceiveAddress = '${{ secrets.WOWNERO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
224 + echo "const moneroTestWalletBlockHeight = '${{ secrets.MONERO_TEST_WALLET_BLOCK_HEIGHT }}';" >> lib/.secrets.g.dart
225 +
226 + - name: Rename app
227 + run: |
228 + echo -e "id=com.cakewallet.test_${{ env.PR_NUMBER }}\nname=${{ env.BRANCH_NAME }}" > /opt/android/cake_wallet/android/app.properties
229 +
230 + - name: Build
231 + run: |
232 + cd /opt/android/cake_wallet
233 + flutter build apk --release --split-per-abi
234 +
235 + # - name: Rename apk file
236 + # run: |
237 + # cd /opt/android/cake_wallet/build/app/outputs/flutter-apk
238 + # mkdir test-apk
239 + # cp app-arm64-v8a-release.apk test-apk/${{env.BRANCH_NAME}}.apk
240 + # cp app-x86_64-release.apk test-apk/${{env.BRANCH_NAME}}_x86.apk
241 +
242 + # - name: Upload Artifact
243 + # uses: kittaakos/upload-artifact-as-is@v0
244 + # with:
245 + # path: /opt/android/cake_wallet/build/app/outputs/flutter-apk/test-apk/
246 +
247 + # - name: Send Test APK
248 + # continue-on-error: true
249 + # uses: adrey/slack-file-upload-action@1.0.5
250 + # with:
251 + # token: ${{ secrets.SLACK_APP_TOKEN }}
252 + # path: /opt/android/cake_wallet/build/app/outputs/flutter-apk/test-apk/${{env.BRANCH_NAME}}.apk
253 + # channel: ${{ secrets.SLACK_APK_CHANNEL }}
254 + # title: "${{ env.BRANCH_NAME }}.apk"
255 + # filename: ${{ env.BRANCH_NAME }}.apk
256 + # initial_comment: ${{ github.event.head_commit.message }}
257 +
258 + - name: 🦾 Enable KVM
259 + run: |
260 + echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
261 + sudo udevadm control --reload-rules
262 + sudo udevadm trigger --name-match=kvm
263 +
264 + - name: 🦾 Cache gradle
265 + uses: gradle/actions/setup-gradle@v3
266 +
267 + - name: 🦾 Cache AVD
268 + uses: actions/cache@v4
269 + id: avd-cache
270 + with:
271 + path: |
272 + ~/.android/avd/*
273 + ~/.android/adb*
274 + key: avd-${{ matrix.api-level }}
275 +
276 + - name: 🦾 Create AVD and generate snapshot for caching
277 + if: steps.avd-cache.outputs.cache-hit != 'true'
278 + uses: reactivecircus/android-emulator-runner@v2
279 + with:
280 + api-level: ${{ matrix.api-level }}
281 + force-avd-creation: false
282 + # arch: ${{ matrix.arch }}
283 + emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
284 + working-directory: /opt/android/cake_wallet
285 + disable-animations: false
286 + script: echo "Generated AVD snapshot for caching."
287 +
288 + - name: 🚀 Integration tests on Android Emulator
289 + uses: reactivecircus/android-emulator-runner@v2
290 + with:
291 + api-level: ${{ matrix.api-level }}
292 + force-avd-creation: false
293 + emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
294 + disable-animations: true
295 + working-directory: /opt/android/cake_wallet
296 + script: |
297 + chmod a+rx integration_test_runner.sh
298 + ./integration_test_runner.sh