1
-name: PR Test Build linux
1
+name: Cake Wallet Linux
2
3
-on:
4
- pull_request:
5
- branches: [main]
6
- workflow_dispatch:
7
- inputs:
8
- branch:
9
- description: "Branch name to build"
10
- required: true
11
- default: "main"
3
+on: [push]
4
5
+defaults:
6
+ run:
7
+ shell: bash
8
jobs:
9
PR_test_build:
15
- runs-on: ubuntu-20.04
16
- env:
17
- STORE_PASS: test@cake_wallet
18
- KEY_PASS: test@cake_wallet
19
- PR_NUMBER: ${{ github.event.number }}
10
+ runs-on: linux-amd64
11
+ container:
12
+ image: ghcr.io/cake-tech/cake_wallet:main-linux
13
+ env:
14
+ STORE_PASS: test@cake_wallet
15
+ KEY_PASS: test@cake_wallet
16
+ MONEROC_CACHE_DIR_ROOT: /opt/generic_cache
17
+ BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
18
+ DESKTOP_FORCE_MOBILE: Y
19
+ volumes:
20
+ - /opt/cw_cache_linux/root/.cache:/root/.cache
21
+ - /opt/cw_cache_linux/root/.ccache:/root/.ccache
22
+ - /opt/cw_cache_linux/root/.pub-cache/:/root/.pub-cache
23
+ - /opt/cw_cache_linux/root/go/pkg:/root/go/pkg
24
+ - /opt/cw_cache_linux/opt/generic_cache:/opt/generic_cache
25
+ strategy:
26
+ matrix:
27
+ api-level: [29]
28
29
steps:
22
- - name: is pr
23
- if: github.event_name == 'pull_request'
24
- run: echo "BRANCH_NAME=${GITHUB_HEAD_REF}" >> $GITHUB_ENV
25
-
26
- - name: is not pr
27
- if: github.event_name != 'pull_request'
28
- run: echo "BRANCH_NAME=${{ github.event.inputs.branch }}" >> $GITHUB_ENVg
29
-
30
- - uses: actions/checkout@v2
31
- - uses: actions/setup-java@v1
32
- with:
33
- java-version: "17.x"
34
- - name: Configure placeholder git details
35
- run: |
36
- git config --global user.email "CI@cakewallet.com"
37
- git config --global user.name "Cake Github Actions"
38
- - name: Flutter action
39
- uses: subosito/flutter-action@v1
40
- with:
41
- flutter-version: "3.24.0"
42
- channel: stable
43
-
44
- - name: Install package dependencies
45
- run: |
46
- sudo apt update
47
- sudo apt-get install -y curl unzip automake build-essential file pkg-config git python-is-python3 libtool libtinfo5 cmake clang
48
-
49
- - name: Install desktop dependencies
50
- run: |
51
- sudo apt update
52
- sudo apt install -y ninja-build libgtk-3-dev gperf
53
- - name: Execute Build and Setup Commands
54
- run: |
55
- sudo mkdir -p /opt/android
56
- sudo chown $USER /opt/android
57
- cd /opt/android
58
- -y curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
59
- cargo install cargo-ndk
60
- git clone https://github.com/cake-tech/cake_wallet.git --branch ${{ env.BRANCH_NAME }}
61
- cd scripts && ./gen_android_manifest.sh && cd ..
62
- cd cake_wallet/scripts/android/
63
- source ./app_env.sh cakewallet
64
- ./app_config.sh
65
- cd ../../..
66
- cd cake_wallet/scripts/linux/
67
- source ./app_env.sh cakewallet
68
- ./app_config.sh
69
- cd ../../..
70
-
71
- - name: Cache Externals
72
- id: cache-externals
73
- uses: actions/cache@v3
74
- with:
75
- path: |
76
- /opt/android/cake_wallet/cw_haven/android/.cxx
77
- /opt/android/cake_wallet/scripts/monero_c/release
78
- key: linux_${{ hashFiles('**/prepare_moneroc.sh' ,'**/build_monero_all.sh' ,'**/cache_dependencies.yml') }}
79
-
80
- - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }}
81
- name: Generate Externals
82
- run: |
83
- cd /opt/android/cake_wallet/scripts/linux/
84
- source ./app_env.sh cakewallet
85
- ./build_monero_all.sh
86
-
87
- - name: Install Flutter dependencies
88
- run: |
89
- cd /opt/android/cake_wallet
90
- flutter pub get
91
-
92
- - name: Install go and gomobile
93
- run: |
94
- # install go > 1.23:
95
- wget https://go.dev/dl/go1.23.1.linux-amd64.tar.gz
96
- sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.1.linux-amd64.tar.gz
97
- export PATH=$PATH:/usr/local/go/bin
98
- export PATH=$PATH:~/go/bin
99
- go install golang.org/x/mobile/cmd/gomobile@latest
100
- gomobile init
101
-
102
- - name: Build mwebd
103
- run: |
104
- # paths are reset after each step, so we need to set them again:
105
- export PATH=$PATH:/usr/local/go/bin
106
- export PATH=$PATH:~/go/bin
107
- # build mwebd:
108
- cd /opt/android/cake_wallet/scripts/android/
109
- ./build_mwebd.sh --dont-install
110
-
111
- - name: Generate localization
30
+ - name: Fix github actions messing up $HOME...
31
+ run: 'echo HOME=/root | sudo tee -a $GITHUB_ENV'
32
+ - uses: actions/checkout@v4
33
+ - name: configure git
34
run: |
113
- cd /opt/android/cake_wallet
114
- dart run tool/generate_localization.dart
115
-
116
- - name: Build generated code
117
- run: |
118
- cd /opt/android/cake_wallet
119
- ./model_generator.sh
120
-
35
+ git config --global user.email "ci@cakewallet.com"
36
+ git config --global user.name "CakeWallet CI"
37
- name: Add secrets
38
run: |
123
- cd /opt/android/cake_wallet
39
touch lib/.secrets.g.dart
40
touch cw_evm/lib/.secrets.g.dart
41
touch cw_solana/lib/.secrets.g.dart
42
touch cw_core/lib/.secrets.g.dart
43
touch cw_nano/lib/.secrets.g.dart
44
touch cw_tron/lib/.secrets.g.dart
130
- echo "const salt = '${{ secrets.SALT }}';" > lib/.secrets.g.dart
131
- echo "const keychainSalt = '${{ secrets.KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
132
- echo "const key = '${{ secrets.KEY }}';" >> lib/.secrets.g.dart
133
- echo "const walletSalt = '${{ secrets.WALLET_SALT }}';" >> lib/.secrets.g.dart
134
- echo "const shortKey = '${{ secrets.SHORT_KEY }}';" >> lib/.secrets.g.dart
135
- echo "const backupSalt = '${{ secrets.BACKUP_SALT }}';" >> lib/.secrets.g.dart
136
- echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
45
+ if [[ "x${{ secrets.SALT }}" == "x" ]];
46
+ then
47
+ echo "const salt = '954f787f12622067f7e548d9450c3832';" > lib/.secrets.g.dart
48
+ else
49
+ echo "const salt = '${{ secrets.SALT }}';" > lib/.secrets.g.dart
50
+ fi
51
+ if [[ "x${{ secrets.KEY_CHAIN_SALT }}" == "x" ]];
52
+ then
53
+ echo "const keychainSalt = '2d2beba777dbf7dff7013b7a';" >> lib/.secrets.g.dart
54
+ else
55
+ echo "const keychainSalt = '${{ secrets.KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
56
+ fi
57
+ if [[ "x${{ secrets.KEY }}" == "x" ]];
58
+ then
59
+ echo "const key = '638e98820ec10a2945e968435c9397a3';" >> lib/.secrets.g.dart
60
+ else
61
+ echo "const key = '${{ secrets.KEY }}';" >> lib/.secrets.g.dart
62
+ fi
63
+ if [[ "x${{ secrets.WALLET_SALT }}" == "x" ]];
64
+ then
65
+ echo "const walletSalt = '8f7f1b70';" >> lib/.secrets.g.dart
66
+ else
67
+ echo "const walletSalt = '${{ secrets.WALLET_SALT }}';" >> lib/.secrets.g.dart
68
+ fi
69
+ if [[ "x${{ secrets.SHORT_KEY }}" == "x" ]];
70
+ then
71
+ echo "const shortKey = '653f270c2c152bc7ec864afe';" >> lib/.secrets.g.dart
72
+ else
73
+ echo "const shortKey = '${{ secrets.SHORT_KEY }}';" >> lib/.secrets.g.dart
74
+ fi
75
+ if [[ "x${{ secrets.BACKUP_SALT }}" == "x" ]];
76
+ then
77
+ echo "const backupSalt = 'bf630d24ff0b6f60';" >> lib/.secrets.g.dart
78
+ else
79
+ echo "const backupSalt = '${{ secrets.BACKUP_SALT }}';" >> lib/.secrets.g.dart
80
+ fi
81
+ if [[ "x${{ secrets.BACKUP_KEY_CHAIN_SALT }}" == "x" ]];
82
+ then
83
+ echo "const backupKeychainSalt = 'bf630d24ff0b6f60';" >> lib/.secrets.g.dart
84
+ else
85
+ echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
86
+ fi
87
echo "const changeNowApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
88
echo "const changeNowApiKeyDesktop = '${{ secrets.CHANGE_NOW_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
89
echo "const wyreSecretKey = '${{ secrets.WYRE_SECRET_KEY }}';" >> lib/.secrets.g.dart
94
echo "const sideShiftAffiliateId = '${{ secrets.SIDE_SHIFT_AFFILIATE_ID }}';" >> lib/.secrets.g.dart
95
echo "const simpleSwapApiKey = '${{ secrets.SIMPLE_SWAP_API_KEY }}';" >> lib/.secrets.g.dart
96
echo "const simpleSwapApiKeyDesktop = '${{ secrets.SIMPLE_SWAP_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
147
- echo "const polygonScanApiKey = '${{ secrets.POLYGON_SCAN_API_KEY }}';" >> lib/.secrets.g.dart
148
- echo "const etherScanApiKey = '${{ secrets.ETHER_SCAN_API_KEY }}';" >> lib/.secrets.g.dart
97
echo "const onramperApiKey = '${{ secrets.ONRAMPER_API_KEY }}';" >> lib/.secrets.g.dart
98
echo "const anypayToken = '${{ secrets.ANY_PAY_TOKEN }}';" >> lib/.secrets.g.dart
99
echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart
104
echo "const fiatApiKey = '${{ secrets.FIAT_API_KEY }}';" >> lib/.secrets.g.dart
105
echo "const ankrApiKey = '${{ secrets.ANKR_API_KEY }}';" >> lib/.secrets.g.dart
106
echo "const chainStackApiKey = '${{ secrets.CHAIN_STACK_API_KEY }}';" >> lib/.secrets.g.dart
107
+ echo "const etherScanApiKey = '${{ secrets.ETHER_SCAN_API_KEY }}';" >> lib/.secrets.g.dart
108
+ echo "const polygonScanApiKey = '${{ secrets.POLYGON_SCAN_API_KEY }}';" >> lib/.secrets.g.dart
109
echo "const etherScanApiKey = '${{ secrets.ETHER_SCAN_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
110
echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
111
+ echo "const nowNodesApiKey = '${{ secrets.EVM_NOWNODES_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
112
echo "const chatwootWebsiteToken = '${{ secrets.CHATWOOT_WEBSITE_TOKEN }}';" >> lib/.secrets.g.dart
113
echo "const exolixApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
114
echo "const robinhoodApplicationId = '${{ secrets.ROBINHOOD_APPLICATION_ID }}';" >> lib/.secrets.g.dart
116
echo "const walletConnectProjectId = '${{ secrets.WALLET_CONNECT_PROJECT_ID }}';" >> lib/.secrets.g.dart
117
echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> lib/.secrets.g.dart
118
echo "const polygonScanApiKey = '${{ secrets.POLYGON_SCAN_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
168
- echo "const nowNodesApiKey = '${{ secrets.EVM_NOWNODES_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
119
echo "const ankrApiKey = '${{ secrets.ANKR_API_KEY }}';" >> cw_solana/lib/.secrets.g.dart
120
echo "const chainStackApiKey = '${{ secrets.CHAIN_STACK_API_KEY }}';" >> cw_solana/lib/.secrets.g.dart
121
echo "const testCakePayApiKey = '${{ secrets.TEST_CAKE_PAY_API_KEY }}';" >> lib/.secrets.g.dart
128
echo "const tronGridApiKey = '${{ secrets.TRON_GRID_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart
129
echo "const tronNowNodesApiKey = '${{ secrets.TRON_NOW_NODES_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart
130
echo "const meldTestApiKey = '${{ secrets.MELD_TEST_API_KEY }}';" >> lib/.secrets.g.dart
181
- echo "const meldTestPublicKey = '${{ secrets.MELD_TEST_PUBLIC_KEY}}';" >> lib/.secrets.g.dar
131
+ echo "const meldTestPublicKey = '${{ secrets.MELD_TEST_PUBLIC_KEY}}';" >> lib/.secrets.g.dart
132
echo "const letsExchangeBearerToken = '${{ secrets.LETS_EXCHANGE_TOKEN }}';" >> lib/.secrets.g.dart
133
echo "const letsExchangeAffiliateId = '${{ secrets.LETS_EXCHANGE_AFFILIATE_ID }}';" >> lib/.secrets.g.dart
134
echo "const stealthExBearerToken = '${{ secrets.STEALTH_EX_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
135
echo "const stealthExAdditionalFeePercent = '${{ secrets.STEALTH_EX_ADDITIONAL_FEE_PERCENT }}';" >> lib/.secrets.g.dart
136
+ # tests
137
+ echo "const moneroTestWalletSeeds ='${{ secrets.MONERO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
138
+ echo "const moneroLegacyTestWalletSeeds = '${{ secrets.MONERO_LEGACY_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
139
+ echo "const bitcoinTestWalletSeeds = '${{ secrets.BITCOIN_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
140
+ echo "const ethereumTestWalletSeeds = '${{ secrets.ETHEREUM_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
141
+ echo "const litecoinTestWalletSeeds = '${{ secrets.LITECOIN_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
142
+ echo "const bitcoinCashTestWalletSeeds = '${{ secrets.BITCOIN_CASH_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
143
+ echo "const polygonTestWalletSeeds = '${{ secrets.POLYGON_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
144
+ echo "const solanaTestWalletSeeds = '${{ secrets.SOLANA_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
145
+ echo "const tronTestWalletSeeds = '${{ secrets.TRON_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
146
+ echo "const nanoTestWalletSeeds = '${{ secrets.NANO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
147
+ echo "const wowneroTestWalletSeeds = '${{ secrets.WOWNERO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
148
+ echo "const moneroTestWalletReceiveAddress = '${{ secrets.MONERO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
149
+ echo "const bitcoinTestWalletReceiveAddress = '${{ secrets.BITCOIN_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
150
+ echo "const ethereumTestWalletReceiveAddress = '${{ secrets.ETHEREUM_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
151
+ echo "const litecoinTestWalletReceiveAddress = '${{ secrets.LITECOIN_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
152
+ echo "const bitcoinCashTestWalletReceiveAddress = '${{ secrets.BITCOIN_CASH_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
153
+ echo "const polygonTestWalletReceiveAddress = '${{ secrets.POLYGON_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
154
+ echo "const solanaTestWalletReceiveAddress = '${{ secrets.SOLANA_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
155
+ echo "const tronTestWalletReceiveAddress = '${{ secrets.TRON_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
156
+ echo "const nanoTestWalletReceiveAddress = '${{ secrets.NANO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
157
+ echo "const wowneroTestWalletReceiveAddress = '${{ secrets.WOWNERO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
158
+ echo "const moneroTestWalletBlockHeight = '${{ secrets.MONERO_TEST_WALLET_BLOCK_HEIGHT }}';" >> lib/.secrets.g.dart
159
+ - name: prepare monero_c and cache
160
+ run: |
161
+ export MONEROC_HASH=$(cat scripts/prepare_moneroc.sh | grep 'git checkout' | xargs | awk '{ print $3 }')
162
+ echo MONEROC_HASH=$MONEROC_HASH >> /etc/environment
163
+ mkdir -p "$MONEROC_CACHE_DIR_ROOT/moneroc-$MONEROC_HASH/monero_c"
164
+ pushd scripts
165
+ ln -s "$MONEROC_CACHE_DIR_ROOT/moneroc-$MONEROC_HASH/monero_c"
166
+ ./prepare_moneroc.sh
167
+ popd
168
+ pushd scripts/monero_c
169
+ mkdir -p "$MONEROC_CACHE_DIR_ROOT/_cache/contrib/depends/built" || true
170
+ mkdir -p "$MONEROC_CACHE_DIR_ROOT/_cache/monero/contrib/depends/built" || true
171
+ mkdir -p "$MONEROC_CACHE_DIR_ROOT/_cache/wownero/contrib/depends/built" || true
172
+ mkdir -p "$MONEROC_CACHE_DIR_ROOT/_cache/contrib/depends/sources" || true
173
+ mkdir -p "$MONEROC_CACHE_DIR_ROOT/_cache/monero/contrib/depends/sources" || true
174
+ mkdir -p "$MONEROC_CACHE_DIR_ROOT/_cache/wownero/contrib/depends/sources" || true
175
+
176
+ rm -rf "$PWD/contrib/depends/built" "$PWD/monero/contrib/depends/built" "$PWD/wownero/contrib/depends/built"
177
+ rm -rf "$PWD/contrib/depends/sources" "$PWD/monero/contrib/depends/sources" "$PWD/wownero/contrib/depends/sources"
178
+ mkdir -p contrib/depends || true
179
+ ln -sf "$MONEROC_CACHE_DIR_ROOT/_cache/contrib/depends/built" "$PWD/contrib/depends/built"
180
+ ln -sf "$MONEROC_CACHE_DIR_ROOT/_cache/monero/contrib/depends/built" "$PWD/monero/contrib/depends/built"
181
+ ln -sf "$MONEROC_CACHE_DIR_ROOT/_cache/wownero/contrib/depends/built" "$PWD/wownero/contrib/depends/built"
182
+ ln -sf "$MONEROC_CACHE_DIR_ROOT/_cache/contrib/depends/sources" "$PWD/contrib/depends/sources"
183
+ ln -sf "$MONEROC_CACHE_DIR_ROOT/_cache/monero/contrib/depends/sources" "$PWD/monero/contrib/depends/sources"
184
+ ln -sf "$MONEROC_CACHE_DIR_ROOT/_cache/wownero/contrib/depends/sources" "$PWD/wownero/contrib/depends/sources"
185
+ popd
186
+
187
+ - name: Execute Build and Setup Commands
188
+ run: |
189
+ pushd scripts/linux
190
+ source ./app_env.sh cakewallet
191
+ ./app_config.sh
192
+ popd
193
+
194
+ - name: Build monero_c
195
+ run: |
196
+ pushd scripts/linux/
197
+ source ./app_env.sh cakewallet
198
+ ./build_monero_all.sh
199
+ popd
200
+
201
+ - name: Install Flutter dependencies
202
+ run: |
203
+ flutter pub get
204
187
- - name: Rename app
205
+ - name: Build generated code
206
+ run: |
207
+ ./model_generator.sh async
208
+
209
+ - name: Generate localization
210
run: |
189
- echo -e "id=com.cakewallet.test_${{ env.PR_NUMBER }}\nname=${{ env.BRANCH_NAME }}" > /opt/android/cake_wallet/android/app.properties
211
+ dart run tool/generate_localization.dart
212
191
- - name: Build
213
+ - name: Build linux
214
run: |
193
- cd /opt/android/cake_wallet
215
flutter build linux --release
216
196
- - name: Prepare release zip file
217
+ - name: Compress release
218
run: |
198
- cd /opt/android/cake_wallet/build/linux/x64/release
199
- zip -r ${{env.BRANCH_NAME}}.zip bundle
219
+ pushd build/linux/x64/release
220
+ zip -r cakewallet_linux.zip bundle
221
+ popd
222
201
- - name: Upload Artifact
223
+ - name: Upload Artifact to github
224
uses: kittaakos/upload-artifact-as-is@v0
225
with:
204
- path: /opt/android/cake_wallet/build/linux/x64/release/${{env.BRANCH_NAME}}.zip
226
+ path: ${{ github.workspace }}/build/linux/x64/release/cakewallet_linux.zip
227
+
228
+ - name: Prepare virtual desktop
229
+ if: ${{ contains(github.event.head_commit.message, 'run tests') }}
230
+ run: |
231
+ nohup Xvfb :99 -screen 0 720x1280x16 &
232
+ echo DISPLAY=:99 | sudo tee -a $GITHUB_ENV
233
+ dbus-daemon --system --fork
234
+ nohup NetworkManager &
235
+ nohup ffmpeg -framerate 60 -video_size 720x1280 -f x11grab -i :99 -c:v libx264 -c:a aac /opt/screen_grab.mkv &
236
+
237
+ # Note for people adding tests:
238
+ # - Tests are ran on Linux, with some things being mocked out.
239
+ # - Screen recording is being provided for the entire length of the test, you can download it in github articats.
240
+ # - Screen recordeding is encrypted, look at step "Stop screen recording, encrypt and upload", and add your key if you want
241
+ # Reason for encryption is the fact that we restore the wallet from seed, and we don't want to leak that, while there
242
+ # isn't much in those wallets anyway, we still wouldn't like to leak it to anyone who is able to access github.
243
206
-# Just as an artifact would be enough
207
-# - name: Send Test APK
208
-# continue-on-error: true
209
-# uses: adrey/slack-file-upload-action@1.0.5
210
-# with:
211
-# token: ${{ secrets.SLACK_APP_TOKEN }}
212
-# path: /opt/android/cake_wallet/build/linux/x64/release/${{env.BRANCH_NAME}}.zip
213
-# channel: ${{ secrets.SLACK_APK_CHANNEL }}
214
-# title: "${{ env.BRANCH_NAME }}_linux.zip"
215
-# filename: ${{ env.BRANCH_NAME }}_linux.zip
216
-# initial_comment: ${{ github.event.head_commit.message }}
244
+ - name: Test [confirm_seeds_flow_test]
245
+ if: ${{ contains(github.event.head_commit.message, 'run tests') }}
246
+ timeout-minutes: 20
247
+ run: |
248
+ xmessage -timeout 30 "confirm_seeds_flow_test" &
249
+ rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet
250
+ exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/confirm_seeds_flow_test.dart
251
+ - name: Test [create_wallet_flow_test]
252
+ if: ${{ contains(github.event.head_commit.message, 'run tests') }}
253
+ timeout-minutes: 20
254
+ run: |
255
+ xmessage -timeout 30 "create_wallet_flow_test" &
256
+ rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet
257
+ exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/create_wallet_flow_test.dart
258
+ - name: Test [exchange_flow_test]
259
+ if: ${{ contains(github.event.head_commit.message, 'run tests') }}
260
+ timeout-minutes: 20
261
+ run: |
262
+ xmessage -timeout 30 "exchange_flow_test" &
263
+ rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet
264
+ exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/exchange_flow_test.dart
265
+ - name: Test [restore_wallet_through_seeds_flow_test]
266
+ if: ${{ contains(github.event.head_commit.message, 'run tests') }}
267
+ timeout-minutes: 20
268
+ run: |
269
+ xmessage -timeout 30 "restore_wallet_through_seeds_flow_test" &
270
+ rm -rf ~/.local/share/com.example.cake_wallet/ ~/Documents/cake_wallet/ ~/cake_wallet
271
+ exec timeout --signal=SIGKILL 900 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test_suites/restore_wallet_through_seeds_flow_test.dart
272
+ - name: Stop screen recording, encrypt and upload
273
+ if: always()
274
+ run: |
275
+ if [[ ! -f "/opt/screen_grab.mkv" ]];
276
+ then
277
+ exit 0;
278
+ fi
279
+ killall ffmpeg
280
+ sleep 5
281
+ killall -9 ffmpeg || true
282
+ sleep 5
283
+ # Feel free to add your own public key if you wish
284
+ gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys 6B3199AD9B3D23B8 # konstantin@cakewallet.com
285
+ gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys 35C8DBAFB8D9ACAC # cyjan@mrcyjanek.net
286
+ gpg --trust-model always --encrypt --output /opt/screen_grab.mkv.gpg \
287
+ --recipient 6B3199AD9B3D23B8 \
288
+ --recipient 35C8DBAFB8D9ACAC \
289
+ /opt/screen_grab.mkv
290
+ rm /opt/screen_grab.mkv
291
+ mv /opt/screen_grab.mkv.gpg ./screen_grab.mkv.gpg
292
+ - name: Upload Artifact to github
293
+ if: always()
294
+ continue-on-error: true
295
+ uses: kittaakos/upload-artifact-as-is@v0
296
+ with:
297
+ path: ${{ github.workspace }}/screen_grab.mkv.gpg